微信開發-微信支付-回撥(notify_url)失敗-解決思路
阿新 • • 發佈:2019-01-28
首先,要提醒一下。微信支付跟支付回撥是分開的。支付回撥通常是微信收款成功後,回撥你的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]);
資料庫中存到的資料如下:
然後就可以在本地用post方式將該xml資料調notify_url,找出錯誤資訊 最後發現我的錯誤原因是將訂單引數封裝成介面時,檔案(WxPay.Api.php和WxPay.Notify.php)的引入路徑出錯了,在notify.php檔案中將上兩個檔案路徑修改為絕對路徑之後,回撥成功了<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>