1. 程式人生 > >微信開發-微信支付-回撥(notify_url)失敗-解決思路

微信開發-微信支付-回撥(notify_url)失敗-解決思路

首先,要提醒一下。微信支付跟支付回撥是分開的。支付回撥通常是微信收款成功後,回撥你的php介面(帶上$attach_data),在php介面中你根據$attach_data將購買的資訊存到資料庫。但微信並不保證支付回撥一定成功。回撥不成功時,微信會繼續在30分鐘內8次回撥你的介面,如果一直返回false,微信應該不會無限次的去回撥。這樣,使用者購買了,但購買記錄沒有存庫,會很麻煩。 寫微信支付時,我將生成訂單引數寫成了php介面,前端調php介面拿到訂單引數,再在微信瀏覽器中調起微信支付,付款成功,但支付回撥一直不成功。 我找出回撥失敗原因的思路是,在notify_url中,拿到微信返回來的資料,存到資料庫裡
//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,找出錯誤資訊 最後發現我的錯誤原因是將訂單引數封裝成介面時,檔案(WxPay.Api.php和WxPay.Notify.php)的引入路徑出錯了,在notify.php檔案中將上兩個檔案路徑修改為絕對路徑之後,回撥成功了