6 掃碼支付接口
6.1 掃碼支付接口
6.1.1 業務功能
初始化掃碼請求,通過該請求生成二維碼來進行掃碼支付.
6.1.2 交互模式
請求:後臺請求交互模式 返回結果+通知:後臺請求交互模式+後臺通知交互模式
6.1.3 請求參數列表
請求 url:https://gateway.wepayez.com/pay/gateway
POST XML 內容體進行請求
字段名 | 變數名 | 必填 | 類型 | 說明 |
---|---|---|---|---|
接口類型 | service | 是 | String(32) | 接口類型:pay.weixin.native.intl |
版本號 | version | 否 | String(8) | 版本號,version 默認值是 2.0 |
字元集 | charset | 否 | String(8) | 字元集,取值:UTF-8 |
簽名方式 | sign_type | 否 | String(8) | 簽名類型,取值:MD5 |
商戶號 | mch_id | 是 | String(32) | 商戶號,由平臺分配 |
商戶訂單號 | out_trade_no | 是 | String(32) | 商戶系統內部的訂單號 ,32 個字元內、可包含字母、數字、下劃線,確保在商戶系統唯一 |
設備號 | device_info | 否 | String(32) | 終端設備號 |
商品描述 | body | 是 | String(127) | 商品描述 |
附加資訊 | attach | 否 | String(127) 商戶附加資訊,可做擴展參數 | |
總金額 | total_fee | 是 | Int | 金額,以支付貨幣為准,以分為單位。如支付貨幣為港幣,1000表示HKD10.00。測試商戶號最大限額100分/筆(即 1 元/筆) |
終端 IP | mch_create_ip | 是 | String(16) | 訂單生成的機器 IP |
通知地址 | notify_url | 是 | String(255) | 接收平臺通知的URL,需給絕對路徑,255字元內格式如:http://wap.tenpay.com/tenpay.asp,確保平臺能通過互聯網訪問該地址 |
訂單生成時間 | time_start | 否 | String(14) | 訂單生成時間,格式為 yyyyMMddHHmmss,如2009年12月25日9點10分10碼錶示為20091225091010。時區為 GMT+8 beijing。 |
訂單超時時間 | time_expire | 否 | String(14) | 訂單失效時間,格式為yyyyMMddHHmmss,如2009年12月27日9點10分10碼錶示為20091227091010。時區為 GMT+8 beijing。 |
操作員 | op_user_id | 否 | String(32) | 操作員帳號,默認為商戶號 |
商品標記 | goods_tag | 否 | String(32) | 商品標記,微信平臺配置的商品標記,用於優惠券或者滿減使用 |
商品 ID | product_id | 否 | String(32) | 預留字段此 id 為靜態可列印的二維碼中包含的商品 ID,商戶自行維護。 |
隨機字串 | nonce_str | 是 | String(32) | 隨機字串,不長於 32 位 |
是否限制信用卡 | limit_credit_pay | 否 | String(32) | 限定用戶使用微信支付時能否使用信用卡,值為1,禁用信用卡;值為0或者不傳此參數則不禁用 |
簽名 | sign | 是 | String(32) | MD5 簽名結果,詳見“第 4 章 MD5 簽名規則” |
6.1.4 返回結果
數據按 XML 的格式即時返回
字段名 | 變數名 | 必填 | 類型 | 說明 |
---|---|---|---|---|
版本號 | version | 是 | String(8) | 版本號,version 默認值是 2.0。 |
字元集 | charset | 是 | Str ing(8) | 字元集,取值:UTF-8 |
簽名方式 | sign_type | 是 | String(8) | 簽名類型,取值: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 簽名結果,詳見“第 4 章 MD5 簽名規則” |
以下字段在 status 和 result_code 都為 0 的時候有返回
字段名 | 變數名 | 必填 | 類型 | 說明 |
---|---|---|---|---|
二維碼鏈接 | code_url | 是 | String(64) | 商戶可用此參數自定義去生成二維碼後展示出來進行掃碼支付 |
二維碼圖片 | code_img_url | 是 | String(256) | 此參數的值即是根據code_url生成的可以掃碼支付的二維碼圖片地址 |
公众账号 ID | appid | 否 | String(18) | 公众账号 ID |
uuid | uuid | 否 | String(33) | uuid |
6.2 掃碼通知接口
6.2.1 通知結果參數列表
通知 URL 是 6.1 節中提交的參數 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 默認值是 2.0。 |
字元集 | charset | 是 | String(8) | 字元集,取值:UTF-8。 |
簽名方式 | sign_type | 是 | String(8) | |
返回狀態碼 | 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 簽名結果,詳見“第 4 章 MD5 簽名規則” |
以下字段在 status 和 result_code 都為 0 的時候有返回
字段名 | 變數名 | 必填 | 類型 | 說明 |
---|---|---|---|---|
用戶標識 | openid | 是 | String(128) | 用戶在服務商 appid 下的唯一標識 |
交易類型 | trade_type | 是 | String(32) | pay.weixin.native.intl |
是否關注公眾帳號 | is_subscribe | 是 | String(1) | 用戶是否關注服務商公眾帳號,Y-關注,N未關注 |
支付結果 | pay_result | 是 | Int | 支付結果:0—成功;其他—失敗 |
支付結果資訊 | pay_info | 否 | String(64) | 支付結果資訊,支付成功時為空 |
平臺訂單號 | transaction_id | 是 | String(32) | 平臺交易單號 |
第三方訂單號 | out_transaction_id | 是 | String(32) | 第三方訂單號 |
是否關注商戶公眾號 | sub_is_subscribe | 否 | String(1) | 用戶是否關注子公眾帳號,Y-關注,N-未關注, |
商戶appid | sub_appid | 否 | String | 商戶公眾號appid |
用戶 openid | sub_openid | 否 | String(128) | 用戶在商戶公眾號 appid 下的唯一標識 |
商戶訂單號 | out_trade_no | 是 | String(32) | 商戶系統內部的定單號,32 個字元內、可包含字母、數字、下劃線 |
總金額 | total_fee | 是 | Int | 總金額,以分為單位,不允許包含任何字、符號 |
現金券金額 | coupon_fee | 否 | Int | 現金券支付金額<=訂單總金額, 訂單總金額-現金券金額為現金支付金額 |
貨幣種類 | fee_type | 是 | String(8) | 貨幣類型,符合 ISO 4217 標準的三位字母代碼 |
附加資訊 | 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。 |
現金支付金額 | cash_fee | 是 | Int | 現金支付金額訂單現金支付金額,单位:分 |
現金支付貨幣類型 | cash_fee_type | 否 | String(16) | 貨幣類型,符合 ISO 4217 標準的三位字母代碼,CNY |
匯率 | rate | 是 | string(16) | 用戶支付幣種與商戶結算幣種的兌換比例關係 |
#6.2.2 後臺通知結果回饋
平臺伺服器發送通知,post 發送 XML 數據流,商戶 notify_Url 地址接收通知結果,接收方法 demo 有寫(如 php 中的 callback 方法,c#中的 notify.aspx 檔,java 中的 TestPayResultSerlet 方法),商戶做業務處理後, 需要以純字串的形式回饋處理結果,內容如下:
返回结果 | 结果说明 |
---|---|
success | 處理成功,平臺收到此結果後不再進行後續通知 |
fail 或其他字元 | 處理不成功,平臺收到此結果或者沒有收到任何結果,系統通過補單機制(詳見第 5 節)再次通知 |
6.3 訂單查詢接口
6.3.1 業務功能
根據商戶訂單號或者平臺訂單號查詢平臺的具體訂單資訊。
6.3.2 交互模式
後臺系統調用交互模式
6.3.3 請求參數列表
請求 url:https://gateway.wepayez.com/pay/gateway
通過 POST XML 內容體進行請求
字段名 | 變數名 | 必填 | 類型 | 說明 |
---|---|---|---|---|
接口類型 | service | 是 | String(32) | 接口類型:unified.trade.query |
版本號 | version | 否 | String(8) | 版本號,version 默認值是 2.0。 |
字元集 | charset | 否 | String(8) | 字元集,取值:UTF-8。 |
簽名方式 | sign_type | 否 | String(8) | 簽名類型,取值:MD5 |
商戶號 | mch_id | 是 | String(32) | 商戶號,由平臺分配 |
商戶訂單號 | out_trade_no | 否 | String(32) | 商戶系統內部的訂單號, out_trade_no 和 transaction_id 至少一個必填,同時存在時 transaction_id 優先 |
平臺訂單號 | transaction_id | 否 | String(32) | 平 臺 交 易 號 , out_trade_no 和 transaction_id 至少一個必填,同時存在時 transaction_id 優先。 |
隨機字串 | nonce_str | 是 | string(32) | 隨機字串,不長於 32 位 |
簽名 | sign | 是 | String(32) | MD5 簽名結果,詳見“第 4 章 MD5 簽名規則” |
6.3.4 返回結果
數據按 XML 的格式即時返回
字段名 | 變數名 | 必填 | 類型 | 說明 |
---|---|---|---|---|
版本號 | version | 是 | String(8) | 版本號,version 默認值是 2.0。 |
字元集 | charset | 是 | String(8) | 字元集,取值:UTF-8。 |
簽名方式 | sign_type | 是 | String(8) | 簽名類型,取值:MD5 |
返回狀態碼 | status | 是 | String(16) | 0 表示成功非 0 表示失敗。此字段是通信標識,非交易標識,交易是否成功需要查看trade_state來判斷 |
返回資訊 | 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 簽名結果,詳見“第 4 章 MD5 簽名規則” |
以下字段在 status 和 result_code 都為 0 的時候有返回
字段名 | 變數名 | 必填 | 類型 | 說明 |
---|---|---|---|---|
交易狀態 | trade_state | 是 | String(32) | SUCCESS—支付成功REFUND—轉入退款NOTPAY—未支付CLOSED—已關閉PAYERROR—支付失敗(其他原因,如銀行返回 |
失敗)
以下字段在 trade_state 為 SUCCESS 的時候有返回
字段名 | 變數名 | 必填 | 類型 | 說明 |
---|---|---|---|---|
交易類型 | trade_type | 是 | String(32) | pay.weixin.native.intl |
公眾號appid | appid | 是 | String(32) | 服務商公眾號 appid |
用戶標識 | openid | 是 | String(128) | 用戶在服務商 appid 下的唯一標識 |
是否關注公眾帳號 | is_subscribe | 是 | String(1) | 用戶是否關注服務商公眾帳號,Y-關注,N未關注 |
平臺訂單號 | transaction_id | 是 | String(32) | 平臺交易單號 |
第三方訂單號 | out_transaction_id | 否 | String(32) | 第三方訂單號(支付成功後會返回,沒支付則不會) |
商戶訂單號 | out_trade_no | 是 | String(32) | 商戶系統內部的定單號,32 個字元內、可包含字母 |
總金額 | total_fee | 是 | Int | 總金額,以分為單位,不允許包含任何字、符號 |
現金券金額 | coupon_fee | 否 | Int | 現金券支付金額<=訂單總金額,訂單總金額-現金券金額為現金支付金額 |
貨幣種類 | fee_type | 是 | String(8) | 貨幣類型,符合 ISO 4217 標準的三位字母代碼 |
附加資訊 | 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。 |
現金支付金額 | cash_fee | 是 | Int | 現金支付金額訂單現金支付金額,单位:分 |
現金支付貨幣類型 | cash_fee_type | 否 | String(16) | 貨幣類型,符合 ISO 4217 標準的三位字母代碼,CNY |
匯率 | rate | 是 | String(16) | 用戶支付幣種與商戶結算幣種的兌換比例關係 |