weixin-java-pay对接微信V3支付记录

https://github.com/binarywang/weixin-java-pay-demo

这个demo里, 没有v3版本的配置, 这里记录一下

v3支付, 相对之前的版本来说, 更为安全, 也相对繁琐一些, 而且请求和响应都使用了json格式的数据

1. 配置

发起支付所需的配置有三个证书文件, 在商户后台申请

apiclient_cert.p12

apiclient_key.pem

apiclient_cert.pem

完整配置

@Bean
@ConditionalOnMissingBean
public WxPayService wxService() {
    WxPayConfig payConfig = new WxPayConfig();
    payConfig.setAppId(StringUtils.trimToNull(this.properties.getAppId()));
    payConfig.setMchId(StringUtils.trimToNull(this.properties.getMchId()));
    payConfig.setKeyPath(StringUtils.trimToNull(this.properties.getKeyPath()));
    payConfig.setPrivateKeyPath(StringUtils.trimToNull(this.properties.getPrivateKeyPath()));
    payConfig.setPrivateCertPath(StringUtils.trimToNull(this.properties.getPrivateCertPath()));
    payConfig.setApiV3Key(StringUtils.trimToNull(this.properties.getApiV3Key()));

    WxPayService wxPayService = new WxPayServiceImpl();
    wxPayService.setConfig(payConfig);
    return wxPayService;
}

2. 发起支付

WxPayUnifiedOrderV3Request request = new WxPayUnifiedOrderV3Request();
WxPayUnifiedOrderV3Result.JsapiResult result =  wxService.createOrderV3(TradeTypeEnum.JSAPI, request);
System.out.println(result);

3. 回调处理

WxPayOrderNotifyV3Result result = wxService.parseOrderNotifyV3Result("notifyData", new SignatureHeader());

WxPayOrderNotifyV3Result.DecryptNotifyResult notifyResult = result.getResult();

WxPayNotifyResponse.success("成功");

SignatureHeader内的属性都可以在文档内找到获取方法

注意

支付通知http应答码为200或204才会当作正常接收,当回调处理异常时,应答的HTTP状态码应为500,或者4xx。

没什么好说的, v3支付使用json进行数据交互, 但weixin-java-pay提供的应答方法是以xml格式返回的, 可以自定义对象返回json

经验分享 程序员 微信小程序 职场和发展