无法在 Google Apps 脚本上发送 Post 请求
Unable to send Post Request on Google Apps Script
我正在尝试发送 post 请求来验证交易。我用 Postman 发送了相同的 post 请求,我得到了如下所示的响应:
Apps 脚本 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));
}
Apps 脚本错误响应:
Request failed for
https://ravesandboxapi.flutterwave.com/flwv3-pug/getpaidx/api/v2/verify
returned code 400.
Truncated server response: SyntaxError: Unexpected token S
at parse
(/app/node_modules/body-parser/lib/types/json.js:83:15)
at /app/node_mod... (use muteHttpExceptions option to examine
full response) (line 299, file "Code")
我做错了什么或如何在 Google Apps 脚本中发送 post 请求?
这不是 Google Apps 脚本的问题,但 flutterwave 服务器返回 400 错误代码。
您可以通过将 "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())
}
UrlFetchApp.fetch()
函数有一个不寻常的怪癖,您必须使用 contentType
属性 来设置负载的内容类型。由于某些原因,直接设置 header 似乎不起作用。
此外,您需要JSON.stringify()
您的负载。
因此重写您的 post 请求如下:
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));
}
请注意,我省略了带有占位符文本的键和代码。你真的不应该分享那种敏感信息。如果可能,我强烈建议撤销这些密钥并让服务供应商发布新密钥。
感谢 解释 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 异常。
我正在尝试发送 post 请求来验证交易。我用 Postman 发送了相同的 post 请求,我得到了如下所示的响应:
Apps 脚本 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));
}
Apps 脚本错误响应:
Request failed for https://ravesandboxapi.flutterwave.com/flwv3-pug/getpaidx/api/v2/verify returned code 400.
Truncated server response: SyntaxError: Unexpected token S
at parse (/app/node_modules/body-parser/lib/types/json.js:83:15)
at /app/node_mod... (use muteHttpExceptions option to examine full response) (line 299, file "Code")
我做错了什么或如何在 Google Apps 脚本中发送 post 请求?
这不是 Google Apps 脚本的问题,但 flutterwave 服务器返回 400 错误代码。
您可以通过将 "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())
}
UrlFetchApp.fetch()
函数有一个不寻常的怪癖,您必须使用 contentType
属性 来设置负载的内容类型。由于某些原因,直接设置 header 似乎不起作用。
此外,您需要JSON.stringify()
您的负载。
因此重写您的 post 请求如下:
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));
}
请注意,我省略了带有占位符文本的键和代码。你真的不应该分享那种敏感信息。如果可能,我强烈建议撤销这些密钥并让服务供应商发布新密钥。
感谢
我所做的就是将 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 异常。