Не получается получить корректные данные от онлайн-оплаты 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
Получился костыль. Думаю, что должно быть решение лучше.