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

 

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

 

1、支付場景

用戶掃描商戶展現在各類場景的二維碼進行支付。算法

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

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

 

       

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

 

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

步驟(4):支付完成後會提示用戶支付成功(如圖1.5),商戶後臺獲得支付成功的通知,而後進行發貨處理。網絡

        

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

 

2、參數格式

發送和接收參數格式均爲XML格式。異步

3、簽名算法

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

特別注意如下重要規則:

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

◆ 若是參數的值爲空不參與簽名;

◆ 參數名區分大小寫;

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

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

 

第二步,stringA最後拼接上key獲得stringSignTemp字符串,並對stringSignTemp進行MD5運算,再將獲得的字符串全部字符轉換爲大寫,獲得signsignValue

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

 

4、調用流程

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

用戶支付後,微信將支付結果通知【統一下單API中配置的notify_url連接地址,商戶後臺系統拿到支付結果後作相應的訂單狀態變動。

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

注意:該模式的預付單有效期爲2小時,過時後沒法支付。

5、統一下單

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.示例代碼

 

 

6、支付結果通知

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

返回信息,如非空,爲錯誤緣由:

簽名失敗

參數格式校驗錯誤

 

7、訂單查詢

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.示例代碼

相關文章
相關標籤/搜索