通知URL是統一下單接口中提交的參數 notify_url,支付完成後,平台會把相關支付和用戶信息發送到該 URL,商戶需要接收處理信息。
對後台通知交互時,如果平台收到商戶的應答不是 純字符串success 或 超過5秒後 返回時,平台認為通知失敗,平台會通過一定的策略 ( 通知頻率為0/15/15/30/180/1800/1800/1800/1800/3600,單位:秒 )間接性 重新發起通知,盡可能提高通知的成功率,但不保證通知最終能成功。
由於存在重新發送後台通知的情況, 因此同樣的通知可能會多次發送給商戶系統。商戶系統必須能夠正確處理重複的通知。
推薦的做法是, 當收到通知進行處理時, 首先檢查對應業務數據的狀態, 判斷該通知是否已經處理過, 如果沒有處理過再進行處理, 如果處理過直接返回結果成功。在對業務數據進行狀態檢查和處理之前, 要採用數據鎖進行並發控制, 以避免函數重入造成的數據混亂。
特別注意:商戶後台接收到通知參數後,要對接收到通知參數里的訂單號out_trade_no和訂單金額total_fee和自身業務系統的訂單和金額做校驗,校驗一致後才更新數據庫訂單狀態
後台通知通過請求中的notify_url進行, post方式給商戶系統(通知參數內容為xml的字符串)
字段名 | 變量名 | 必填 | 類型 | 說明 |
版本號 | version | 是 | String(8) | 版本號,version默認值是1.0。 |
字符集 | charset | 是 | String(8) | 可選值 UTF-8 ,默認為 UTF-8。 |
簽名方式 | sign_type | 是 | String(8) | 簽名類型,取值: MD5默認:MD5 |
返回狀態碼 | status | 是 | String(16) | 0表示成功非0表示失敗此字段是通信標識,非交易標識,交易是否成功需要查看 result_code 來判斷 |
返回信息 | message | 否 | String(128) | 返回信息,如非空,為錯誤原因簽名失敗參數格式校驗錯誤 |
以下字段在 status 為 0的時候有返回 | ||||
業務結果 | result_code | 是 | String(16) | 0表示成功非0表示失敗 |
商戶號 | mch_id | 是 | String(32) | 商戶號,由平台分配 |
設備號 | device_info | 否 | String(32) | 終端設備號 |
隨機字符串 | nonce_str | 是 | String(32) | 隨機字符串,不長於 32 位 |
錯誤代碼 | err_code | 否 | String(32) | 參考錯誤碼 |
錯誤代碼描述 | err_msg | 否 | String (128) | 結果信息描述 |
簽名 | sign | 是 | String(32) | MD5簽名結果,詳見“安全規範” |
以下字段在 status 和 result_code 都為 0的時候有返回 | ||||
用戶標識 | openid | 否 | String(128) | 用戶在服務商 appid 下的唯一標識 |
交易類型 | trade_type | 是 | String(32) | ionline.pay.weixin.native.intl |
是否關注公眾賬號 td> | is_subscribe | 否 | String(1) | 用戶是否關注服務商公眾賬號,Y-關注,N-未關注 |
支付結果 | pay_result | 是 | Int | 支付結果:0—成功;其它—失敗 |
支付結果信息 | pay_info | 否 | String(64) | 支付結果信息,支付成功時為空 |
平台訂單號 | transaction_id | 是 | String(32) | 平台交易單號 td> |
第三方訂單號 td> | out_transaction_id | 是 | String(32) | 第三方訂單號 td> |
是否關注商戶公眾號 | sub_is_subscribe | 否 | String(1) | 用戶是否關注子公眾賬號,Y-關注,N-未關注, |
商戶appid | sub_appid | 否 | String | 商戶公眾號appid td> |
用戶openid | sub_openid | 否 | String(128) | 用戶在商戶公眾號appid  ;下的唯一標識 |
商戶訂單號 | out_trade_no | 是 | String(32) | 商戶系統內部的定單號,32個字符內、可包含字母 |
總金額 | total_fee | 是 | Int | 總金額,以分為單位,不允許包含任何字、符號 |
現金券金額 | coupon_fee | 否 | Int | 現金券支付金額< =訂單總金額, 訂單總金額-現金券金額為現金支付金額 |
貨幣種類 | fee_type | 是 | String(8) | 貨幣類型,符合 ISO 4217 標準的三位字母代碼,默認港幣:HKD |
附加信息 | attach | 否 | String(127) | 商家數據包,原樣返回 |
付款銀行 | bank_type | 否 | String(16) | 銀行類型 |
銀行訂單號 | bank_billno | 否 | String(32) | 銀行訂單號,若為微信支付則為空 |
支付完成時間 | time_end | 是 | String(14) | 支付完成時間,格式為yyyyMMddHHmmss,如2009年12月27日9點10分10秒錶示為20091227091010。時區為GMT+8 beijing。該時間取自平台服務器 |
平台 服務器發送通知,post發送XML數據流,商戶notify_Url地址接收通知結果,接收方法demo有寫(如php中的callback方法),商戶做業務處理後,需要以純字符串的形式反饋處理結果,內容如下:
返回結果 | 結果說明 |
success | 處理成功,平台收到此結果後不再進行後續通知 |
fail或其它字符 td> | 處理不成功,平台收到此結果或者沒有收到任何結果,系統通過補單機制再次通知 |