?
目錄
引子
分析
應對
小結
引子
在開發和實施微信 JSAPI 支付的應用后,我們遇到了一些問題,訂單的狀態更新不正常,當然我們首先需要從自身尋找原因和完善解決問題的辦法和方案。在支付的過程中,客戶會給我們一些反饋,應用系統的訂單狀態與微信手機端支付狀態不一致,即信息狀態更新異常。其中一個客戶給我我們提供了手機截圖,我們根據用戶提供的訂單號,登錄微信支付商戶平臺,交易中心,按訂單號進行查詢,如下圖,查詢后的結果卻顯示“查詢失敗:操作失敗,請稍候重試”...
分析
一般的情況下,查詢訂單會有兩種結果,一、查不到,二、查得到。
一、查詢不到訂單號的顯示如下圖:
?
點擊查詢按鈕后,系統顯示“查詢失敗:商戶訂單號輸入不正確”。
二、查詢得到訂單,如下圖:
?
但第三種情況,某些存在且更新異常的訂單,仍然提示 “查詢失敗:操作失敗,請稍候重試”,則比較讓人疑惑,如果按照字面的稍候重試去理解,則永遠的答案都會是顯示這一句話。客服咨詢的回復和社區的求助目前也沒有太理想的答案,這也在預期之中。
如引子里提供的訂單號為:3328e4bae5ee40f5b6ff2fcd2782d5d8 的訂單,則屬于更為極端的一種情況,根據客戶的反饋,通過系統其它的信息比對及排查(如支付時間、支付銀行等),最終確定訂單號為:3aa33681f24a41139a79e6ce431adf82,這種情況就難以解釋了。
應對
目前來看,查詢訂單的結果無非這三種情況,無論何種情況,我們需要以下幾點應對方案:
(1)建立日志跟蹤機制是必不可少的,我們以 MS SQL SERVER 舉例建立類似如下表:
序號 | 字段名 | 類型 | 說明 |
---|---|---|---|
1 | project_cid | uniqueidentifier | 項目ID,連接項目活動表 |
2 | projectName | [nvarchar](100) | 項目名稱(冗余字段) |
3 | per_cid | uniqueidentifier | 個人ID,連接個人詳情表 |
4 | payName | [nvarchar](50) | 交費項目名稱 |
5 | price | [money] | 交費金額 |
6 | orderid | [nvarchar](50) | 訂單號 |
7 | ordertime | [datetime] | 訂單交易時間 |
8 | openid | [nvarchar](50) | 微信個人openid標識 |
9 | err_msg | [nvarchar](500) | 微信支付API返回消息 |
10 | status | [nvarchar](50) | 支付狀態,可設置消費交易成功、消費交易失敗、待支付等 |
11 | paytime | [datetime] | 支付時間 |
12 | paytype | [nvarchar](10) | 支付類型,可包括消費、退款 |
13 | nickname | [nvarchar](100) | 個人微信昵稱(冗余字段,便于排查) |
14 | rorderid | [nvarchar](50) | 微信返回的退款訂單號 |
15 | cid | uniqueidentifier | 日制記錄唯一標識 |
?(2)建立對帳排查功能
如下圖登錄微信支付商戶平臺,進入交易中心、交易訂單、批量訂單查詢、輸入或選擇交易時間范圍,點擊查詢
?
我們可以下載 Excel 格式的文件,如下圖:
?
?下載的文件為CSV格式,我們可以根據實際需求轉存為XLSX格式,通過讀入EXCEL數據或導入數據庫,與自己的業務表(如交易表、交易日志表)進行關鍵字比對(如訂單號、微信用戶openid)等,以排查異常數據進行提醒與處理。
(3)實現手工更新功能,手動更新是最后的處理方式,可以根據前面所述的排查結果單一或批量進行更新,更新的時候可以做好日志記錄及標記標注等操作。
(4)對于示例中所敘述的極端情況,我們盡量還是要創建有意義的可用于后期可排查的訂單號,微信訂單號要求是32位數字,我們可以基于這個規則進行分段拼接,如連接個人信息表中的ID,加項目編號 加 時間戳信息,以免被動的無法主動跟蹤交易信息,無法聯系交易當事人的情況。
小結
在微信支付交易開發的過程中,我們會遇到很多種情況,需要不斷的根據問題反饋來完善我們的應用系統 ,相關開發可參考我的文章:
《C# 實現微信退款及對帳》
?《C# 微信支付接口V2版本回調開發實踐》
以上是本人的一些體會與實踐,再次感謝您的閱讀,歡迎討論、指教!