跳到主要内容
CNode

express4.x 接受 支付宝的post的notifyurl请求时,无法获取参数。

问答
KkiroChen发布于 11 年前最后回复 10 年前
889900

最近在做关于支付宝的一些需求,找到了一个叫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)

Y
youxiachai#710 年前
引用 kenshinhu感谢楼主,我也遇到这个问题,看来是 bodyparse 版本的问题

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

K
kenshinhu#610 年前

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

J
jinwyp#511 年前

学习了

K
kiroChen#411 年前

补上解决方法: 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无法解析。

K
klesh#311 年前

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

K
kiroChen#211 年前
引用 captainblue2013notifyurl 是你请求它还是它请求你?

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

C
captainblue2013#111 年前

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

参与回复

登录后即可参与回复。登录