所以我试图通过在新书的开发者页面(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();
}
我已经检查过人们遇到类似问题的线程,但解决方案要么不适用于我的情况,要么已经尝试过。欢迎任何建议。
答案 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();
}