curl 提交post请求,pay/notify接收失败(发现不是post请求)

来源:11-2 支付宝通知接口

猴塞雷2

2017-06-03

老师,我在做通知接口的时候遇到了问题,同步通知状态良好,但是我发现付款成功后不能够进行异步通知,无法修改订单的状态,经过调试后我好像知道了原因:(但是不知道怎么解决)

首先,我在phpinfo()中确认了我的服务器支持curl,在notify.php中我使用模拟数据进行发送,原本的$_POST被改成了数组

http://szimg.mukewang.com/593199540001614702590087.jpg

发送的url是 pay/notify,我需要先判断curl请求是否发送成功,于是我在notify方法加了下面这行代码,如果待会儿5号订单的状态被改变,证明请求成功发送。后来订单状态确实改变,说明请求成功发送

http://szimg.mukewang.com/59319b0000011f1005890162.jpg

但是我如果把代码改成下面这样,在更改6号订单状态之前,先验证提交是否是post提交,发现6号订单状态没有改变,说明curl请求post提交的数据没有进到 if 里面。说明当我curl请求的数据是支付宝返回的post通知参数时,得到的参数根本没有进入 if 当中,也没有办法进行验证。

http://szimg.mukewang.com/59319be600013a5105840158.jpg

这个问题要怎么解决呢?



写回答

3回答

Jason

2017-06-03

这个问题应该是支付宝的post请求无法通过yii2的csrf验证,另外请求参数无法接收,参考解决方案:http://www.yiichina.com/question/2367

0
13
猴塞雷2
非常感谢!
2017-06-17
共13条回复

猴塞雷2

提问者

2017-06-17

问题解决了,这几天忙着准备期末考回复晚了。

是这样的,如果你的异步接收地址填写正确的话,支付宝服务器是一定会给你发送通知的,我的问题在于:

  1. 使用了https发送curl请求,也不是不可以,只是要对老师的代码做出一些修改,查询一下手册可以实现

  2. 关键问题,curl请求yii2的默认路由 ....?r=.... 会被当成get,从而忽视掉post,必须重写URL,但是nginx默认不支持pathinfo,所以重写之后可能会报错,这时在配置文件里加上这一段,重启nginx,问题解决

    //szimg.mukewang.com/5944028b0001280905990112.jpg

0
1
Jason
恩,好的,这应该也算是Yii2的一个小bug
2017-06-17
共1条回复

Jason

2017-06-05

回来晚了,这会你那可以吗

0
15
猴塞雷2
回复
Jason
嗯嗯。
2017-06-07
共15条回复

Yii2.0开发一个仿京东商城平台

【毕设】购物、下单、支付、收货...各功能模块开发,打造京东式电商平台

1543 学习 · 655 问题

查看课程