前言
最近两年疲于工作和应付生活,渐渐忘记了学习。看到自己的曾经写得博客,也开始没有更新的冲动。每天重复着三点一线,不知道是好是坏;本鸟由之前的Java后端开发变为前端开发,虽然感觉工作压力没有之前大了,但是工作可能在很多时候真的不是因为热爱而是因为生活真的是有很大压力。娶媳妇、买房、买车、生娃。每一件事都跟钱过不去。。。。。。本鸟还没钱买房买车,对未来深感不安;
正言
上述内容可以不用理会,现在开始正题。由于公司要开始做H5微信支付,而公司又没有这方面的经验。公司的Java后端开发工作经验不是很够,拿到这个需求,我主动提出了前后端demo级别的微信支付我独立完成。后续业务逻辑后端开发自己再进行改造。
入门
微信支付的应用场景很广泛,但是微信综合了几个支付场景
具体请参考 微信官网文档入口
业务场景参考 微信H5支付业务场景
核心流程图 微信H5支付核心流程图
准备工作
搭建微信支付需要的条件:
服务号(需要公司才能申请),备案的域名,能连接外网的服务器。
基本配置说明:
首先下载微信支付SDK,官方并没有上传SDK到Maven上面,为了安全起见从官网下载SDK并配置好。
下载地址:
https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=11_1
下载完微信支付SDK,分析一下目录结构:
上面图片中README.md文件简单说明了用法,但是里面的介绍有滞后性,比如里面介绍的配置类MyConfig,它里面介绍的是实现一个接口,但实际情况是需要继承一个WXPayConfig抽象类并实现里面的抽象方法。
从上面图片的pom.xml文件中,我们发现里面有微信支付SDK的依赖,我将必要的依赖提取出来放在我们自己项目的pom.xml文件中,代码如下:
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.3</version>
</dependency>
我们在项目中新建一个sdk文件夹,将下载好的微信支付SDK的Java文件放在其中,肯定会有报错,只需要修改一下包路径即可,操作如下图:
配置微信支付参数:
微信支付SDK里面有一个WXPayConfig类。我们在sdk文件夹下创建一个MyWXPayConfig类,继承这个WXPayConfig抽象类并实现方法。代码如下图:
package com.ruoyi.utils.wxPay;
import java.io.InputStream;
public class MyWXPayConfig extends WXPayConfig {
/**
* 获取 App ID
* @return App ID
*/
@Override
public String getAppID() {
return "----根据自己的商户进行填写---";
}
/**
* 获取 Mch ID 商户号
* @return Mch ID
*/
@Override
public String getMchID() {
return "----根据自己的商户进行填写---";
}
/**
* 获取 API 密钥
* @return API密钥
*/
@Override
public String getKey() {
return "----根据自己的商户进行填写---";
}
/**
* 获取商户证书内容
* @return 商户证书内容
*/
@Override
public InputStream getCertStream() {
return null;
}
/**
* 获取WXPayDomain, 用于多域名容灾自动切换
* @return
*/
@Override
IWXPayDomain getWXPayDomain() {
return new IWXPayDomain() {
@Override
public void report(String domain, long elapsedTimeMillis, Exception ex) {
}
@Override
public DomainInfo getDomain(WXPayConfig config) {
return new IWXPayDomain.DomainInfo(WXPayConstants.DOMAIN_API, true);
}
};
}
}
上面的代码中有三个参数需要自己根据商户进行填写 分别是appid(公众账号ID)、mch_id(商户号)、API密钥。
到这里基本的配置操作都已经完成了,可以进行支付功能的开发了。
备注
以上大部分的内容都直接参考了 SpringBoot整合微信H5支付 详解
疑问
为何人家写了,还要重复造轮子?
该博主写的博客异常漂亮,可能由于某些差异,导致结果走向跟期待值不一样,也为了初学者一站式了解该项目所以还是重复造轮子。