0

そのため、freshbooks の開発者ページ ( 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 コマンドを使用すると認証できましたが、スクリプトを実行すると認証できませんでした。以下は私が使用したコードです。スプレッドシート部分へのロギングと、特定の 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

認証トークンを 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 に答える