最近公司在开发一个涉及金额交易的app, 需要集成 支付宝与微信支付
, 在写支付宝支付后台接口时遇到一个大坑, 在这里记录一下, 方便需要的人及时解决问题.
开发环境 | 路由模块 |
---|---|
nodejs | koa |
问题
付款成功后支付宝异步通知到达了我们的服务器, 但是接收到的参数为空.
原因
支付宝使用的是非标准协议, content-type
中使用的是 application/x-www-form-urlencoded; text/html; charset=UTF-8
, 进而导致 koa
的解析模块 koa-bodyparser
无法正常解析
解决方法
在 koa-bodyparser
中间件执行前手动修改 content-type
为标准模式
var koa = require('koa')
const bodyparser = require('koa-bodyparser')
var router = require('./router')
var app = koa()
app.use(function*(next) {
if (this.request.method !== 'GET' && this.request.path === '支付宝支付回调通知路径') {
this.request.headers['content-type'] = 'application/x-www-form-urlencoded'
}
yield next
});
app.use(bodyparse())
app.use(router.routes())
app.listen(80, function(){
console.log("App is running on 80")
})