填坑系列: nodejs后台在支付宝异步通知时获取到的参数为空(使用koa模块)

来源:互联网 发布:软件验收专家意见 编辑:程序博客网 时间:2024/06/08 15:46

填坑系列: nodejs后台在支付宝异步通知时获取到的参数为空(使用koa模块)

最近公司在开发一个涉及金额交易的app, 需要用到 支付宝与微信支付, 在写支付宝支付后台接口时遇到一个大坑, 在这里记录一下, 方便需要的人及时解决问题.


情景如下

开发环境 路由器模块 javascript标准 nodejs koa ECMAScript6

问题

付款成功后支付宝异步通知到达了我们的服务器,但是接收到的参数为空.

原因

支付宝使用的是非标准协议, content-type 的使用的是 application/x-www-form-urlencoded; text/html; charset=UTF-8, 进而导致 koa 的解析模块 koa-bodyparser 无法正常解析, 支付宝真是挖的一手好坑, 折腾了我几个小时才找到原因并解决.

解决方法

koa-bodyparser 中间件前手动修改 content-type 为标准模式

var koa = require('koa');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(router.routes());app.listen(80, function(){    console.log("App is running on 80");});
0 0
原创粉丝点击