我正在尝试发送帖子请求以验证交易。我发送了与Postman相同的帖子请求,我收到了如下所示的回复:
Apps Script Code.gs:
function postRequest() {
var url = "https://ravesandboxapi.flutterwave.com/flwv3-pug/getpaidx/api/v2/verify";
var options = {
"method": "post",
"headers": {
"Content-Type": "application/json"
},
"payload": {
"SECKEY": "FLWSECK-e6db11d1f8a6208de8cb2f94e293450e-X",
"txref": "MC-1520443531487"
}
};
const response = UrlFetchApp.fetch(url, options);
Logger.log(JSON.stringify(response));
}
应用脚本错误响应:
请求https://ravesandboxapi.flutterwave.com/flwv3-pug/getpaidx/api/v2/verify返回代码400失败。
截断的服务器响应:SyntaxError:意外的令牌S. 在解析(/app/node_modules/body-parser/lib/types/json.js:83:15) at / app / node_mod ...(使用muteHttpExceptions选项检查完整响应)(第299行,文件“Code”)
我做错了什么或如何在Google Apps脚本中发送帖子请求?
UrlFetchApp.fetch()
函数有一个不寻常的怪癖,你必须使用contentType
属性来设置有效负载的内容类型。出于某种原因,直接设置标题似乎不起作用。
此外,你需要JSON.stringify()
你的有效载荷。
所以重写你的帖子请求如下:
function verify() {
var url = "https://ravesandboxapi.flutterwave.com/flwv3-pug/getpaidx/api/v2/verify";
var options = {
"method":"POST",
"contentType":"application/json",
"payload":JSON.stringify({
"SECKEY":"[YOUR-SECRET-KEY]",
"txref":"[YOUR-TXREF-CODE]"
})
};
return JSON.parse(UrlFetchApp.fetch(url, options));
}
请注意,我省略了带有占位符文本的键和代码。你真的不应该分享这种敏感信息。如果可能,我强烈建议您撤消这些密钥并让服务供应商发布新密钥。
这不是Google Apps脚本的问题,但flutterwave服务器返回400错误代码。
您可以通过向options对象添加“muteHttpExceptions”:true来检查这一点,然后在控制台中记录响应。
function postRequest1() {
var url = "https://ravesandboxapi.flutterwave.com/flwv3-pug/getpaidx/api/v2/verify";
var options = {
"method": "post",
"headers": {
"Content-Type": "application/json"
},
"payload": {
"SECKEY": "FLWSECK-e6db11d1f8a6208de8cb2f94e293450e-X",
"txref": "MC-1520443531487"
},
"muteHttpExceptions": true
};
const response = UrlFetchApp.fetch(url, options);
Logger.log(response.getResponseCode())
Logger.log(response.getContentText())
}
感谢Dimu Designs解释了UrlFetchApp.fetch()的怪癖
我所做的就是将Content-Type
改为contentType
function postRequest() {
var url = "https://ravesandboxapi.flutterwave.com/flwv3-pug/getpaidx/api/v2/verify";
var options = {
"method": "post",
"headers": {
"contentType": "application/json" // <-- HERE
},
"payload": {
"SECKEY": "FLWSECK-e6db11d1f8a6208de8cb2f94e293450e-X",
"txref": "MC-1520443531487"
},
"muteHttpExceptions": true
};
const response = UrlFetchApp.fetch(url, options);
Logger.log(response.getContentText());
Logger.log('Response Code: '+response.getResponseCode())
}
另一方面,"muteHttpExceptions": true
就在那里,以便我自己处理Http异常。