微信支付-公众号支付(四)-java实现微信支付后端篇

四 Java 实现微信支付 — 后端篇


技术栈

  1. Spring boot
  2. java
  3. XML (微信在http协议中数据传输方案)
  4. MD5 签名

微信支付术语

  1. openid (OpenID是公众号一对一对应用户身份的标识)
  2. app_id (公众号id,登录微信公众号–开发–基本配置中获得;)
  3. key (收款商户后台进行配置,登录微信商户平台–账户中心–API安全-设置秘钥,设置32位key值;)
  4. mch_id (收款商家商户号;)
  5. certPath (API证书, 登录微信商户平台–账户中心-API安全-下载证书)

后端流程

服务端需要的核心操作, 总共分为以下几步:

  1. 统一下单
  2. 前端调起微信支付必要参数 (需加密)
  3. 订单结果主动通知 (回调接口)
  4. 查询订单结果
  5. 结束订单支付接口(关闭订单,支付订单关闭)

代码

微信总共支持多种语言的sdk, 在官网可以下载例子, java程序也可以引入微信支付的sdk包, 但是github上的sdk已经很久没有更新了, 最好的选择, 也是我的选择, 在官网上下载sdk项目, 将其中所有java类copy到自己的项目中.

官网sdk下载目录
链接: 商户平台首页

《微信支付-公众号支付(四)-java实现微信支付后端篇》

#### 根据微信sdk生成配置类 WXPayConfig
创建IWxPayConfig.class, 继承sdk WXPayConfig.class, 实现sdk中部分抽象方法, 读取本地证书, 加载到配置类中.


发起统一下单 AND 前端调起微信支付必要参数

回调结果处理

核心是支付订单回调时, 需校验加密签名是否匹配, 防止出现模拟成功通知

注意点

  1. 统一下单的签名和后续前端拉取微信支付的签名需要统一, 也就是都采用MD5加密, 如果2者不同, 会导致前端拉取微信支付fail, 这是一个巨大的坑, 因为这个原因调试了好久, 微信在文档里没有明确标出统一下单的签名校验方式 需要和前端拉取微信支付的签名校验保持一致.
    微信sdk里的源码需要针对这个问题调整一下, 调整如下:
    WXPay类需要修改下加密判断,在WXPay构造方法中,调整如下

结束语

做完以后, 微信支付的后端逻辑还是很清晰的, 但是在开发过程中很煎熬, 不清楚每个专业术语在微信哪里配置, 加密方式乱的很,

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注