支付訂單完成過程中需獲取通知完成的應答
支付完成後,微信會把相關支付結果和用戶信息發送給商戶,商戶需要接收處理,並返回應答。對後台通知交互時,如果微信收到商戶的應答不是成功或超時,微信認為通知失敗,微信會通過一定的策略定期重新發起通知,儘可能提高通知的成功率,但微信不保證通知最終能成功(通知頻率為15/15/30/180/1800/1800/1800/1800/3600,單位為秒)。
注意:同樣的通知可能會多次發送給商戶系統。商戶系統必須能夠正確處理重複的通知。
推薦的做法是,當收到通知進行處理時,首先檢查對應業務數據的狀態,判斷該通知是否已經處理過,如果沒有處理過再進行處理,如果處理過則直接返回結果成功。在對業務數據進行狀態檢查和處理之前,要採用數據鎖進行並發控制,以避免函數重入造成的數據混亂。特別提醒:商戶系統對於支付結果通知的內容一定要做簽名驗證,防止數據泄露導致出現「假通知」,造成資金損失。
用戶在微信客戶端完成支付後(提示已經成功付費),微信會發送給第三方伺服器XML格式的數據通知包,在返回的參數中可以看到,用戶發送的數據會原樣返回,如訂單號(out_rade_no)等,用戶可以根據此參數值定位到自己系統裡面的訂單進行處理。同時,也返回了微信交易訂單號(transaction_id),可以通過它進行數據正確性的核對。
在index()方法的統一下單介面中設置的notify_url為:
在資料庫中新增db_logs表,數據表僅有id(int4)主鍵和content(text)兩個欄位,方便記錄接收到的請求信息。
在方法中,首先,獲取微信下發的數據信息(XML格式,POST類型):
$xml=$GLOBALS["HTTP_RAW_POST_DATA"];
其次,把XML格式的數據轉換為數組類型,並記錄到資料庫logs表中:
接著,對驗證結果進行匹配對比:
最後,構建響應參數並發送給微信通知介面:


※微信小程序中wx.navigateTo保留當前頁跳轉
※MySQL伺服器鏈接與關閉函數的製作和最佳時機
※PHP的快速創建數組的函數
※微信小程序公共設置的介紹
※用die和exit終止PHP程序運行
TAG:行家匯 |
※永久的未完成即完成
※用戶可通過智能眼鏡完成購物支付
※獲批在上財年內完成的任務有4成未按時完成
※當兵收到通知就能進入部隊?錯,這四項完成不了依然會被淘汰!
※最新通知:從本月開始,沒有完成此項認證的,將無法領取養老金
※有一寶借貸免押通通秒完成種軟體比銀行還好用,支付
※人生的完成,與未完成
※中興回應「被破產」為假消息 完成高層換血並做了恢復經營預案
※加拿大無人機在美成功完成交付測試
※據說這個成就完成的人很少想要完成需要五年
※被冤枉的聯想急需完成自我救贖
※嘉聯支付被賣了,已被完成全面收購!
※只需一條瑜伽墊即可完成9項家庭鍛煉,簡單易懂
※中興回應「被破產」為假消息 完成高層「換血」並做了恢復經營預案
※一條狗完成了他的使命
※一件未完成的事
※新兵受到入伍通知就安全了嗎?不是,這4項完成不了照樣淘汰!
※中國飛行員完成了不可能完成的任務,這是一個了不起的成就
※桃田成男單最難對付選手 諶龍能否完成自我救贖?
※如何完成一次完美的肺功能檢查