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

问题描述 投票:0回答:3

我正在尝试发送帖子请求以验证交易。我发送了与Postman相同的帖子请求,我收到了如下所示的回复:

enter image description here enter image description here

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脚本中发送帖子请求?

google-apps-script http-post postman flutterwave
3个回答
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));
}

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


1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.