PHP Curl Перевод в Google App Script Fetch URL - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть рабочий код PHP ниже, который вызывает API.API будет использовать некоторые заголовки и шифровать их для сравнения с Client-Signature, который также является одним элементом в заголовке.

Я перевел на Google App Script.Но, к сожалению, я получаю ошибку подписи для кода App Script.

Мой вопрос: будет ли Google App Script отображать заголовки так же, как показано в коде PHP?Поскольку все остальные проблемы исключены, я сомневаюсь, что способ отображения заголовков в HTTP-запросе может быть причиной проблемы с подписью.

Если вы видите другую проблему, пожалуйста, дайте мне знать.Я полностью застрял здесь.

$requestId = "**";
$tokenID = "**";
$signature = "**";

$ch = curl_init();
$url = "https://public-api.sandbox.bunq.com/v1/user/3079/monetary-account";
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_HEADER,1);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$headers = [
    "Cache-Control: no-cache",
    "Content-Type: application/json",
    "User-Agent: VBA-Web v4.1.5 (https://github.com/VBA-tools/VBA-Web)",
    "X-Bunq-Geolocation: 0 0 0 0 NL",
    "X-Bunq-Language: en_US",
    "X-Bunq-Region: en_US",
    "X-Bunq-Client-Request-Id: " . $requestId,
    "X-Bunq-Client-Authentication: " . $tokenID,    
    "X-Bunq-Client-Signature: " . $signature 
];
var_dump( $headers);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$server_output = curl_exec ($ch);
curl_close ($ch);
var_dump ( $server_output) ;

Код сценария Google App:

  var requestId = "**";
  var url = "https://public-api.sandbox.bunq.com/v1/user/3079/monetary-account";
  var tokenID = "**";
  var signature = "**";
  var RequestHeader =  {
    "Cache-Control" : "no-cache",
    "Content-Type" : "application/json" ,
    "User-Agent" : "VBA-Web v4.1.5 (https://github.com/VBA-tools/VBA-Web)",
    "X-Bunq-Geolocation" : "0 0 0 0 NL",
    "X-Bunq-Language" : "en_US",
    "X-Bunq-Region" : "en_US",
    "X-Bunq-Client-Request-Id" : requestId,
    "X-Bunq-Client-Authentication" : tokenID,   
    "X-Bunq-Client-Signature" : signature 
  };
  var options = {
  "method": "GET",
  "headers": RequestHeader,
  muteHttpExceptions : true
 }
 var response = UrlFetchApp.fetch(url, options);
Logger.log(response );

1 Ответ

0 голосов
/ 22 сентября 2018

Спасибо всем за ваши предложения. Создал веб-сервис, который печатает полученные заголовки и обнаружил это.

Google App Script помещает свое собственное значение User-Agent независимо от того, что вы указали в User-Agent в методе выборки. UrlFetchApp.getRequest не показывает, какое значение User-Agent отправляется веб-службе. Он показывает только то, что вы положили.

Так что в этом случае я поместил ниже значение User-Agent в заголовок:

VBA-Web v4.1.5 (https://github.com/VBA-tools/VBA-Web)

getRequest показывает ниже значение для User-Agent в заголовках:

VBA-Web v4.1.5 (https://github.com/VBA-tools/VBA-Web)

Когда запрос попадает на веб-сервис, он указывается в заголовке для User-Agent:

Mozilla / 5.0 (совместимо; Google-Apps-Script)

Поскольку при вычислении подписи использовался User-Agent, я получил ошибку Signature.

...