UrlFetchApp身份验证失败了Freshbooks

时间:2013-09-10 18:41:05

标签: urlfetch freshbooks-api

所以我试图通过在新书的开发者页面(http://developers.freshbooks.com/)上详细说明样本请求来与freshbooks 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命令时能够进行身份验证,但在运行脚本时则无法进行身份验证。以下是我使用的代码。遗漏了日志记录到电子表格部分以及我们的特定网址和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();
}

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

2 个答案:

答案 0 :(得分:0)

不熟悉UrlFetchApp,但如果它不适合您,则需要在标题中发送之前对Base64进行编码digestfull

答案 1 :(得分:0)

看起来您需要对您的身份验证令牌进行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();
}