对接银联商务微信公众号支付遇到的坑
微信公眾號支付和微信掃碼支付在 支付結果通知上有很大的區別,公眾號支付主要是以異步通知去確定支付結果,也可以通過查詢接口,而掃碼支付通常調用查詢接口去查詢支付狀態。因而,公眾號支付的異步通知是一個需要注意的問題。
1.異步通知回調問題,由于自己疏忽沒有注意到銀聯商務異步通知的詳細說明,導致異步通知不到,具體描述如下:
支付完成后,渠道方會通知網付前置賬單系統,賬單系統收到通知后會組織結果信息發送通知到商戶的通知地址。商戶的通知地址可以在商戶信息中配置,也可以在上送詳單信息時上送,若都多處都配置了通知地址,那么賬單系統會把結果通知到所有的地址上。
注意:商戶收到通知后,需要對通知做出響應:成功收到時響應”SUCCESS”;失敗時響應”FAILED”。
針對重復收到通知的問題處理:如果網付沒有收到商戶響應的SUCCESS字串,或者商戶應答的報文中不包含SUCCESS字串,或者網絡異常,系統會在24小時內嘗試多次通知。
商戶收到重復通知時可以執行以下1或2進行處理:2.通知報文里面有商戶訂單號,商戶可根據訂單號和訂單狀態判斷是否是重復通知,并忽略已經處理了的訂單的重復通知。
通知會以POST形式發出,包含參數如下(出于安全考慮,實際通知報文含有個隨機字段,key-value值不固定,且參與簽名)
由于是做銀聯商務支付網關設計,在異步通知這一塊僅需要接收銀商傳過來的異步通知數據,對數據不做任何處理,轉發給請求網關的C端程序。
最開始在設計異步通知時,采用request中的forward方法,,如下圖所示,實測C端接收不到轉發的異步通知數據,查閱資料后發現這種方式僅限于服務內部轉發消息。
因此,轉手使用http通信,在接收到銀聯商務異步通知數據后,,通過post請求轉發給C端程序。
下圖為網關內部接收異步通知地址,此地址需在請求下單接口時填入
接口地址
2.針對注意:商戶收到通知后,需要對通知做出響應:成功收到時響應”SUCCESS”;失敗時響應”FAILED”。
針對重復收到通知的問題處理:如果網付沒有收到商戶響應的SUCCESS字串,或者商戶應答的報文中不包含SUCCESS字串,或者網絡異常,系統會在24小時內嘗試多次通知。
在接收到異步通知后,沒有返回SUCCESS或FAILED,導致異步通知持續不斷發送。
解決:對接受的異步通知map做判斷,如圖示,返回響應信息。
3.在對接銀聯商務支付下單接口時,需上送異步通知地址,用于接收異步通知,也已經正常接收。
但是在調用退款接口時,并沒有上送異步通知地址,在查看日志后發現也有退款的異步通知,其中status值為“TRADE_REFUND”(下單接口異步通知為“TRADE_SUCCESS”),這種情況在最開始接入銀聯商務時并沒有返回退款的異步通知,今天測試時突然發現有了,,,,,可能是銀聯商務系統在接收下單請求時默認了用戶填入的notify_url吧(強行解釋一波)。
總結
以上是生活随笔為你收集整理的对接银联商务微信公众号支付遇到的坑的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中国联通定位平台及其应用
- 下一篇: java对接银联商务公众号+服务窗支付(