微信支付能力分类
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必须完全一样,才可以调起支付成功,否则会提示签名验证失败。