Невозможно отправить запрос на публикацию в скрипте Google Apps - PullRequest
0 голосов
/ 02 апреля 2019

Я пытаюсь отправить запрос на почту для подтверждения транзакции. Я отправил тот же почтовый запрос с Почтальоном и получил ответ, как показано ниже:

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)
в / app / node_mod ... (используйте параметр muteHttpExceptions для проверки полный ответ) (строка 299, файл «Код»)

Что я делаю не так или как отправить запрос на публикацию в скрипте Google Apps?

Ответы [ 3 ]

1 голос
/ 02 апреля 2019

Функция 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 голос
/ 02 апреля 2019

Это не проблема с Google Apps Script, но сервер 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())
}
0 голосов
/ 02 апреля 2019

Спасибо 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.

...