最新更新時(shí)間:2020.04.17 版本說明
簽約、解約成功后(包含用戶主動(dòng)解約),微信會(huì)把相關(guān)簽約、解約信息異步通知給商戶。
1、同樣的通知可能會(huì)多次發(fā)送給商戶系統(tǒng)。商戶系統(tǒng)必須能夠正確處理重復(fù)的通知。
推薦的做法是:當(dāng)商戶系統(tǒng)收到通知進(jìn)行處理時(shí),先檢查對(duì)應(yīng)業(yè)務(wù)數(shù)據(jù)的狀態(tài),并判斷該通知是否已經(jīng)處理。如果未處理,則再進(jìn)行處理;如果已處理,則直接返回結(jié)果成功。在對(duì)業(yè)務(wù)數(shù)據(jù)進(jìn)行狀態(tài)檢查和處理之前,要采用數(shù)據(jù)鎖進(jìn)行并發(fā)控制,以避免函數(shù)重入造成的數(shù)據(jù)混亂。
2、如果在所有通知頻率(0/10/10/10/30/30/30/300/300/300/300/300/300/300/300/300/300/300/300/300/300/300/300/300/300/300/300/300/300/300(單位:秒))后沒有收到微信側(cè)回調(diào),商戶應(yīng)調(diào)用查詢訂單接口確認(rèn)訂單狀態(tài)。
特別提醒:
1、商戶系統(tǒng)對(duì)于簽約、解約結(jié)果通知的內(nèi)容一定要做簽名驗(yàn)證,并校驗(yàn)返回的商戶協(xié)議號(hào)和用戶openid信息是否一致,防止數(shù)據(jù)泄露導(dǎo)致出現(xiàn)“假通知”,造成損失。
2、當(dāng)收到通知進(jìn)行處理時(shí),首先檢查對(duì)應(yīng)業(yè)務(wù)數(shù)據(jù)的狀態(tài),判斷該通知是否已經(jīng)處理過,如果沒有處理過再進(jìn)行處理,如果處理過直接返回結(jié)果成功。在對(duì)業(yè)務(wù)數(shù)據(jù)進(jìn)行狀態(tài)檢查和處理之前,要采用數(shù)據(jù)鎖進(jìn)行并發(fā)控制,以避免函數(shù)重入造成的數(shù)據(jù)混亂。
適用對(duì)象:服務(wù)商
請(qǐng)求URL:簽約結(jié)果通知路徑為簽約接口商戶上傳的notify_url字段,解約結(jié)果通知路徑為商戶配置委托扣款模板ID時(shí)填寫的解約回調(diào)地址,必須為https協(xié)議。
如果鏈接無法訪問,商戶將無法接收到微信通知。
通知url必須為直接可訪問的url,不能攜帶參數(shù)。示例: “http://www.tg885.com/wxpay/pay.action”
簽約、解約成功后,微信會(huì)把相關(guān)支付結(jié)果和訂單信息發(fā)送給商戶,商戶需要接收處理該消息,并返回應(yīng)答。
對(duì)后臺(tái)通知交互時(shí),如果微信收到商戶的應(yīng)答不符合規(guī)范或超時(shí),微信認(rèn)為通知失敗,微信會(huì)通過一定的策略定期重新發(fā)起通知,盡可能提高通知的成功率,但微信不保證通知最終能成功。 (通知頻率為:0/10/10/10/30/30/30/300/300/300/300/300/300/300/300/300/300/300/300/300/300/300/300/300/300/300/300/300/300/300(單位:秒) )
參數(shù)名 | 變量 | 類型[長度限制] | 必填 | 描述 |
---|---|---|---|---|
返回狀態(tài)碼 | return_code | string[1,16] | 是 | SUCCESS/FAIL 非簽約結(jié)果標(biāo)識(shí),簽約發(fā)起是否成功需要查看result_code來判斷。 示例值:SUCCESS |
返回信息 | return_msg | string[1,128] | 否 | 返回信息,如非空,為錯(cuò)誤原因 如:簽名失敗 等。 示例值:簽名失敗 |
以下字段在return_code為SUCCESS的時(shí)候有返回
參數(shù)名 | 變量 | 類型[長度限制] | 必填 | 描述 |
---|---|---|---|---|
業(yè)務(wù)結(jié)果 | result_code | string[1,16] | 是 | SUCCESS/FAIL 示例值:SUCCESS |
以下字段在return_code 和result_code都為SUCCESS的時(shí)候有返回
參數(shù)名 | 變量 | 類型[長度限制] | 必填 | 描述 |
---|---|---|---|---|
商戶號(hào) | mch_id | string[1,32] | 是 | 微信支付分配的商戶號(hào) 示例值:10000098 |
子商戶號(hào) | sub_mch_id | string[1,32] | 是 | 微信支付分配的子商戶號(hào) 示例值:1900000109 |
簽約協(xié)議號(hào) | contract_code | string[1,128] | 是 | 商戶側(cè)的簽約協(xié)議號(hào),由商戶生成,只能是數(shù)字、大小寫字母的描述。 示例值:100000 |
模板id | plan_id | string[1,28] | 是 | 協(xié)議模板id,設(shè)置路徑見開發(fā)步驟。 示例值:12535 |
用戶標(biāo)識(shí) | openid | string[1,32] | 是 | 同一個(gè)Appid下,用戶的唯一標(biāo)識(shí) (注意:商戶記錄的簽約用戶的openid ,需以微信側(cè)回調(diào)通知的openid為準(zhǔn),不建議商戶使用自行記錄的openid,避免扣款用戶和簽約用戶對(duì)不上) 示例值:onqOjjmM1tad-3ROpncN-yUfa6ua |
用戶子標(biāo)識(shí) | sub_openid | string[1,32] | 否 | sub_appid下,用戶的唯一標(biāo)識(shí)(注意:商戶記錄的簽約用戶的sub_openid ,需以微信側(cè)回調(diào)通知的sub_openid為準(zhǔn),不建議商戶使用自行記錄的sub_openid,避免扣款用戶和簽約用戶對(duì)不上) 示例值:oUpF8uMuAJO_M2pxb1Q9zNjWeS6o |
簽名 | sign | string[1,32] | 是 | 詳見簽名生成算法 |
變更類型 | change_type | string[1,32] | 是 | 枚舉值: ADD:簽約 DELETE:解約 商戶可通過該字段判斷是簽約回調(diào)還是解約回調(diào) 示例值:ADD |
操作時(shí)間 | operate_time | string[1,32] | 是 | 操作時(shí)間 示例值:2015-07-01 10:00:00 |
委托代扣協(xié)議id | contract_id | string[1,32] | 是 | 簽約成功后,微信返回的委托代扣協(xié)議id 示例值:Wx15463511252015071056489715 |
協(xié)議到期時(shí)間 | contract_expired_time | string[1,32] | 否 | 協(xié)議到期時(shí)間,當(dāng)change_type為ADD時(shí)有返回(目前協(xié)議時(shí)間為長期有效,可以忽略該字段) 示例值:2016-07-01 10:00:00 |
協(xié)議解約方式 | contract_termination_mode | int | 否 | 當(dāng)change_type為DELETE時(shí)有返回 1:有效期過自動(dòng)解約(預(yù)留功能) 2:用戶主動(dòng)解約 3:商戶API解約 4:商戶平臺(tái)解約 5:注銷(用戶微信賬戶注銷) 7:用戶聯(lián)系客服發(fā)起的解約 示例值:3 |
請(qǐng)求序列號(hào) | request_serial | int64 | 是 | 商戶請(qǐng)求簽約時(shí)的序列號(hào),要求唯一性。序列號(hào)主要用于排序,不作為查詢條件,純數(shù)字,范圍不能超過int64的范圍(9223372036854775807)。 示例值:1695 |
<xml>
<return_code><![CDATA[SUCCESS]]></return_code>
<result_code><![CDATA[SUCCESS]]></result_code>
<sign><![CDATA[C380BEC2BFD727A4B6845133519F3AD6]]></sign>
<mch_id>10010404</mch_id>
<sub_mch_id>10010405</sub_mch_id>
<contract_code>100001256</contract_code>
<openid><![CDATA[onqOjjmM1tad-3ROpncN-yUfa6ua]]></openid>
<plan_id><![CDATA[123]]></plan_id>
<change_type><![CDATA[ADD]]></change_type>
<operate_time><![CDATA[2015-07-01 10:00:00]]></operate_time>
<contract_id><![CDATA[Wx15463511252015071056489715]]></contract_id>
</xml>
如果商戶側(cè)未返回正確的內(nèi)容,微信會(huì)多次通知,為了避免給商戶服務(wù)器造成過大的壓力,請(qǐng)?jiān)诘玫轿⑿藕灱s結(jié)果通知之后,返回以下內(nèi)容。(請(qǐng)求方式:post)
注意:當(dāng)商戶后臺(tái)應(yīng)答失敗時(shí),微信支付將記錄下應(yīng)答的報(bào)文,建議商戶按照以下格式返回。
參數(shù)名 | 變量 | 類型[長度限制] | 必填 | 描述 |
---|---|---|---|---|
返回狀態(tài)碼 | return_code | string[1,16] | 是 | SUCCESS/FAIL 狀態(tài)碼,SUCCESS為接收成功,其他狀態(tài)碼為失敗。 示例值:SUCCESS |
返回信息 | return_msg | string[1,128] | 否 | 返回信息,如非空,為錯(cuò)誤原因 如:簽名失敗 等。 示例值:簽名失敗 |
<xml>
<return_code><![CDATA[SUCCESS]]></return_code>>
<return_msg><![CDATA[OK]]></return_msg>
</xml>
微信支付簽約、解約通知出口IP列表
如果商戶側(cè)配置了防火墻,需要對(duì)商戶回調(diào)通知功能開通下面白名單網(wǎng)段:
101.226.233.128/25