微信支付(JSAPI、小程序)开发流程记录

微信支付能力分类

JSAPI支付
APP支付
Native支付
小程序支付

该记录介绍

记录了小程序支付的JSAPI下单小程序调起支付API的流程

前置准备

  • 已经认证的微信公众号、小程序(建议先认证公众号,之后使用公众号资质申请小程序)
  • 已经认证的微信支付

小程序开发准备

  1. 获取小程序的appidsecret

微信支付开发准备

1.商户号获取(mch_id)

image

2. 设置APIv3密钥

在账户中心-API安全页面来设置APIv3密钥(密钥请保管好,设置后无法查看,如果忘记了就只能修改了)
image

3.证书项说明

微信支付有两个很重要的证书,分别是商户证书平台证书,两个证书的区别如下,引自微信官方支付官方文档

  • “商户证书”是指由商户申请的,包含商户的商户号、公司名称、公钥信息的证书。
  • “平台证书”是指由微信支付负责申请的,包含微信支付平台标识、公钥信息的证书。
  • 商户在调用 API 时用自身的私钥签名,微信支付使用商户证书中的公钥来验签。微信支付在响应的报文中使用自身的私钥签名,商户使用平台证书中的公钥来验签。

简单的来说,商户证书是向微信支付发起请求或回复微信支付回调时使用的,平台证书是微信支付向商户发起请求或回复商户回调时使用的。

另外,微信支付向商户进行请求回复与请求回调时除了密文外,还会附带明文信息,所以如果对安全性要求不是极高的情况下,可以不使用平台证书,博主只实现了微信支付-JSAPI下单这一个接口,所以微信支付进行请求回复与请求回调的密文解码部分,本篇文章不做说明,如果后续有对接则补充。

4. 申请API证书(商户证书)

点击账户中心-API安全-申请证书来申请API证书
image
根据提示下载证书工具
image
根据提示申请证书
image
之后将证书工具中生成的请求串粘贴到网页中,即可完成API证书的生成(此时一定要保管好证书,证书只能下载一次,注意证书不要泄露给其他人)

5. 获取平台证书与序列号

获取方法有两种,第一种方法为通过微信支付官方文档提供的接口来获取,第二种方法为通过微信支付官方提供的工具来获取。
(不要觉得第二种手动的工具使用麻烦而使用第一种,后来我才知道平台证书5年才更新一次,T-T我在写平台证书获取代码这里花了3个小时的时间才调试成功)

  • 第一种方法可微信支付官方文档,该方法对于新手极其复杂,不建议新手采用该方法,故不作叙述,需要代码及技术支持请联系博主。
  • 第二种方法时使用官方提供的工具,详情可访问查看https://github.com/wechatpay-apiv3/CertificateDownloader

小程序支付程序执行流程

  1. 小程序获取用户code和要支付的金额(请根据实际项目需求来决定支付金额是由前端设置还是后端设置)
  2. 后端根据小程序的用户code获取用户openid
  3. 调用JSAPI下单接口(该过程需要使用商户证书对请求数据进行签名)
  4. 小程序调起支付(该过程需要使用商户证书对请求数据进行签名,为了安全性签名过程请务必在后端实现)
  5. 用户支付
  6. 等待微信支付平台的支付结果回调

避免踩坑

经过测试发现,JSAPI下单、JSAPI调起支付API的调用过程中,所有的时间戳与签名使用的nonceStr必须完全一样,才可以调起支付成功,否则会提示签名验证失败。

posted @ 2021-10-19 16:55  张志波  阅读(1312)  评论(0编辑  收藏  举报
CSS from SivilTaram