1. 程式人生 > >微信支付二維碼native原生支付開發模式一

微信支付二維碼native原生支付開發模式一

開發前,商戶必須在公眾平臺後臺設定支付回撥URL。URL實現的功能:接收使用者掃碼後微信支付系統回撥的productid和openid;URL設定詳見回撥地址設定

1.業務流程時序圖


圖6.8:原生支付介面模式一時序圖

業務流程說明:

1)商戶後臺系統根據微信支付規定格式生成二維碼(規則見下文第2節),展示給使用者掃碼。

2)使用者開啟微信“掃一掃”掃描二維碼,微信客戶端將掃碼內容傳送到微信支付系統。

3)微信支付系統收到客戶端請求,發起對商戶後臺系統支付回撥URL的呼叫。呼叫請求將帶productid和使用者的openid等引數,並要求商戶系統調返回prepay_id(【

統一下單API】返回的交易會話標識,有效期2小時)才能發起使用者支付。

4)商戶後臺系統收到微信支付系統的回撥請求,根據productid生成商戶系統的訂單。

5)商戶系統呼叫微信支付【統一下單API】請求生成交易會話標識。

6)微信支付系統根據商戶系統的請求生成預支付交易,返回交易會話標識prepay_id。

7)商戶後臺系統得到交易會話標識prepay_id。

8)商戶後臺系統將prepay_id返回給微信支付系統。

9)微信支付系統根據交易會話標識,發起使用者端授權支付流程。

10)使用者在微信客戶端輸入密碼,確認支付後,微信客戶端提交支付授權。

11)微信支付系統驗證後扣款,完成支付交易。

12)微信支付系統完成支付交易後給微信客戶端返回交易結果,並將交易結果通過簡訊、微信訊息提示使用者。微信客戶端展示支付交易結果頁面。

13)微信支付系統通過傳送非同步訊息通知商戶後臺系統支付結果。商戶後臺系統需回覆接收情況,通知微信後臺系統不再發送該單的支付通知。

14)未收到支付通知的情況,商戶後臺系統呼叫【查詢訂單API】。

15)商戶確認訂單已支付後給使用者發貨。

2.生成二維碼規則

二維碼中的內容為連結,形式為:

weixin://wxpay/bizpayurl?sign=XXXXX&appid=XXXXX&mch_id=XXXXX&product_id=XXXXXX&time_stamp=XXXXXX&nonce_str=XXXXX

其中XXXXX為商戶需要填寫的內容,商戶將該連結生成二維碼,如需要打印發布二維碼,需要採用此格式。商戶可呼叫第三方庫生成二維碼圖片。引數說明如下:

表6.1生成二維碼所需引數列表

名稱 變數名 型別 必填 示例值 描述
公眾賬號ID appid String(32) wx8888888888888888 微信分配的公眾賬號ID
商戶號 mch_id String(32) 1900000109 微信支付分配的商戶號
時間戳 time_stamp String(10) 1414488825 系統當前時間,定義規則詳見時間戳
隨機字串 nonce_str String(32) 5K8264ILTKCH16CQ2502SI8ZNMTM67VS 隨機字串,不長於32位。推薦隨機數生成演算法
商品ID product_id String(32) 88888 商戶定義的商品id 或者訂單號
簽名 sign String(32) C380BEC2BFD727A4B6845133519F3AD6

舉例:

weixin://wxpay/bizpayurl?appid=wx2421b1c4370ec43b&mch_id=10000100&nonce_str=f6808210402125e30663234f94c87a8c&product_id=1&time_stamp=1415949957&sign=512F68131DD251DA4A45DA79CC7EFE9D

3.回撥商戶支付URL

商戶提供的支付回撥URL(回撥地址設定)需要實現以下功能:接收使用者掃碼後微信支付系統傳送的資料,根據接收的資料生成支付訂單,呼叫【統一下單API】提交支付交易。

3.1.輸入引數

表6.2輸入引數說明
名稱 變數名 型別 必填 示例值 描述
公眾賬號ID appid String(32) wx8888888888888888 微信分配的公眾賬號ID
使用者標識 openid String(128) o8GeHuLAsgefS_80exEr1cTqekUs 使用者在商戶appid下的唯一標識
商戶號 mch_id String(32) 1900000109 微信支付分配的商戶號
是否關注公眾賬號 is_subscribe String(1) Y 使用者是否關注公眾賬號,僅在公眾賬號型別支付有效,取值範圍:Y或N;Y-關注;N-未關注
隨機字串 nonce_str String(32) 5K8264ILTKCH16CQ2502SI8ZNMTM67VS 隨機字串,不長於32位。推薦隨機數生成演算法
商品ID product_id String(32) 88888 商戶定義的商品id 或者訂單號
簽名 sign String(32) C380BEC2BFD727A4B6845133519F3AD6

3.2.輸出引數

表6.3輸出引數說明
名稱 變數名 型別 必填 示例值 描述
返回狀態碼 return_code String(16) SUCCESS SUCCESS/FAIL,此欄位是通訊標識,非交易標識,交易是否成功需要檢視result_code來判斷
返回資訊 return_msg String(128) 簽名失敗 返回資訊,如非空,為錯誤原因;簽名失敗;具體某個引數格式校驗錯誤.
公眾賬號ID appid String(32) wx8888888888888888 微信分配的公眾賬號ID
商戶號 mch_id String(32) 1900000109 微信支付分配的商戶號
隨機字串 nonce_str String(32) 5K8264ILTKCH16CQ2502SI8ZNMTM67VS 微信返回的隨機字串
預支付ID prepay_id String(64) wx201410272009395522657a690389285100 呼叫統一下單介面生成的預支付ID
業務結果 result_code String(16) SUCCESS SUCCESS/FAIL
錯誤描述 err_code_des String(128) 當result_code為FAIL時,商戶展示給使用者的錯誤提
簽名 sign String(32) C380BEC2BFD727A4B6845133519F3AD6