微信支付:回调地址notify_url不能带参数

最近在用Yii2写一个微信商城,在调用微信支付接口时遇到了问题。

支付环节是正常的,微信端能收到支付成功的系统提示,然而回调url始终收不到微信服务器的POST,经过手动测试,回调页面的逻辑也没有问题。

问题究竟出在哪呢,忽然想到在开发者中心里面可以扫码加入一个接口报警群…… 加进去,果然5分钟后发来了报警信息:

微信支付:回调地址notify_url不能带参数

天啊,这是个啥!剧本不是这么写的啊,开起来像极了首页头部了。。开始怀疑指定的notify_url是不是有问题了,重新检查了下单逻辑,用硬编码死死的又写了一遍

$notify_url = 'http://www.xxx.com/index.php?r=pay/wx-notify';

再次支付一分钱:),等待提示吧。。。

好吧,如我所愿,要抓狂了,提示信息还是一样。既然我下单逻辑填的地址没有问题,那只能判定是微信服务器访问回调url的时候出错。好,这次我要在controller的init函数中看看你的原型!

echo Yii::$app->request->absoluteUrl;
exit;

然后继续等待下次接口报警信息:

微信支付:回调地址notify_url不能带参数

嗯哼,微信开发团队你们滚出来,我保证不打死你!

写文档的孙子,还有你!参数全都忽略了,是否故意为之?然而文档又没有任何解释,让开发者们猜啊!

——————————————————————————我是正义的分割线—————————————————————————————

那么问题来了,解决方案那家强?这个就不用回答了,博主是蓝翔黑客班毕业的!!!

翠花,上解决方案!

写个不带参的脚本notify.php ,把该脚本地址作为回调url。

它将作为中间人,把微信服务器发回来的支付通知数据post到我们先前写的支付回调接口,并将处理结果回复给微信服务器。

 1 <?php
 2 $data = file_get_contents('php://input');
 3 if(empty($data))
 4 {
 5     return;
 6 }
 7 $url = 'http://'.$_SERVER['HTTP_HOST'].'/index.php?r=pay/wx-notify';
 8 $curl = curl_init();
 9 curl_setopt($curl, CURLOPT_URL, $url);
10 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
11 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
12 curl_setopt($curl,CURLOPT_SSLVERSION,CURL_SSLVERSION_TLSv1);
13 curl_setopt($curl, CURLOPT_POST, 1);
14 curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
15 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
16 $output = curl_exec($curl);
17 curl_close($curl);
18 echo $output;
19 ?>

写完 ,收工!