0

因此,我试图通过在新鲜书的开发人员页面(http://developers.freshbooks.com/)上详细说明示例请求来与新鲜书 api 进行通信。我们正在执行基于令牌的身份验证,而不是使用 OAuth。

我有我的代码在电子表格中记录对我的请求的响应。它记录的响应如下:

<?xml version="1.0" encoding="utf-8"?>
<response xmlns="http://www.freshbooks.com/api/" status="fail">
  <error>Authentication failed.</error>
  <code>20010</code>
</response>

在控制台中使用 curl 命令时,我已经能够进行身份验证,但在运行脚本时却不能。下面是我使用的代码。省略了电子表格部分的日志记录以及我们特定的 url 和 authToken:

// Sample function to call into an API using basic HTTP auth
function freshbooksTest () {
  var url = ;
  var authToken = ;

  var unamepass =authToken+":X";
  var digestfull = "Basic "+unamepass;


  var payload = '<request method="system.current"></request>';

  var options =
    {
      "method" : "post",
      "muteHttpExceptions": true,
      "headers" : {"Authorization": digestfull},
      "payload" : payload
    };

    var response = UrlFetchApp.fetch(url, options);
    var xml = response.getContentText();
}

我检查了人们遇到类似问题的线程,但解决方案要么不适用于我的情况,要么已经尝试过。欢迎任何建议。

4

2 回答 2

0

对 UrlFetchApp 不是特别熟悉,但如果它不适合您,则需要digestfull在将其发送到标头之前进行 Base64 编码。

于 2013-09-11T14:03:30.673 回答
0

看起来您需要对您的身份验证令牌进行 base 64 编码。代码应如下所示:

function freshbooksTest () {
  var url = ;
  var authToken = ;

  var unamepass = authToken+":X";
  var digestfull = "Basic "+ Utilities.base64Encode(unamepass);


  var payload = '<request method="system.current"></request>';

  var options =
    {
      "method" : "post",
      "muteHttpExceptions": true,
      "headers" : {"Authorization": digestfull},
      "payload" : payload
    };

    var response = UrlFetchApp.fetch(url, options);
    var xml = response.getContentText();
}
于 2017-04-07T23:57:20.033 回答