最新更新時(shí)間:2020.10.10 版本說明
支付完成后,微信會把相關(guān)支付結(jié)果及用戶信息通過數(shù)據(jù)流的形式發(fā)送給商戶,商戶需要接收處理,并按文檔規(guī)范返回應(yīng)答。
1、同樣的通知可能會多次發(fā)送給商戶系統(tǒng)。商戶系統(tǒng)必須能夠正確處理重復(fù)的通知。
推薦的做法是,當(dāng)收到通知進(jìn)行處理時(shí),首先檢查對應(yīng)業(yè)務(wù)數(shù)據(jù)的狀態(tài),判斷該通知是否已經(jīng)處理過,如果沒有處理過再進(jìn)行處理,如果處理過直接返回結(jié)果成功。在對業(yè)務(wù)數(shù)據(jù)進(jìn)行狀態(tài)檢查和處理之前,要采用數(shù)據(jù)鎖進(jìn)行并發(fā)控制,以避免函數(shù)重入造成的數(shù)據(jù)混亂。
2、在訂單狀態(tài)不明或者沒有收到微信支付結(jié)果通知的情況下,建議商戶主動(dòng)調(diào)用微信支付【查詢訂單API】確認(rèn)訂單狀態(tài)。
特別提醒:
1、商戶系統(tǒng)對于支付結(jié)果通知的內(nèi)容一定要做簽名驗(yàn)證,并校驗(yàn)返回的訂單金額是否與商戶側(cè)的訂單金額一致,防止數(shù)據(jù)泄露導(dǎo)致出現(xiàn)“假通知”,造成資金損失。
2、當(dāng)收到通知進(jìn)行處理時(shí),首先檢查對應(yīng)業(yè)務(wù)數(shù)據(jù)的狀態(tài),判斷該通知是否已經(jīng)處理過,如果沒有處理過再進(jìn)行處理,如果處理過直接返回結(jié)果成功。在對業(yè)務(wù)數(shù)據(jù)進(jìn)行狀態(tài)檢查和處理之前,要采用數(shù)據(jù)鎖進(jìn)行并發(fā)控制,以避免函數(shù)重入造成的數(shù)據(jù)混亂。
3、技術(shù)人員可登進(jìn)微信商戶后臺掃描加入接口報(bào)警群,獲取接口告警信息。
適用對象:直連商戶 服務(wù)商
請求URL: 該鏈接是通過【統(tǒng)一下單API】中提交的參數(shù)notify_url設(shè)置,如果鏈接無法訪問,商戶將無法接收到微信通知。 通知url必須為直接可訪問的url,不能攜帶參數(shù)。示例:notify_url:“http://www.tg885.com/wxpay/pay.action”
支付完成后,微信后臺會把相關(guān)確認(rèn)結(jié)果和訂單信息發(fā)送給商戶,商戶需要接收處理該消息,并返回應(yīng)答。
后臺通知交互時(shí),如果微信收到商戶的應(yīng)答不符合規(guī)范或超時(shí),微信會判定本次通知失敗,重新發(fā)送通知,直到成功為止(在通知一直不成功的情況下,微信總共會發(fā)起多次通知,通知頻率為15s/15s/30s/3m/10m/20m/30m/30m/30m/60m/3h/3h/3h/6h/6h - 總計(jì) 24h4m),但微信不保證通知最終一定能成功。
參數(shù)名 | 變量 | 類型 | 必填 | 描述 |
---|---|---|---|---|
返回狀態(tài)碼 | return_code | string[1,16] | 是 | SUCCESS/FAIL 此字段是通信標(biāo)識,非交易標(biāo)識,交易是否成功需要查看result_code來判斷 示例值:SUCCESS |
返回信息 | return_msg | string[1,128] | 否 | 返回信息,如非空,為錯(cuò)誤原因 簽名失敗 參數(shù)格式校驗(yàn)錯(cuò)誤 示例值:簽名失敗 |
返回狀態(tài)碼(return_code)為SUCCESS的時(shí)候,包含以下字段
參數(shù)名 | 變量 | 類型 | 必填 | 描述 |
---|---|---|---|---|
應(yīng)用ID | appid | string[1,32] | 是 | 微信分配的應(yīng)用ID 示例值:wx8888888888888888 |
商戶號 | mch_id | string[1,32] | 是 | 微信支付分配的商戶號 示例值:1900000109 |
子商戶應(yīng)用ID | sub_appid | string[1,32] | 否 | 微信分配的子商戶應(yīng)用ID,如需在支付完成后獲取sub_openid則此參數(shù)必傳。 注意:僅適用于服務(wù)商模式 示例值:wx8888888888888888 |
子商戶號 | sub_mch_id | string[1,32] | 是 | 微信支付分配的子商戶號 注意:僅適用于服務(wù)商模式 示例值:1900000109 |
設(shè)備號 | device_info | string[1,32] | 否 | 調(diào)用接口提交的終端設(shè)備號, 示例值:013467007045764 |
隨機(jī)字符串 | nonce_str | string[1,32] | 是 | 隨機(jī)字符串,不長于32位。推薦隨機(jī)數(shù)生成算法 示例值:5K8264ILTKCH16CQ2502SI8ZNMTM67VS |
簽名 | sign | string[1,64] | 是 | 簽名,詳見簽名生成算法 示例值:C380BEC2BFD727A4B6845133519F3AD6 |
簽名類型 | sign_type | string[1,32] | 否 | 簽名類型,目前支持HMAC-SHA256和MD5,默認(rèn)為MD5 示例值:HMAC-SHA256 |
業(yè)務(wù)結(jié)果 | result_code | string[1,16] | 是 | SUCCESS/FAIL 示例值:SUCCESS |
錯(cuò)誤代碼 | err_code | string[1,32] | 否 | 詳細(xì)參見錯(cuò)誤列表 示例值:SYSTEMERROR |
錯(cuò)誤代碼描述 | err_code_des | string[1,128] | 否 | 結(jié)果信息描述 示例值:系統(tǒng)錯(cuò)誤 |
用戶標(biāo)識 | openid | string[1,128] | 是 | 用戶在主商戶appid下的唯一標(biāo)識 示例值:oUpF8uMuAJO_M2pxb1Q9zNjWeS6o |
是否關(guān)注公眾賬號 | is_subscribe | string[1,1] | 是 | 用戶是否關(guān)注公眾賬號,枚舉值: Y:關(guān)注 N:未關(guān)注 (機(jī)構(gòu)商戶不返回) 示例值:Y |
用戶子標(biāo)識 | sub_openid | string[1,128] | 否 | t用戶在子商戶appid下的唯一標(biāo)識 注意:僅適用于服務(wù)商模式 示例值:oUpF8uMuAJO_M2pxb1Q9zNjWeS6o |
是否關(guān)注子公眾賬號 | sub_is_subscribe | string[1,1] | 否 | 用戶是否關(guān)注子公眾賬號,枚舉值: Y:關(guān)注 N:未關(guān)注 (機(jī)構(gòu)商戶不返回) 示例值:Y |
交易類型 | trade_type | string[1,16] | 是 | JSAPI:JSAPI支付(或小程序支付) NATIVE:Native支付 APP:APP支付 MWEB:H5支付 說明詳見參數(shù)規(guī)定 示例值:JSAPI |
付款銀行 | bank_type | string[1,32] | 是 | 銀行類型,采用字符串類型的銀行標(biāo)識 示例值:CMC |
總金額 | total_fee | int | 是 | 訂單總金額,單位為分 示例值:100 |
貨幣種類 | fee_type | string[1,8] | 否 | 貨幣類型,符合ISO 4217標(biāo)準(zhǔn)的三位字母代碼,默認(rèn)人民幣:CNY,其他值列表詳見貨幣類型 示例值:CNY |
應(yīng)結(jié)訂單金額 | settlement_total_fee | int | 否 | 當(dāng)訂單使用了免充值型優(yōu)惠券后返回該參數(shù),應(yīng)結(jié)訂單金額=訂單金額-免充值優(yōu)惠券金額。 示例值:100 |
現(xiàn)金支付金額 | cash_fee | int | 是 | 現(xiàn)金支付金額訂單現(xiàn)金支付金額,詳見支付金額 示例值:100 |
現(xiàn)金支付貨幣類型 | cash_fee_type | string[1,16] | 否 | 貨幣類型,符合ISO 4217標(biāo)準(zhǔn)的三位字母代碼,默認(rèn)人民幣:CNY,其他值列表詳見貨幣類型 示例值:CNY |
代金券金額 | coupon_fee | int | 否 | “代金券或立減優(yōu)惠”金額<=訂單總金額,訂單總金額-“代金券或立減優(yōu)惠”金額=現(xiàn)金支付金額,詳見支付金額 示例值:100 |
代金券使用數(shù)量 | coupon_count | int | 否 | 代金券或立減優(yōu)惠使用數(shù)量 示例值:1 |
代金券ID | coupon_id_$n | string[1,20] | 否 | 代金券或立減優(yōu)惠ID, $n為下標(biāo),從0開始編號 示例值:10000 |
代金券類型 | coupon_type_$n | string[1,8] | 否 | CASH:充值代金券 NO_CASH:非充值優(yōu)惠券 開通免充值券功能,并且訂單使用了優(yōu)惠券后有返回(取值:CASH、NO_CASH)。$n為下標(biāo),從0開始編號,舉例:coupon_type_$0 示例值:CASH |
單個(gè)代金券金額 | coupon_fee_$n | int | 否 | 單個(gè)代金券或立減優(yōu)惠支付金額, $n為下標(biāo),從0開始編號 示例值:100 |
微信支付訂單號 | transaction_id | string[1,32] | 是 | 微信支付訂單號 示例值:1217752501201407033233368018 |
商戶訂單號 | out_trade_no | string[1,32] | 是 | 商戶系統(tǒng)內(nèi)部訂單號,要求32個(gè)字符內(nèi),只能是數(shù)字、大小寫字母_-|*@ ,且在同一個(gè)商戶號下唯一。 示例值:1217752501201407033233368018 |
商家數(shù)據(jù)包 | attach | string[1,128] | 否 | 商家數(shù)據(jù)包,原樣返回 示例值:123456 |
支付完成時(shí)間 | time_end | string[1,14] | 是 | 訂單支付時(shí)間,格式為yyyyMMddHHmmss,如2009年12月25日9點(diǎn)10分10秒表示為20091225091010。其他詳見時(shí)間規(guī)則 示例值:20141030133525 |
<xml>
<appid><![CDATA[wx2421b1c4370ec43b]]></appid>
??<sub_appid>wx2421b1c4370ec13b</sub_appid>
<attach><![CDATA[支付測試]]></attach>
??<bank_type><![CDATA[CFT]]></bank_type>
??<fee_type><![CDATA[CNY]]></fee_type>
??<is_subscribe><![CDATA[Y]]></is_subscribe>
??<mch_id><![CDATA[10000100]]></mch_id>?
??<nonce_str><![CDATA[5d2b6c2a8db53831f7eda20af46e531c]]></nonce_str>
??<openid><![CDATA[oUpF8uMEb4qRXf22hE3X68TekukE]]></openid>
??<out_trade_no><![CDATA[1409811653]]></out_trade_no>
??<result_code><![CDATA[SUCCESS]]></result_code>
??<return_code><![CDATA[SUCCESS]]></return_code>
??<sign><![CDATA[B552ED6B279343CB493C5DD0D78AB241]]></sign>
??<sub_mch_id><![CDATA[10000100]]></sub_mch_id>
??<time_end><![CDATA[20140903131540]]></time_end>
??<total_fee>1</total_fee>
??<coupon_fee><![CDATA[10]]></coupon_fee>
??<coupon_count><![CDATA[1]]></coupon_count>
??<coupon_type><![CDATA[CASH]]></coupon_type>
??<coupon_id><![CDATA[10000]]></coupon_id>
??<trade_type><![CDATA[JSAPI]]></trade_type>
??<transaction_id><![CDATA[1004400740201409030005092168]]></transaction_id>
</xml>
商戶處理后同步返回給微信參數(shù):
參數(shù)名 | 變量 | 類型 | 必填 | 描述 |
---|---|---|---|---|
返回狀態(tài)碼 | return_code | string[1,16] | 是 | SUCCESS/FAIL 此字段是通信標(biāo)識,非交易標(biāo)識,交易是否成功需要查看result_code來判斷 示例值:SUCCESS |
返回信息 | return_msg | string[1,128] | 否 | 返回信息,如非空,為錯(cuò)誤原因 簽名失敗 參數(shù)格式校驗(yàn)錯(cuò)誤 示例值:OK |
舉例如下:
<xml>?
??<return_code><![CDATA[SUCCESS]]></return_code>
??<return_msg><![CDATA[OK]]></return_msg>
</xml>