微信支付功能流程简单记录

184 阅读3分钟

@TOC

应用场景

1,线下支付 2.公众号支付 3,微信小程序 4,pc网站 5,App的微信支付 6,H5的支付 选择不同支付场景,对应不同的API的使用。

付款码JSAPINativeH5APP
线下场所
公众号
小程序
PC网站
移动端网站
第三方APP

微信小程序支付功能限制

在IOS端不能用于虚拟支付(充会员,购买音/视频)

微信小程序支付开发准备

准备流程

需要注册账号

个人的是不管用的

  • 微信小程序账号(mp.wexin.qq.com) (企业身份) 认证——>获取appid——>生成secret(密钥)——> 开通支付——> 关联商户号
  • 微信商户平台账号(pay.weixin.qq.com) (企业身份) 认证——> 获取商户号(mch_id)——> 设置商户API密钥(mck_key)32位(证书)——> APPID授权 ——>配置支付接口(域名—>外网) 商户密钥自己设置(32位不能有特殊符号) 支付完成会收到微信官网发来的通知,要保证域名(外网可访问的)接受通知,在配置接口配置

微信小程序支付流程

  1. 用户下单点击支付
  2. 发启请求到后端服务器
  3. 后台商户服务器发送给微信后台一个登录操作
  4. 后台服务器就收微信后台返回的 ==Openid==
  5. 使用 ==Openid== 在商户后台生成一个商户订单
    1. 支付类型
    2. 金额
    3. 我是谁(openid)
    4. 商户
  6. 上述为基本订单参数,微信支付的参数采用为XML格式,所以要转为XML格式(加密,第一次签名)
  7. 将XML格式的商户订单发送给微信后台,校验参数
  8. 微信后台生成订单后会返回一个prepay_id给商户后台(也是要加密,第二次签名)
  9. 用户端接受生成的订单,然后调用WX.pay的api(调用后的操作微信回去做了)
  10. 支付成功后,微信后台回去修改订单状态,会修改为success
  11. 并且商户后台服务器要接受微信后台传递过来的支付情况和结果
  12. 获取success结果的订单后展示就可以做了发送给用户

商户后台逻辑(java)

这里使用的是Spring的项目创建工具
登录功能

后台服务器发送给微信后台服务器的是一个http请求,这里的话要用java 需要依赖httpclient

  • 定义常量类,包含小程序appid/secret和商户mch_id和mch_key
public class WechatConstant {
    public final static String MCH_ID = "test";
    public final static String MCH_KEY = "自己设置的key";
    public final static String APPID = "test";
    public final static String SECRET = "test";
}
  • 在pom.xml引入httpclient的依赖
<dependency>
	<groupId>org.apache.httpcomponents/groupId>
	<artifactId>httpclient</artifactId>
	<version>4.5.3</version>
</dependency>
  • 创建基于httpclient的http请求工具类HttpRequestUtils
  • 小程序端通过wx.login获取一个code
  • 后端请求微信小程序登录API,获取openid
  • 接受结果并通知微信收到结果 商户后台就收到结果时,要告知微信,否则微信会按一定的时间顺序发送多次通知。
官方支付SDK

微信提供给我们的一些方法 下载链接 pay.weixin.qq.com/wiki/doc/ap… 下载完后我们会得到一份代码

大概目录简介
IWXPayDomain 动态域名的切换
WXPay封装 主要的类 它封装了我们所有的主要方法包括(加密签名)
WXPayConfig 是一个抽象类,配置一些默认值
WXPayConstants 一些相关的常量 (域名等)
WXPayReport 打印一些信息
WXPayRequest 封装http的工具类
WXPayUtil	封装了一些参数的转换mpa,和生成
WXPayXmlUtil	wxpayxml的相关