最新更新時間:2021.3.9
由于網絡異常或者系統(tǒng)的波動,可能會導致用戶支付成功,但是商戶側未能成功接收到支付結果通知,進而顯示訂單未支付的情況。商戶側的訂單狀態(tài)更新不及時,容易造成用戶投訴,甚至是重復支付的情況發(fā)生。
商戶在未能收到支付結果通知時,也能及時、準確地獲取到訂單的支付狀態(tài),提升商戶系統(tǒng)的健壯性,減少因為訂單狀態(tài)不同步導致的用戶投訴。
1、商戶APP或者前端頁面收到支付返回時,商戶需要調用商戶查單接口確認訂單狀態(tài),并把查詢結果展示給用戶。
2、商戶后臺需要準確、高效地處理微信支付發(fā)送的異步支付結果通知,并按接口規(guī)范把處理結果返回給微信支付。
3、商戶后臺未收到異步支付結果通知時,商戶應該主動調用《微信支付查單接口》,同步訂單狀態(tài)。
4、商戶在T+1日從微信支付側獲取T日的交易賬單,并與商戶系統(tǒng)中的訂單核對。如出現訂單在微信支付側成功,但是在商戶側未成功的情況,商戶需要給用戶補發(fā)貨或者退款處理。
4.1.1. 前端返回“用戶取消”的情況,則訂單狀態(tài)保持未支付狀態(tài),并提示用戶支付未完成。
4.1.2. 前端返回“成功”或“報錯”的情況,商戶需要調用商戶查單接口,確認訂單狀態(tài)。
1)如果商戶查單接口明確返回支付成功,則給用戶展示支付成功頁。
2)如果商戶查單接口返回訂單未支付,需要提醒用戶“稍后進入訂單管理頁核實訂單狀態(tài),不要重復發(fā)起支付”。商戶后端需要及時獲取、更新訂單狀態(tài),實現邏輯參考【后端服務處理】。當用戶再次進入訂單管理頁面,對未支付的訂單再次發(fā)起支付時,商戶應該使用原單號發(fā)起,不要更換支付單號,避免用戶重復支付。
4.1.3. 前端調起支付和判斷返回類型的方法請參考接口文檔:
1) JSAPI支付。
2) 小程序支付。
3) APP支付。
4.2.1. 前端返回至發(fā)起支付的頁面或者返回至指定的redirect_url頁面,需要在頁面設置一個“已完成支付”的按鈕讓用戶點擊。
返回頁面展示效果(僅供參考)
4.2.2. 用戶點擊“已完成支付”按鈕,商戶需要調用商戶查單接口,確認訂單狀態(tài)。
1) 如果商戶查單接口明確返回支付成功,則給用戶展示支付成功頁。
2) 如果商戶查單接口返回訂單未支付,需要提醒用戶“稍后進入訂單管理頁核實訂單狀態(tài),不要重復發(fā)起支付”。 商戶后端需要及時獲取、更新訂單狀態(tài),實現邏輯參考【后端服務處理】。當用戶再次進入訂單管理頁面,對未支付的訂單再次發(fā)起支付時,商戶應該使用原單號發(fā)起,不要更換支付單號,避免用戶重復支付。
前端顯示支付二維碼之后,前端定時輪詢調用商戶查單接口確認訂單的狀態(tài)。
頁面展示效果(僅供參考)
比如間隔2秒查詢一次,一直輪詢60秒。(輪詢時間間隔和次數,商戶可以根據自身業(yè)務場景靈活設置)
1)如果輪詢商戶查單接口返回支付成功,則給用戶展示支付成功頁。
2)如果超過系統(tǒng)設置的時間,商戶查單接口仍未返回支付成功,則退出輪詢,提醒用戶交易超時。
商戶后臺需要準確、高效地處理微信支付發(fā)送的異步支付結果通知,并按接口規(guī)范把處理結果返回給微信支付。詳情請參考以下接口規(guī)范和注意事項:
1、接口規(guī)范。
2、注意事項。
如果長時間沒有收到支付結果通知,商戶后臺應該定時輪詢調用《微信支付查單接口》去核實訂單狀態(tài)。
方案一
以訂單下單成功時間為基準(或者以前端支付返回成功或者報錯后,第一次調用商戶查單接口未成功的時間為基準),每隔5秒/30秒/1分鐘/3分鐘/5分鐘/10分鐘/30分鐘調用《微信支付查單接口》查詢一次,最后一次查詢還是未返回支付成功狀態(tài),則停止后續(xù)查詢,并調用《關單接口》關閉訂單。(輪詢時間間隔和次數,商戶可以根據自身業(yè)務場景靈活設置)
方案二
定時任務每隔30秒啟動一次,找出最近10分鐘內創(chuàng)建并且未支付的訂單,調用《微信支付查單接口》核實訂單狀態(tài)。系統(tǒng)記錄訂單查詢的次數,在10次查詢之后狀態(tài)還是未支付成功,則停止后續(xù)查詢,并調用《關單接口》關閉訂單。(輪詢時間間隔和次數,商戶可以根據自身業(yè)務場景靈活設置)
5.3.1. 商戶在T+1日上午10點以后,調用《微信支付對賬單下載接口》,或者登錄微信商戶平臺手工下載T日交易賬單,然后根據對賬單中的訂單數據,逐筆與商戶系統(tǒng)中的訂單核對。
5.3.2. 核對時有如下幾種情況:
1)訂單匹配成功,并且狀態(tài)都是支付成功:正常情況,對賬成功。
2)訂單匹配成功,但是商戶側狀態(tài)非支付成功:商戶根據自身業(yè)務情況,決定是否把訂單狀態(tài)更新為支付成功并給用戶發(fā)貨,或者是給用戶發(fā)起退款。
3)訂單匹配失敗,對賬單中的單號在商戶系統(tǒng)未找到記錄:異常情況,需要商戶排查系統(tǒng)是否出現數據異常。
4)訂單匹配失敗,商戶系統(tǒng)中成功的訂單在對賬單中未找到記錄:異常情況,需要商戶排查是否訂單處理邏輯有bug。
公眾號支付,通過JSAPI返回的res.err_msg值判斷:
小程序支付,通過回調類型判斷:
APP支付,通過onResp函數返回的errCode值判斷:
商戶收到《微信支付查單接口》的響應報文,驗證簽名成功,并且返回的return_code、result_code、trade_state這3個參數值同時為SUCCESS,則認為訂單是支付成功;調用查單接口遇到網絡超時,未收到返回,或者返回的return_code和result_code不同時為SUCCESS,則代表訂單狀態(tài)不明確,需要再次調用查單接口確認。