微信扫码支付SDK身份信息初始化

144 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第20天,点击查看活动详情

每日英语:

For every minute you are angry you lose sixty seconds of happiness.

翻译:你每生气一分钟,也就失去了六十秒的幸福。 ——爱默生

SDK身份信息初始化

我们将秘钥、商户ID、证书等信息导入到程序中,修改mall-pay-service配置文件,并创建WeixinPayConfig加载配置文件中的秘钥、商户ID、证书等 信息。

bootstrap.yml添加如下配置:

#支付配置
payconfig:
  weixin:
    #应用ID
    appId: wx9f1fa58451efa9b2
    #商户ID号
    mchID: 157请自行申请561
    #秘钥
    key: QS8rrOI出于安全考虑,请自行申请TQCfI1
    #默认回调地址
    notifyUrl: http://2cw4969042.wicp.vip:50381/wx/result
    #证书存储路径
    certPath: G:/xz/shop/xz-mall/mall-service/mall-pay-service/src/main/resources/apiclient_cert.p12
  #支付安全校验(验签)
  aes:
    #AES加密秘钥
    skey: ab2cc473d3334c39
    #验签盐
    salt: XPYQZb1kMES8HNaJWW8+TDu/4JdBK4owsU9eXCXZDOI=

创建com.xz.mall.pay.config.WeixinPayConfig加载微信支付配置信息:

@Component
public class WeixinPayConfig extends WXPayConfig {
​
    //微信支付信息
    @Value("${payconfig.weixin.appId}")
    private String appId;       //应用ID
    @Value("${payconfig.weixin.mchID}")
    private String mchID;       //商户号
    @Value("${payconfig.weixin.key}")
    private String key;         //秘钥
    @Value("${payconfig.weixin.notifyUrl}")
    private String notifyUrl;   //回调地址
    @Value("${payconfig.weixin.certPath}")
    private String certPath;    //证书路径
    //证书字节数组
    private byte[] certData;
​
    @Override
    public String getAppID() {
        return this.appId;
    }
​
    @Override
    public String getMchID() {
        return this.mchID;
    }
​
    @Override
    public String getKey() {
        return this.key;
    }
​
    /***
     * 获取商户证书内容
     * @return
     */
    @Override
    public InputStream getCertStream() {
        /****
         * 加载证书
         */
        if(certData==null){
            synchronized (WeixinPayConfig.class){
                try {
                    if(certData==null) {
                        File file = new File(certPath);
                        InputStream certStream = new FileInputStream(file);
                        this.certData = new byte[(int) file.length()];
                        certStream.read(this.certData);
                        certStream.close();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        ByteArrayInputStream certBis = new ByteArrayInputStream(this.certData);
        return certBis;
    }
​
    /***
     * 获取WXPayDomain, 用于多域名容灾自动切换
     * @return
     */
    @Override
    public IWXPayDomain getWXPayDomain() {
        // 这个方法需要这样实现, 否则无法正常初始化WXPay
        IWXPayDomain iwxPayDomain = 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);
            }
        };
        return iwxPayDomain;
    }
}

此时我们可以开始使用微信支付了。

总结

本篇主要讲述了一下使用微信扫码支付前,对微信扫码支付SDK身份信息初始化时前的一些准备,比如需要修改对应的支付配置信息,修改java代码中对应加载微信支付配置信息。