一、確保請求參數正確性
1、在進行getbrandwcpayrequest請求時,需要對請求參數進行正確性檢查。以下是getbrandwcpayrequest請求中需要傳遞的參數:
appid:公眾賬號ID mch_id:商戶號 nonce_str:隨機字符串,不長於32位 body:商品或支付單簡要描述 out_trade_no:商戶訂單號 total_fee:總金額,單位為分 spbill_create_ip:用戶端實際ip notify_url:接收微信支付異步通知回調地址 trade_type:交易類型,取值如下:JSAPI,NATIVE,APP等 product_id:trade_type=NATIVE時,此參數必傳。此參數為二維碼中包含的商品ID,商戶自行定義。 openid:trade_type為JSAPI時,此參數必傳,用戶在商戶appid下的唯一標識。
2、在傳遞參數時,需要注意參數名一定要使用小寫字母,例如appid、mch_id、nonce_str等。同時,參數值需要進行urlencode編碼。
appid=wx2421b1c4370ec43b mch_id=10000100 nonce_str=IITRi8Iabbblz1Jc body=%E8%AE%A2%E5%8D%95%E4%B8%AD%E8%B4%AD out_trade_no=1415659990 total_fee=1 spbill_create_ip=14.23.150.211 notify_url=http%3A%2F%2Fwxpay.wxutil.com%2Fpay.php trade_type=JSAPI openid=oUpF8uMuAJO_M2pxb1Q9zNjWeS6o
3、對於參數值中含有特殊字符(如#、&、+等)的情況,需要在urlencode編碼前進行轉義。例如,傳遞的商品名稱中含有#字符,需要將#轉義成%23,再進行urlencode編碼。
二、生成簽名
1、在傳遞請求參數正確性檢查無誤的情況下,需要對所有請求參數進行簽名,以保證請求的安全性。簽名生成算法使用的是MD5算法。以下是MD5簽名生成的步驟:
2、將所有請求參數按照參數名字典序排序(ASCII碼順序)後,使用”&”符號連接起來,得到一個字符串。
3、在該字符串後面拼接上商戶的API密鑰,得到一個完整的字符串。
4、對該完整字符串進行MD5運算,得到簽名值。
5、將簽名值作為參數添加到請求參數中。
{ "appid":"wx2421b1c4370ec43b", "attach":"支付測試", "body":"JSAPI支付測試", "mch_id":"10000100", "nonce_str":"1add1a30ac87aa2db72f57a2375d8fec", "notify_url":"http://wxpay.wxutil.com/pub_v2/pay/notify.v2.php", "openid":"oUpF8uMuAJO_M2pxb1Q9zNjWeS6o", "out_trade_no":"1415659990", "spbill_create_ip":"14.23.150.211", "total_fee":"1", "trade_type":"JSAPI", "sign":"0CB01533B8C1EF103065174F50BCA001" }
三、發送請求並獲取結果
1、在生成簽名後,將所有請求參數及其簽名值作為XML格式的字符串發送給微信支付服務器。以下是getbrandwcpayrequest請求的XML示例:
wx2421b1c4370ec43b 支付測試 JSAPI支付測試 10000100 1add1a30ac87aa2db72f57a2375d8fec http://wxpay.wxutil.com/pub_v2/pay/notify.v2.php oUpF8uMuAJO_M2pxb1Q9zNjWeS6o 1415659990 14.23.150.211 1 JSAPI 0CB01533B8C1EF103065174F50BCA001
2、微信支付服務器將會返回XML格式的結果給商戶服務器。以下是getbrandwcpayrequest請求返回的XML示例:
3、商戶服務器需要對返回結果進行解析,並處理其中的響應參數。根據返回結果中的prepay_id,商戶便可在微信支付服務器通過JSAPI發起用戶支付。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/155488.html