Не получается получить корректные данные от онлайн-оплаты POST методом в Node.js

Подключаю WayForPay. В документации (https://wiki.wayforpay.com/uk/view/852102) есть пример получения данных результата оплаты:

$json = file_get_contents('php://input');
$obj = json_decode($json, true);

У меня back-end на Node.js. Для получение данных по POST запросу, у меня есть следующий код:

app.use(bodyParser.urlencoded({
    extended: true
}));
app.use(bodyParser.json());

В самом маршруте для того, чтобы посмотреть что приходит, я записал request.body в файл:

fs.writeFileSync("test.txt", JSON.stringify(request.body));

Вот что вышло:

{"{\"merchantAccount\":\"test_merch_n1\",\"orderReference\":\"ID22311535560371\",\"merchantSignature\":\"8e010ca8a4175ad7bb78200b5fa4e0b4\",\"amount\":0.07,\"currency\":\"USD\",\"authCode\":\"\",\"email\":\"[email protected]\",\"phone\":\"380507772233\",\"createdDate\":1603761056,\"processingDate\":1603761101,\"cardPan\":\"23****5687\",\"cardType\":\"MasterCard\",\"issuerBankCountry\":\"Ukraine\",\"issuerBankName\":\"MONObank\",\"recToken\":\"\",\"transactionStatus\":\"Declined\",\"reason\":\"Three Ds Fail\",\"reasonCode\":1108,\"fee\":0,\"paymentSystem\":\"card\",\"acquirerBankName\":\"WayForPay\",\"cardProduct\":\"debit\",\"clientName\":\"\\u0412\\u041b\\u0410\\u0414\\u0418\\u0421\\u041b\\u0410\\u0412 \\u041d\\u0418\\u041a\\u041e\\u0412\",\"baseAmount\":1.99,\"baseCurrency\":\"UAH\"}":""}

То есть я не могу обратиться к reasonCode таким образом:

request.body.reasonCode

Какой аналог следующего PHP-кода на Node.js?

$json = file_get_contents('php://input');
$obj = json_decode($json, true);

Ответы (1 шт):

Автор решения: Владислав Ников

Мне пришло тело запроса в виде {"{данные_которые_мне_нужны}": ""} Я взял этот ключ и распарсил его.

let body = JSON.parse(Object.keys(request.body)[0]);

В итоге получил объект с данными, как и должно быть. После этого можно обращаться к полям.

body.reasonCode // 1108

Получился костыль. Думаю, что должно быть решение лучше.

→ Ссылка