微信开发-微信支付-回调(notify_url)失败-解决思路
首先,要提醒一下。微信支付跟支付回调是分开的。支付回调通常是微信收款成功后,回调你的php接口(带上$attach_data),在php接口中你根据$attach_data将购买的信息存到数据库。但微信并不保证支付回调一定成功。回调不成功时,微信会继续在30分钟内8次回调你的接口,如果一直返回false,微信应该不会无限次的去回调。这样,用户购买了,但购买记录没有存库,会很麻烦。 首先,要提醒一下。微信支付跟支付回调是分开的。支付回调通常是微信收款成功后,回调你的php接口(带上$attach_data),在php接口中你根据$attach_data将购买的信息存到数据库。但微信并不保证支付回调一定成功。回调不成功时,微信会继续在30分钟内8次回调你的接口,如果一直返回false,微信应该不会无限次的去回调。这样,用户购买了,但购买记录没有存库,会很麻烦。
写微信支付时,我将生成订单参数写成了php接口,前端调php接口拿到订单参数,再在微信浏览器中调起微信支付,付款成功,但支付回调一直不成功。 写微信支付时,我将生成订单参数写成了php接口,前端调php接口拿到订单参数,再在微信浏览器中调起微信支付,付款成功,但支付回调一直不成功。
我找出回调失败原因的思路是,在notify_url中,拿到微信返回来的数据,存到数据库里 我找出回调失败原因的思路是,在notify_url中,拿到微信返回来的数据,存到数据库里
//thinkphp中 $xml = $GLOBALS[HTTP_RAW_POST_DATA]; D(ApplyShare)->update(1, [apply_reason => $xml]);//thinkphp中 $xml = $GLOBALS[HTTP_RAW_POST_DATA]; D(ApplyShare)->update(1, [apply_reason => $xml]);
数据库中存到的数据如下: 数据库中存到的数据如下:
<xml><appid><![CDATA[wxe6c6ab2ef372xxxx]]></appid> <attach><![CDATA[2&85&139&0]]></attach> <bank_type><![CDATA[CFT]]></bank_type> <cash_fee><![CDATA[1]]></cash_fee> <fee_type><![CDATA[CNY]]></fee_type> <is_subscribe><![CDATA[Y]]></is_subscribe> <mch_id><![CDATA[129933xxxx]]></mch_id> <nonce_str><![CDATA[6xj94ajjika3io01f50z2cf9658fhhtj]]></nonce_str> <openid><![CDATA[ojN41uHLEXYuHkrJg2_PaDvxxxxx]]></openid> <out_trade_no><![CDATA[129933950120170618102333]]></out_trade_no> <result_code><![CDATA[SUCCESS]]></result_code> <return_code><![CDATA[SUCCESS]]></return_code> <sign><![CDATA[5060B8EE326BD346B7808D9996594A79]]></sign> <time_end><![CDATA[20170618102338]]></time_end> <total_fee>1</total_fee> <trade_type><![CDATA[JSAPI]]></trade_type> <transaction_id><![CDATA[4001862001201706186249259476]]></transaction_id> </xml>
然后就可以在本地用post方式将该xml数据调notify_url,找出错误信息 然后就可以在本地用post方式将该xml数据调notify_url,找出错误信息
最后发现我的错误原因是将订单参数封装成接口时,文件(WxPay.Api.php和WxPay.Notify.php)的引入路径出错了,在notify.php文件中将上两个文件路径修改为绝对路径之后,回调成功了 最后发现我的错误原因是将订单参数封装成接口时,文件(WxPay.Api.php和WxPay.Notify.php)的引入路径出错了,在notify.php文件中将上两个文件路径修改为绝对路径之后,回调成功了