前言
APP支持微信支付遇到的二三事。
一、准备工作
到微信开放平台提交APP,一系列操作(微信开放平台获取应用AppID及AppSecret),创建应用,等待审批,审批通过后获取到AppID。进入应用中开通微信支付。
到微信商户平台注册成为商户,并在【API安全】设置密钥,API v3的也要设置秘钥,具体流程网上也有,这里就不复述了。下载证书文件解压后得到 apiclient_cert.p12,apiclient_cert.pem,apiclient_key.pem(私钥)。将文件在本地,后续要生成平台证书需要用,这个后续会说。
二、配置文件
pom.xml引入依赖
<ijapy.version>2.7.4</ijapy.version>
<dependency>
<groupId>com.github.javen205</groupId>
<artifactId>IJPay-WxPay</artifactId>
<version>${ijapy.version}</version>
</dependency>
application.yml
v3:
#由微信生成的应用ID
appId:
#商户号
mchId:
#api秘钥
apiKey:
#apiv3秘钥
apiKey3:
#秘钥 这里需要用绝对路径
keyPath: D://cert//apiclient_key.pem
#CA证书 格式.pem 这里需要用绝对路径
certPath: D://cert//apiclient_cert.pem
#CA证书 格式.12这里需要用绝对路径
certP12Path: D://cert//apiclient_cert.p12
#平台证书 格式.pem 这里需要用绝对路径
platformCertPath: D://cert//platformCert.pem
# 支付回调地址
domain:
二、Java代码
WxPayV3Bean.java 需要get和set
@Component
@ConfigurationProperties(prefix = "v3")
public class WxPayV3Bean {
private String appId;
private String keyPath;
private String certPath;
private String certP12Path;
private String platformCertPath;
private String mchId;
private String apiKey;
private String apiKey3;
private String domain;
...
}
WxPayV3Controller.java
@Controller
@RequestMapping("v3")
@Api(tags = "微信支付相关接口")
public class WxPayV3Controller{
private final Logger log = LoggerFactory.getLogger(this.getClass());
@Autowired
private WxPayV3Bean wxPayV3Bean;
private String serialNo;
/**
* 获取证书序列号
* @return
*/
private String getSerialNumber() {
if (StrUtil.isEmpty(serialNo)) {
// 获取证书序列号
X509Certificate certificate = PayKit.getCertificate(FileUtil.getInputStream(wxPayV3Bean.getCertPath()));
serialNo = certificate.getSerialNumber().toString(16).toUpperCase();
}
return serialNo;
}
/**
* 该接口是生成平台证书,根据配置配件中所填地址保存。后续证书都需要上传到服务器上。
*/
@RequestMapping("/get")
@ResponseBody
public String v3Get() {
// 获取平台证书列表
try {
IJPayHttpResponse response = WxPayApi.v3(
RequestMethod.GET,
WxDomain.CHINA.toString(),
WxApiType.GET_CERTIFICATES.toString(),
wxPayV3Bean.getMchId(),
getSerialNumber(),