開發前,商戶必須在公衆平臺後臺設置支付回調URL。URL實現的功能:接收用戶掃碼後微信支付系統回調的productid和openid;URL設置詳見回調地址設置。php
1)商戶後臺系統根據微信支付規定格式生成二維碼(規則見下文第2節),展現給用戶掃碼。算法
2)用戶打開微信「掃一掃」掃描二維碼,微信客戶端將掃碼內容發送到微信支付系統。api
3)微信支付系統收到客戶端請求,發起對商戶後臺系統支付回調URL的調用。調用請求將帶productid和用戶的openid等參數,並要求商戶系統調返回prepay_id(【統一下單API】返回的交易會話標識,有效期2小時)才能發起用戶支付。微信
4)商戶後臺系統收到微信支付系統的回調請求,根據productid生成商戶系統的訂單。app
5)商戶系統調用微信支付【統一下單API】請求生成交易會話標識。異步
6)微信支付系統根據商戶系統的請求生成預支付交易,返回交易會話標識prepay_id。微信支付
7)商戶後臺系統獲得交易會話標識prepay_id。url
8)商戶後臺系統將prepay_id返回給微信支付系統。code
9)微信支付系統根據交易會話標識,發起用戶端受權支付流程。blog
10)用戶在微信客戶端輸入密碼,確認支付後,微信客戶端提交支付受權。
11)微信支付系統驗證後扣款,完成支付交易。
12)微信支付系統完成支付交易後給微信客戶端返回交易結果,並將交易結果經過短信、微信消息提示用戶。微信客戶端展現支付交易結果頁面。
13)微信支付系統經過發送異步消息通知商戶後臺系統支付結果。商戶後臺系統需回覆接收狀況,通知微信後臺系統再也不發送該單的支付通知。
14)未收到支付通知的狀況,商戶後臺系統調用【查詢訂單API】。
15)商戶確認訂單已支付後給用戶發貨。
二維碼中的內容爲連接,形式爲:
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
商戶提供的支付回調URL(回調地址設置)須要實現如下功能:接收用戶掃碼後微信支付系統發送的數據,根據接收的數據生成支付訂單,調用【統一下單API】提交支付交易。
3.1.輸入參數
名稱 | 變量名 | 類型 | 必填 | 示例值 | 描述 |
---|---|---|---|---|---|
公衆帳號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.輸出參數
名稱 | 變量名 | 類型 | 必填 | 示例值 | 描述 |
---|---|---|---|---|---|
返回狀態碼 | 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 | 返回數據簽名,簽名生成算法 |