Linux环境下 微信支付退款 读取证书路径问题

   最近公司需要搭建自己的一套支付中台服务,采用微服务模块形式进行提供服务,在进行对接微信(支付类型)时,将springboot打包(jar包形式)之后上传服务器,linux服务器会报错证书文件查找不到!!!, 继续我们查看一下微信配置的文件信息是否正确咯~。原配置文件:

public class MyConfig implements WXPayConfig{

    private byte[] certData;

    public MyConfig() throws Exception {
        String certPath = "/path/to/apiclient_cert.p12";
        File file = new File(certPath);
        InputStream certStream = new FileInputStream(file);
        this.certData = new byte[(int) file.length()];
        certStream.read(this.certData);
        certStream.close();
    }

    public String getAppID() {
        return "wx8888888888888888";
    }

    public String getMchID() {
        return "12888888";
    }

    public String getKey() {
        return "88888888888888888888888888888888";
    }

    public InputStream getCertStream() {
        ByteArrayInputStream certBis = new ByteArrayInputStream(this.certData);
        return certBis;
    }

    public int getHttpConnectTimeoutMs() {
        return 8000;
    }

    public int getHttpReadTimeoutMs() {
        return 10000;
    }
}

这个是微信SDK自带的配置文件说明,其中的参数大家可以前往微信官方文档查看即可,这里小编就不详细叙说了。附带一下微信JAVA版SDK maven配置(目前已经是最新版本,大家也可以前往maven中央仓库下载自己适合的版本):


    com.github.wxpay
    wxpay-sdk
    0.0.3

如果我们使用springboot(jar包形式)打包,那么我们需要修改一下上述配置文件,否则linux上jar形式启动应用时会报证书文件查找不到,废话不多说,我们直接上代码:

public class MyConfig implements WXPayConfig{

    private byte[] certData;

    public MyConfig() throws Exception {
        //微信默认配置形式
        /**String certPath = "/path/to/apiclient_cert.p12";
        File file = new File(certPath);
        InputStream certStream = new FileInputStream(file);
        this.certData = new byte[(int) file.length()];
        certStream.read(this.certData);
        certStream.close();*/
        
        //springboot jar包形式 注意: 这里小编的证书放在resources/static 目录下  大家根据自己的情况修改
        ClassPathResource classPathResource = new ClassPathResource("static/apiclient_cert.p12");
        InputStream certStream = classPathResource.getInputStream();
        this.certData = IOUtils.toByteArray(certStream);
        certStream.read(this.certData);
        certStream.close();
    }

    public String getAppID() {
        return "wx8888888888888888";
    }

    public String getMchID() {
        return "12888888";   //商户编号
    }

    public String getKey() {
        return "88888888888888888888888888888888";    //秘钥Key
    }

    public InputStream getCertStream() {
        ByteArrayInputStream certBis = new ByteArrayInputStream(this.certData);
        return certBis;
    }

    public int getHttpConnectTimeoutMs() {
        return 8000;
    }

    public int getHttpReadTimeoutMs() {
        return 10000;
    }
}

这样子就可以完美解决。有问题可以  留言小编  我们一起加油!!

你可能感兴趣的:(Springboot,springcloud,后端框架)