微信支付能力分類
JSAPI支付
APP支付
Native支付
小程序支付
該記錄介紹
記錄了小程序支付的JSAPI下單與小程序調起支付API的流程
前置准備
- 已經認證的微信公眾號、小程序(建議先認證公眾號,之后使用公眾號資質申請小程序)
- 已經認證的微信支付
小程序開發准備
- 獲取小程序的appid與secret
微信支付開發准備
1.商戶號獲取(mch_id)
2. 設置APIv3密鑰
在賬戶中心-API安全頁面來設置APIv3密鑰(密鑰請保管好,設置后無法查看,如果忘記了就只能修改了)
3.證書項說明
微信支付有兩個很重要的證書,分別是商戶證書和平台證書,兩個證書的區別如下,引自微信官方支付官方文檔
- “商戶證書”是指由商戶申請的,包含商戶的商戶號、公司名稱、公鑰信息的證書。
- “平台證書”是指由微信支付負責申請的,包含微信支付平台標識、公鑰信息的證書。
- 商戶在調用 API 時用自身的私鑰簽名,微信支付使用商戶證書中的公鑰來驗簽。微信支付在響應的報文中使用自身的私鑰簽名,商戶使用平台證書中的公鑰來驗簽。
簡單的來說,商戶證書是向微信支付發起請求或回復微信支付回調時使用的,平台證書是微信支付向商戶發起請求或回復商戶回調時使用的。
另外,微信支付向商戶進行請求回復與請求回調時除了密文外,還會附帶明文信息,所以如果對安全性要求不是極高的情況下,可以不使用平台證書,博主只實現了微信支付-JSAPI下單這一個接口,所以微信支付進行請求回復與請求回調的密文解碼部分,本篇文章不做說明,如果后續有對接則補充。
4. 申請API證書(商戶證書)
點擊賬戶中心-API安全-申請證書來申請API證書
根據提示下載證書工具
根據提示申請證書
之后將證書工具中生成的請求串粘貼到網頁中,即可完成API證書的生成(此時一定要保管好證書,證書只能下載一次,注意證書不要泄露給其他人)
5. 獲取平台證書與序列號
獲取方法有兩種,第一種方法為通過微信支付官方文檔提供的接口來獲取,第二種方法為通過微信支付官方提供的工具來獲取。
(不要覺得第二種手動的工具使用麻煩而使用第一種,后來我才知道平台證書5年才更新一次,T-T我在寫平台證書獲取代碼這里花了3個小時的時間才調試成功)
- 第一種方法可微信支付官方文檔,該方法對於新手極其復雜,不建議新手采用該方法,故不作敘述,需要代碼及技術支持請聯系博主。
- 第二種方法時使用官方提供的工具,詳情可訪問查看https://github.com/wechatpay-apiv3/CertificateDownloader
小程序支付程序執行流程
- 小程序獲取用戶code和要支付的金額(請根據實際項目需求來決定支付金額是由前端設置還是后端設置)
- 后端根據小程序的用戶code獲取用戶openid
- 調用JSAPI下單接口(該過程需要使用商戶證書對請求數據進行簽名)
- 小程序調起支付(該過程需要使用商戶證書對請求數據進行簽名,為了安全性簽名過程請務必在后端實現)
- 用戶支付
- 等待微信支付平台的支付結果回調
避免踩坑
經過測試發現,JSAPI下單、JSAPI調起支付API的調用過程中,所有的時間戳與簽名使用的nonceStr必須完全一樣,才可以調起支付成功,否則會提示簽名驗證失敗。