无法在Google Apps脚本上发送发布请求

时间:2019-04-02 12:52:16

标签: google-apps-script http-post postman flutterwave

我正在尝试发送发布请求以验证交易。我用Postman发送了相同的发帖请求,并收到如下响应:

enter image description here enter image description here

应用脚本代码。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)
  在/ app / node_mod ...(使用MutantHttpExceptions选项检查   完整响应)(第299行,文件“代码”)

我在做什么错或如何在Google Apps脚本中发送发帖请求?

3 个答案:

答案 0 :(得分:1)

这不是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())
}

答案 1 :(得分:1)

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));
}

请注意,我省略了带有占位符文本的键和代码。您确实不应该共享这种敏感信息。如果可能的话,我强烈建议您撤销这些密钥,并让服务供应商发布新密钥。

答案 2 :(得分:0)

感谢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异常。