PayFast ITN回调返回空请求体问题排查求助
解决Express接收PayFast回调时请求体为空的问题
你的问题核心是Express默认不会自动解析POST请求的请求体,所以直接打印req.body会得到空对象。以下是具体解决方案:
1. 添加请求体解析中间件
在定义任何路由之前,必须配置Express的请求体解析中间件。PayFast的回调请求通常采用application/x-www-form-urlencoded格式,所以需要添加urlencoded中间件:
const express = require('express'); const app = express(); // 先添加解析中间件,这一步必须在路由定义之前 app.use(express.urlencoded({ extended: true })); // 如果PayFast可能发送JSON格式的请求,可额外添加JSON解析中间件 app.use(express.json()); // 然后定义你的回调路由 app.post('/PayFastTest', (req, res) => { console.log(req.body); // 现在应该能拿到支付详情了 res.sendStatus(200); });
2. 关键说明
extended: true参数允许解析嵌套的对象结构,适配PayFast可能返回的复杂支付数据。- 必须确保中间件的配置在所有路由之前,否则路由无法获取解析后的请求体。
- 若仍为空,可以打印
req.headers['content-type']确认请求的内容类型,匹配对应的解析中间件。
内容的提问来源于stack exchange,提问作者Warona
相关产品推荐
相关产品推荐

