我有下面的工作API的PHP代码。 API将使用一些标头并对其进行加密,以与也是标头中一项的Client-Signature
进行比较。
我已翻译为Google App脚本。但是很不幸,我收到了应用脚本代码的签名错误。
我的问题是,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 );
答案 0 :(得分:3)
非常感谢您的建议。 创建了一个Web服务,该服务打印接收到的标头并发现了此标头。
Google App Script放置自己的User-Agent值,而不管您在fetch方法中放置在User-Agent上的内容如何。 UrlFetchApp.getRequest不显示什么User-Agent值分配给Web服务。它只会显示您输入的内容。
因此,在这种情况下,我将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)
当请求到达以下Web服务时,User-Agent标头中将显示以下内容:
Mozilla / 5.0(兼容; Google-Apps-Script)
由于使用了User-Agent来计算签名,因此出现签名错误。