前言
本篇文章主要用於總結下常用的微信支付方式對接方式和特點
微信支付產品
如下圖,常見的微信支付產品 https://pay.weixin.qq.com/wiki/doc/api/index.html
本篇文章主要針對APP支付,Native支付,小程序支付對接進行總結和整理
APP支付
相關文檔: https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_5_0.shtml
介紹:
APP支付是指商戶通過在移動端應用APP中集成開放SDK調起微信支付模塊來完成支付。目前微信支付支持手機系統有:IOS(蘋果)、Android(安卓)和WP(Windows Phone)
時序圖
根據時序圖,可以看到支付核心,也就是后端關注點主要在步驟4:生成預付單(也就是微信文檔中的統一下單接口 https://api.mch.weixin.qq.com/pay/unifiedorder)
API文檔地址:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1
注意點:
1.涉及到的支付參數有4個
1.1,wxAppid-微信開放平台審核通過的應用APPID,開放平台地址: https://open.weixin.qq.com/
1.2,mch_id-微信支付分配的商戶號
1.3.mch_key-商戶平台設置的密鑰key(用於加密時使用) https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=4_3
1.4 wx_file-微信支付證書(證書和商戶ID是配套的,涉及到資金變動的接口需要證書)參考地址:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=4_3
2.請求與響應的接口數據的格式都是XML,需要簽名和驗簽
簽名方式主要有兩種:HMAC-SHA256 / MD5
微信提供了驗簽的工具:地址:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=20_1
3.商戶服務端接口返回字符串給到移動端APP,返回的格式可以指定為JSON格式,客戶端解析JSON獲取支付參數,再去拉起微信支付(即時序圖中的7)
JSON格式:
//返回參數接口文檔:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1
{\"appId\":\"xxxxxxxxx(移動端應用APPID)\",\"nonceStr\":\"xxxxxxxx(隨機字符串)\",\"packageValue\":\"Sign=WXPay\",\"partnerId\":\"xxxxxx(商戶ID)\",\"prepayId\":\"xxxxxxxxxxxx(預支付ID)\",
\"sign\":\"xxxxxxxx(簽名)\",\"timeStamp\":\"xxxxxxx(時間戳)\"}
4.包名要保持一致
注意開放平台中配置的微信應用APPID對應的包名必須和拉起支付的APP客戶端要保持一致,如果包名不一致,則時序圖圖步驟7拉起微信支付時,會提示包名錯誤
查看微信應用包名信息:
微信開放平台---->移動應用---->查看----->開發信息
如下圖
5.需要綁定微信應用APPID和商戶ID
關聯綁定地址 https://pay.weixin.qq.com/static/pay_setting/appid_protocol.shtml
綁定后,在微信開放平台查看應用可以看到應用信息-->接口信息-->微信支付狀態為已獲取
Native支付
https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_1
介紹
Native支付是商戶系統按微信支付協議生成支付二維碼,用戶再用微信“掃一掃”完成支付的模式。該模式適用於PC網站支付、實體店單品或訂單支付、媒體廣告支付等場景。
也就是我們常見的PC端網頁的掃碼支付
時序圖
地址:
https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter5_1_10.shtml(V3文檔地址)
https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_5&index=3(V2文檔地址)
根據時序圖,可以看到后端主要關注的點在步驟2和步驟3(調用API接口發起預支付請求)
注意點:
1.涉及到的支付參數有4個
1.1,wxAppid-微信開放平台審核通過的應用APPID,開放平台地址: https://open.weixin.qq.com/
1.2,mch_id-微信支付分配的商戶號
1.3.mch_key-商戶平台設置的密鑰key(用於加密時使用) https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=4_3
1.4 wx_file-微信支付證書(證書和商戶ID是配套的,涉及到資金變動的接口需要證書)參考地址:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=4_3
2.請求與響應的接口數據的格式都是XML,需要簽名和驗簽
簽名方式主要有兩種:HMAC-SHA256 / MD5
微信提供了驗簽的工具:地址:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=20_1
3.商戶服務端接口返回微信特有的協議URL,客戶端將該URL轉換成二維碼呈現給用戶
weixin://wxpay/bizpayurl/up?pr=NwY5Mz9&groupid=00(注意,該協議是微信特有的協議,只能通過微信客戶端打開)
H5支付
文檔地址:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_1
介紹
H5支付是指商戶在微信客戶端外的移動端網頁展示商品或服務,用戶在前述頁面確認使用微信支付時,商戶發起本服務呼起微信客戶端進行支付。
主要用於觸屏版的手機瀏覽器請求微信支付的場景。可以方便的從外部瀏覽器喚起微信支付。
提醒:H5支付不建議在APP端使用,如需要在APP中使用微信支付,請接APP支付
業務流程
https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_3
時序圖
地址:
https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_4(V2文檔地址)
根據時序圖,可以看到后端主要關注的點在步驟2,調用微信支付接口下單
注意點:
1.涉及到的支付參數有4個
1.1,wxAppid-微信開放平台審核通過的應用APPID,開放平台地址: https://open.weixin.qq.com/
1.2,mch_id-微信支付分配的商戶號
1.3.mch_key-商戶平台設置的密鑰key(用於加密時使用) https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_20&index=1
1.4 wx_file-微信支付證書(證書和商戶ID是配套的,涉及到資金變動的接口需要證書)參考地址:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=4_3
2.請求與響應的接口數據的格式都是XML,需要簽名和驗簽
簽名方式主要有兩種:HMAC-SHA256 / MD5
微信提供了驗簽的工具:地址:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_20&index=1
3.H5支付的交易類型
H5支付的交易類型為MWEB
4.H5支付的場景信息
H5支付需要傳遞scene_info參數,注意場景信息里需要傳對應的包名/bundle_id/WAP網站URL地址
這里可能是處於安全考慮,保證客戶端請求拉起支付地址的和服務端傳遞的地址要保證一致
5.商戶服務端接口返回微信Http協議的URL地址,如圖
可以看到返回值
https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx2016121516420242444321ca0631331346&package=1405458241
6.H5支付跳轉地址無法跳轉回的來問題
注意,客戶端拿到服務端統一下單接口的URL后,訪問URL,拉起H5微信支付,這種情況下,為了保證微信支付后,頁面能夠跳回商戶的H5網站,
這里可以再同一個下單接口返回URL后面,添加一個跳轉到商戶的URL地址來解決這個問題,例如
https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx2016121516420242444321ca0631331346&package=1405458241&redirect_url=http://www.商戶網站.com
由前端獲取rediect_url后面的參數,來進行支付成功后的跳轉
JSAPI支付/公眾號支付
JSAPI支付也叫公眾號支付
https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_1
介紹
商戶已有H5商城網站,用戶通過消息或掃描二維碼在微信內打開網頁時,可以調用微信支付完成下單購買的流程。
業務流程
https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_4
時序圖
根據時序圖,可以看到后端主要關注的點在步驟3和4,調用微信支付接口下單
注意點:
0.准備工作:
參考地址: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_3
1.涉及到的支付參數有4個
1.1,wxAppid-微信開放平台審核通過的應用APPID,開放平台地址: https://open.weixin.qq.com/
1.2,mch_id-微信支付分配的商戶號
1.3.mch_key-商戶平台設置的密鑰key(用於加密時使用) https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_3
1.4 wx_file-微信支付證書(證書和商戶ID是配套的,涉及到資金變動的接口需要證書)參考地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_3
2.請求與響應的接口數據的格式都是XML,需要簽名和驗簽
簽名方式主要有兩種:HMAC-SHA256 / MD5
微信提供了驗簽的工具:地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_20&index=1
3.JSAPI支付的交易類型
JSAPI支付的交易類型為JSAPI
4.JSAPI支付的場景信息
JSAPI支付的需要傳遞openid參數
5.商戶服務端接口返回的是提供給客戶端JS調用的參數
{\"appId\":\"xxxxxxxxx(移動端應用APPID)\",\"nonceStr\":\"xxxxxxxx(隨機字符串)\",\"packageValue\":\"Sign=WXPay\",\"partnerId\":\"xxxxxx(商戶ID)\",\"prepayId\":\"xxxxxxxxxxxx(預支付ID)\", \"sign\":\"xxxxxxxx(簽名)\",\"timeStamp\":\"xxxxxxx(時間戳)\"}