nodejs集成支付宝所遇到的坑

luoyjx · 2016-03-23 18:32 · 684次阅读

首先,使用express框架,能够接收到支付宝发来的POST notify请求,但是解析出来的body一直为空对象,然后将整个请求log出来查看,发现支付宝发来的Content-Type是一个奇葩的

application/x-www-form-urlencoded;text/html;charset=utf-8

这TM什么鬼玩意,到底是form还是html,于是bodyParser就扑街表示不认识了

解决方式也非常简单暴力,在bodyParser中间件之前添加一个中间件

app.use(function (req, res, next) {
  if (req.url == '/alipay' || req.url == '/alipay/test'){
    req.headers['content-type'] = 'application/x-www-form-urlencoded';
  }
  next();
});

其次是校验notify的签名时,支付宝官方给的说明是这样的 untitled1.png

如果没注意仔细看的话,就会以为是queryString的方式拼接,于是我用了nodejs自带的query-string库,做好了queryString.stringify(),一切完美。但是签名校验根本过不去

后来突然想到,难道不要urlencode,不是queryString,于是把代码替换成了手工拼接字符串而不要urlencode。校验就过去了……

原文 https://blog.bangbang93.com/2015/12/08/nodejs集成支付宝所遇到的坑.moe?utm_source=tuicool&utm_medium=referral

暂无评论

登录后可以进行评论。没有账号?马上注册