1.定义微信支付相关参数
wxpay.properties 文件
这个文件定义了之前我们准备的微信支付相关的参数,例如商户号、APPID、API秘钥等等
# 微信支付相关参数
# 商户号
wxpay.mch-id=1558950191
# 商户API证书序列号
wxpay.mch-serial-no=34345964330B66427E0D3D28826C4993C77E631F
# 商户私钥文件
wxpay.private-key-path=apiclient_key.pem
# APIv3密钥
wxpay.api-v3-key=UDuLFDcmy5Eb6o0nTNZdu6ek4DDh4K8B
# APPID
wxpay.appid=wx74862e0dfcf69954
# 微信服务器地址
wxpay.domain=https://api.mch.weixin.qq.com
# 接收结果通知地址
# 注意:每次重新启动ngrok,都需要根据实际情况修改这个配置
wxpay.notify-domain=https://500c-219-143-130-12.ngrok.io
将 wxpay.properties 变成 spring 的配置文件
1.File -> Project Structure
2.点击 Modules
3.我们可以看到在配置文件中并没有 wxpay.properties ,点击叶子图标(Customize Spring Boot...)自定义配置文件
4.在路径中找到 wxpay.properties 配置文件
5.添加以后可以看到 wxpay.properties 配置文件和 application.yml 的图标相同
配置 Annotation Processor
可以帮助我们生成自定义配置的元数据信息,让配置文件和Java代码之间的对应参数可以自动定位,方便开发。
<!-- 生成自定义配置的元数据信息 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
2、读取支付参数
WxPayConfig.java 文件
WxPayConfig 文件用于从配置文件中获取配置信息并保存到属性中
@ConfigurationProperties
在Spring Boot中,@ConfigurationProperties
注解被用来将配置文件中的属性绑定到一个配置类上。这使得你可以将配置属性集中在一个地方管理,并且可以很容易地通过配置文件来修改这些属性。
当你使用 @ConfigurationProperties(prefix="wxpay")
注解时,你告诉Spring Boot去查找以 wxpay
为前缀的配置属性,并将它们绑定到带有该注解的类的字段上
@PropertySource
在Spring框架中,@PropertySource
注解用于指定一个外部的配置文件,Spring容器将从这个文件中加载属性。这允许你将配置外部化,从而更容易地管理不同环境(如开发、测试和生产环境)的配置。
当你使用@PropertySource("classpath:wxpay.properties")
时,你告诉Spring框架去类路径(classpath)上寻找一个名为wxpay.properties
的文件,并从中加载配置属性。这个文件通常包含键值对,Spring 容器会将这些属性注入到 Spring 管理的 bean 中。
package com.atguigu.paymentdemo.config;
import com.wechat.pay.contrib.apache.httpclient.WechatPayHttpClientBuilder;
import com.wechat.pay.contrib.apache.httpclient.auth.*;
import com.wechat.pay.contrib.apache.httpclient.util.PemUtil;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.impl.client.CloseableHttpClient;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.nio.charset.StandardCharsets;
import java.security.PrivateKey;
@Configuration
@PropertySource("classpath:wxpay.properties") //读取配置文件
@ConfigurationProperties(prefix="wxpay") //读取wxpay节点
@Data //使用set方法将wxpay节点中的值填充到当前类的属性中
@Slf4j
public class WxPayConfig {
// 商户号
private String mchId;
// 商户API证书序列号
private String mchSerialNo;
// 商户私钥文件
private String privateKeyPath;
// APIv3密钥
private String apiV3Key;
// APPID
private String appid;
// 微信服务器地址
private String domain;
// 接收结果通知地址
private String notifyDomain;
// APIv2密钥
private String partnerKey;
}