express4.x 接受 支付宝的post的notifyurl请求时,无法获取参数。
发布于 7 年前 作者 kiroChen 7110 次浏览 最后一次编辑是 6 年前 来自 问答

最近在做关于支付宝的一些需求,找到了一个叫alipay的modules(基于express3.x的)。实验了一下是可以用的,但是嫁接express4.x就出了一些问题,主要是支付宝根据notifyurl post 订单支付信息的时候带的headers的Content-Type为"application/x-www-form-urlencoded; text/html; charset=utf-8",所以在express4.x的情况下获取不到订单支付信息,但是在express3.x的时候可以。经过伪造post实验,如果去掉“ text/html;”,就可以取得post请求过来的信息。所以想请问各位有没有遇到类似的。

总结:express4.x 接受 Content-Type为"application/x-www-form-urlencoded; text/html; charset=utf-8" 的post请求时,无法获取参数。

8 回复

notifyurl 是你请求它还是它请求你?

@captainblue2013 它请求我,我属于接收方。

那就写个中部件修正header信息,放在body parser之前执行

补上解决方法: app.use(bodyParser.urlencoded({ type: function(req) { return /x-www-form-urlencoded/.test(req.headers[‘content-type’]); }, extended: false })); 在大神的指点下,看了bodyParser的源码,发现在复合型的content-type(例如application/x-www-form-urlencoded; text/html;)情况下,bodyParser无法解析。

感谢楼主,我也遇到这个问题,看来是 bodyparse 版本的问题

@kenshinhu 这个不安规范写的头…支付宝还没改回来啊?..

回到顶部