您的位置:首页 > Web前端 > Node.js

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

2015-12-26 20:34 661 查看

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

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

情景如下

开发环境路由器模块javascript标准
nodejskoaECMAScript6

问题

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


原因

支付宝使用的是非标准协议,
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");
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息