微信支付開發 - 掃碼支付(模式二)


 

關鍵字:微信支付動態native支付、掃碼支付、掃碼支付模式二、統一支付

 

一、支付場景

用戶掃描商戶展示在各種場景的二維碼進行支付。

步驟1:商戶根據微信支付的規則,為不同商品生成不同的二維碼(如圖1.1),展示在各種場景,用於用戶掃描購買。

步驟2:用戶使用微信“掃一掃”(如圖1.2)掃描二維碼后,獲取商品支付信息,引導用戶完成支付(如圖1.3)。

 

       

            1.1支付二維碼                 圖1.2打開微信掃一掃                                1.3 支付確認頁面

 

步驟(3):用戶確認支付,輸入支付密碼(如圖1.4)。

步驟(4):支付完成后會提示用戶支付成功(如圖1.5),商戶后台得到支付成功的通知,然后進行發貨處理。

        

    圖1.4用戶確認支付,輸入密碼                              1.5 支付成功提示

 

二、參數格式

發送和接收參數格式均為XML格式。

三、簽名算法

第一步,設所有發送或者接收到的數據為集合M,將集合M內非空參數值的參數按照參數名ASCII碼從小到大排序(字典序),使用URL鍵值對的格式(即key1=value1&key2=value2…)拼接成字符串stringA

特別注意以下重要規則:

◆ 參數名ASCII碼從小到大排序(字典序);

◆ 如果參數的值為空不參與簽名;

◆ 參數名區分大小寫;

◆ 驗證調用返回或微信主動通知簽名時,傳送的sign參數不參與簽名,將生成的簽名與該sign值作校驗。

◆ 微信接口可能增加字段,驗證簽名時必須支持增加的擴展字段

 

第二步,stringA最后拼接上key得到stringSignTemp字符串,並對stringSignTemp進行MD5運算,再將得到的字符串所有字符轉換為大寫,得到signsignValue

key設置路徑:微信商戶平台(pay.weixin.qq.com)-->賬戶設置-->API安全-->密鑰設置

 

四、調用流程

商戶后台系統調用微信支付統一下單API】生成預付交易,將接口返回的鏈接生成二維碼,用戶掃碼后輸入密碼完成支付交易。

用戶支付后,微信將支付結果通知【統一下單API中配置的notify_url鏈接地址,商戶后台系統拿到支付結果后做相應的訂單狀態變更。

商戶后台可根據訂單號或者微信訂單號,調用訂單查詢API】查詢訂單支付狀態。

注意:該模式的預付單有效期為2小時,過期后無法支付。

五、統一下單

1.接口鏈接

https://api.mch.weixin.qq.com/pay/unifiedorder

2.是否需要證書

3.請求參數

注:以下只列出了關鍵參數

字段名

變量名

必填

類型

示例值

描述

公眾賬號ID

appid

String(32)

wxd678efh567hg6787

