微信支付坑-

  • 若你使用了ScheduledUpdateCertificatesVerifier,请使用CertificatesManager替换

写这个版本 我尝试了三个不同的版本 决定把这一个最新版 0.4.2的版本分享出来

0.4.0已经替换掉0.3.0版本中的更新方式

我们需要在Config的文件配置中做一些更改   

直接上配置 

@Slf4j
@Configuration
@PropertySource("classpath:wxPay.properties") //读取配置文件
@ConfigurationProperties(prefix="wxpay") //读取wxpay节点
@Data 
public class VxPayConfig {
 
 
    // 商户号
    private String mchId;
 
    // 商户API证书序列号
    private String mchSerialNo;
 
    // 商户私钥文件
    private String privateKeyPath;
 
    // APIv3密钥
    private String apiV3Key;
 
    // APPID
    private String appid;
 
    // 微信服务器地址
    private String domain;
 
    // 接收结果通知地址
    private String notifyDomain;
    
    //
 
 
 
    //获取商户私钥文件
    public PrivateKey getPrivateKey(String filename){
 
        try {
            return PemUtil.loadPrivateKey(
                    new FileInputStream(filename)
            );
        } catch (FileNotFoundException e) {
            throw new RuntimeException("私钥文件不存在",e);
        }
    }
 
 
 
    @Bean
    public Verifier getVerifier() throws IOException, NotFoundException {
 
        log.info("加载证书管理器实例");
        //获取商户私钥
        PrivateKey getPrivateKey = getPrivateKey(privateKeyPath);
        // 获取证书管理器单例实例
        CertificatesManager certificatesManager = CertificatesManager.getInstance();
 
        // 向证书管理器增加需要自动更新平台证书的商户信息
        log.info("向证书管理器增加商户信息,并开启自动更新");
        try {
            // 该方法底层已实现同步线程更新证书
            // 详见beginScheduleUpdate()方法
            certificatesManager.putMerchant(mchId, new WechatPay2Credentials(mchId,
                    new PrivateKeySigner(mchSerialNo, getPrivateKey)), apiV3Key.getBytes(StandardCharsets.UTF_8));
        } catch (GeneralSecurityException | HttpCodeException e) {
            e.printStackTrace();
        }
 
        log.info("从证书管理器中获取验签器");
        return certificatesManager.getVerifier(mchId);
    }
 
    @Bean
    public PrivateKey getPrivateKey() throws IOException {
 
        // 加载商户私钥(privateKey:私钥字符串)
        log.info("开始加载私钥,读取内容...");
        String content = new String(Files.readAllBytes(Paths.get(privateKeyPath)),StandardCharsets.UTF_8 );
        System.out.println(content);
        return PemUtil.loadPrivateKey(new ByteArrayInputStream(content.getBytes(StandardCharsets.UTF_8)));
 
    }
 
 
 
 
    //获取http请求
    @Bean(name = "wxPayClient")
    public CloseableHttpClient getWxPayClient(Verifier verifier,PrivateKey merchantPrivateKey) {
 
        log.info("构造httpClient");
 
        WechatPayHttpClientBuilder builder = WechatPayHttpClientBuilder.create()
                .withMerchant(mchId, mchSerialNo, merchantPrivateKey)
                .withValidator(new WechatPay2Validator(verifier));
 
        // 通过WechatPayHttpClientBuilder构造的HttpClient,会自动的处理签名和验签,并进行证书自动更新
        CloseableHttpClient httpClient = builder.build();
        System.out.println(httpClient);
        log.info("构造httpClient成功");
        return httpClient;
    }
 
}
这里要注意一点 我直接将获取到的pem文件扔到了src同级别目录中 

 业务逻辑 我想需要你自己去微信的文档去看,人家提供的也很全面了

运行一下我的程序

 以上 是我自己所遇到的问题和解决方式 希望对你有帮助

对了,想要了解这个配置底层的可以看这个包的方法


————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.youkuaiyun.com/coldblacktea/article/details/123607982

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值