CNode

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

问答
KkiroChen发布于11 年前最后回复10 年前8 回复8942 浏览0 收藏

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

C
captainblue2013#1·11 年前

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

K
kiroChen#2·11 年前
引用 captainblue2013notifyurl 是你请求它还是它请求你?

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

K
klesh#3·11 年前

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

K
kiroChen#4·11 年前

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

J
jinwyp#5·11 年前

学习了

K
kenshinhu#6·10 年前

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

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

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

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