微信支付分配的公眾賬號ID(企業號corpid即為此appId

商戶號

mch_id

String(32)

1230000109

微信支付分配的商戶號

隨機字符串

nonce_str

String(32)

5K8264ILTKCH16CQ2502SI8ZNMTM67VS

隨機字符串,長度要求在32位以內。推薦隨機數生成算法

簽名

sign

String(32)

C380BEC2BFD727A4B6845133519F3AD6

通過簽名算法計算得出的簽名值,詳見簽名生成算法

簽名類型

sign_type

String(32)

HMAC-SHA256

簽名類型,默認為MD5,支持HMAC-SHA256MD5

商品描述

body

String(128)

騰訊充值中心-QQ會員充值

商品簡單描述,該字段請按照規范傳遞,具體請見參數規定

商戶訂單號

out_trade_no

String(32)

20150806125346

商戶系統內部訂單號,要求32個字符內、且在同一個商戶號下唯一

標價金額

total_fee

Int

88

訂單總金額,單位為分

終端IP

spbill_create_ip

String(16)

123.12.12.123

APP和網頁支付提交用戶端ipNative支付填調用微信支付API的機器IP

通知地址

notify_url

String(256)

http://www.weixin.qq.com/wxpay/pay.php

異步接收微信支付結果通知的回調地址,通知url必須為外網可訪問的url,不能攜帶參數。

交易類型

trade_type

String(16)

NATIVE

取值如下:JSAPINATIVEAPP

商品ID

product_id

String(32)

12235413214070356458058

trade_type=NATIVE時(即掃碼支付),此參數必傳。此參數為二維碼中包含的商品ID,商戶自行定義。

....

 

4.返回參數

字段名

變量名

必填

類型

示例值

描述

返回狀態碼

return_code

String(16)

SUCCESS

SUCCESS/FAIL此字段是通信標識,非交易標識,交易是否成功需要查看result_code來判斷

返回信息

return_msg

String(128)

簽名失敗

返回信息,如非空,為錯誤原因

簽名失敗

參數格式校驗錯誤

 

以下字段在return_codeSUCCESS的時候有返回

字段名

變量名

必填

類型

示例值

描述

公眾賬號ID

appid

String(32)

wx8888888888888888

調用接口提交的公眾賬號ID

商戶號

mch_id

String(32)

1900000109

調用接口提交的商戶號

設備號

device_info

String(32)

013467007045764

自定義參數,可以為請求支付的終端設備號等

隨機字符串

nonce_str

String(32)

5K8264ILTKCH16CQ2502SI8ZNMTM67VS

微信返回的隨機字符串

簽名

sign

String(32)

C380BEC2BFD727A4B6845133519F3AD6

微信返回的簽名值,詳見簽名算法

業務結果

result_code

String(16)

SUCCESS

SUCCESS/FAIL

錯誤代碼

err_code

String(32)

SYSTEMERROR

 

錯誤代碼描述

err_code_des

String(128)

系統錯誤

錯誤信息描述

 

以下字段在return_code result_code都為SUCCESS的時候有返回

字段名

變量名

必填

類型

示例值

描述

交易類型

trade_type

String(16)

JSAPI

交易類型,取值為:JSAPINATIVEAPP

預支付交易會話標識

prepay_id

String(64)

wx201410272009395522657a690389285100

 

二維碼鏈接

code_url

String(64)

weixin//wxpay/s/An4baqw

trade_typeNATIVE時有返回,用於生成二維碼,展示給用戶進行掃碼支付

5.示例代碼

 

 

六、支付結果通知

1.說明

支付完成后,微信會把相關支付結果和用戶信息發送給商戶,商戶需要接收處理,並返回應答。

對后台通知交互時,如果微信收到商戶的應答不是成功或超時,微信認為通知失敗,微信會通過一定的策略定期重新發起通知,盡可能提高通知的成功率,但微信不保證通知最終能成功。(通知頻率為15/15/30/180/1800/1800/1800/1800/3600,單位:秒)

注意:

   同樣的通知可能會多次發送給商戶系統。商戶系統必須能夠正確處理重復的通知。

   特別提醒:商戶系統對於支付結果通知的內容一定要做簽名驗證,並校驗返回的訂單金額是否與商戶側的訂單金額一致,防止數據泄漏導致出現“假通知”,造成資金損失。

 

2.接口鏈接

【統一下單API】中提交的參數notify_url,如果鏈接無法訪問,商戶將無法接收到微信通知。

注意:

   通知url必須為直接可訪問的url,不能攜帶參數。示例:notify_url:“https://pay.weixin.qq.com/wxpay/pay.action”。

 

3.是否需要證書

4.通知參數

 

字段名

變量名

必填

類型

示例值

描述

返回狀態碼

return_code

String(16)

SUCCESS

SUCCESS/FAIL此字段是通信標識,非交易標識,交易是否成功需要查看result_code來判斷

返回信息

return_msg

String(128)

簽名失敗

返回信息,如非空,為錯誤原因

簽名失敗

參數格式校驗錯誤

 

以下字段在return_codeSUCCESS的時候有返回

注:以下只列出了關鍵參數

字段名

變量名

必填

類型

示例值

描述

公眾賬號ID

appid

String(32)

wxd678efh567hg6787

微信支付分配的公眾賬號ID(企業號corpid即為此appId

商戶號

mch_id

String(32)

1230000109

微信支付分配的商戶號

隨機字符串

nonce_str

String(32)

5K8264ILTKCH16CQ2502SI8ZNMTM67VS

隨機字符串,長度要求在32位以內。推薦隨機數生成算法

簽名

sign

String(32)

C380BEC2BFD727A4B6845133519F3AD6

通過簽名算法計算得出的簽名值,詳見簽名生成算法

簽名類型

sign_type

String(32)

HMAC-SHA256

簽名類型,默認為MD5,支持HMAC-SHA256MD5

業務結果

result_code

String(16)

SUCCESS

SUCCESS/FAIL

錯誤代碼

err_code

String(32)

SYSTEMERROR

 

錯誤代碼描述

err_code_des

String(128)

系統錯誤

錯誤信息描述

用戶標識

openid

String(128)

wxd930ea5d5a258f4f

用戶在商戶appid下的唯一標識

交易類型

trade_type

String(16)

JSAPI

JSAPINATIVEAPP

付款銀行

bank_type

String(16)

CMC

銀行類型,采用字符串類型的銀行標識

訂單金額

total_fee

Int

100

訂單總金額,單位為分

現金支付金額

cash_fee

Int

100

現金支付金額訂單現金支付金額

微信支付訂單號

transaction_id

String(32)

1217752501201407033233368018

微信支付訂單號

商戶訂單號

out_trade_no

String(32)

20150806125346

商戶系統的訂單號,與請求一致。

...

 

5.返回參數

商戶處理后同步返回給微信參數:

字段名

變量名

必填

類型

示例值

描述

返回狀態碼

return_code

String(16)

SUCCESS

SUCCESS/FAIL

SUCCESS表示商戶接收通知成功並校驗成功

返回信息

return_msg

String(128)

OK

返回信息,如非空,為錯誤原因:

簽名失敗

參數格式校驗錯誤

 

七、訂單查詢

1.使用場景

該接口提供所有微信支付訂單的查詢,商戶可以通過查詢訂單接口主動查詢訂單狀態,完成下一步的業務邏輯。

需要調用查詢接口的情況:

◆ 當商戶后台、網絡、服務器等出現異常,商戶系統最終未接收到支付通知;

◆ 調用支付接口后,返回系統錯誤或未知交易狀態情況;

◆ 調用被掃支付API,返回USERPAYING的狀態;

◆ 調用關單或撤銷接口API之前,需確認支付狀態;

 

2.接口鏈接

https://api.mch.weixin.qq.com/pay/orderquery

3.是否需要證書

4.請求參數

字段名

變量名

必填

類型

示例值

描述

公眾賬號ID

appid

String(32)

wxd678efh567hg6787

微信支付分配的公眾賬號ID(企業號corpid即為此appId

商戶號

mch_id

String(32)

1230000109

微信支付分配的商戶號

微信支付訂單號

transaction_id

二選一

String(32)

1217752501201407033233368018

微信的訂單號,建議優先使用

商戶訂單號

out_trade_no

String(32)

20150806125346

商戶系統內部的訂單號,請確保在同一商戶號下唯一。

隨機字符串

nonce_str

String(32)

5K8264ILTKCH16CQ2502SI8ZNMTM67VS

隨機字符串,長度要求在32位以內。推薦隨機數生成算法

簽名

sign

String(32)

C380BEC2BFD727A4B6845133519F3AD6

通過簽名算法計算得出的簽名值,詳見簽名生成算法

簽名類型

sign_type

String(32)

HMAC-SHA256

簽名類型,默認為MD5,支持HMAC-SHA256MD5

 

 

5.返回參數

字段名

變量名

必填

類型

示例值

描述

返回狀態碼

return_code

String(16)

SUCCESS

SUCCESS/FAIL

SUCCESS表示商戶接收通知成功並校驗成功

返回信息

return_msg

String(128)

簽名失敗

返回信息,如非空,為錯誤原因:

簽名失敗

參數格式校驗錯誤

 

以下字段在return_codeSUCCESS的時候有返回

字段名

變量名

必填

類型

示例值

描述

公眾賬號ID

appid

String(32)

wx8888888888888888

調用接口提交的公眾賬號ID

商戶號

mch_id

String(32)

1900000109

調用接口提交的商戶號

隨機字符串

nonce_str

String(32)

5K8264ILTKCH16CQ2502SI8ZNMTM67VS

 

簽名

sign

String(32)

C380BEC2BFD727A4B6845133519F3AD6

微信返回的簽名值,詳見簽名算法

業務結果

result_code

String(16)

SUCCESS

SUCCESS/FAIL

錯誤代碼

err_code

String(32)

SYSTEMERROR

錯誤碼

錯誤代碼描述

err_code_des

String(128)

系統錯誤

錯誤信息描述

 

以下字段在return_code result_codetrade_state都為SUCCESS時有返回 ,如trade_state不為 SUCCESS,則只返回out_trade_no(必傳)和attach(選傳)。

注:以下只列出了關鍵參數

字段名

變量名

必填

類型

示例值

描述

設備號

device_info

String(32)

013467007045764

微信支付分配的終端設備號

用戶標識

openid

String(128)

oUpF8uMuAJO_M2pxb1Q9zNjWeS6o

用戶在商戶appid下的唯一標識

交易類型

trade_type

String(16)

JSAPI

調用接口提交的交易類型,取值如下:JSAPINATIVEAPPMICROPAY

交易狀態

trade_state

String(32)

SUCCESS

SUCCESS—支付成功

REFUND—轉入退款

NOTPAY—未支付

CLOSED—已關閉

REVOKED—已撤銷(刷卡支付)

USERPAYING--用戶支付中

PAYERROR--支付失敗(其他原因,如銀行返回失敗)

標價金額

total_fee

Int

100

訂單總金額,單位為分

現金支付金額

cash_fee

Int

100

現金支付金額訂單現金支付金額

微信支付訂單號

transaction_id

String(32)

1217752501201407033233368018

微信的訂單號,建議優先使用

商戶訂單號

out_trade_no

String(32)

20150806125346

商戶系統的訂單號,與請求一致

交易狀態描述

trade_state_desc

String(256)

支付失敗,請重新下單支付

對當前查詢訂單狀態的描述和下一步操作的指引

...

 

 

6.示例代碼

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM