package com.doumee.config.wx; import cn.binarywang.wx.miniapp.api.WxMaService; import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl; import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl; import com.doumee.config.mybatis.SpringUtils; import com.github.binarywang.wxpay.config.WxPayConfig; import com.github.binarywang.wxpay.constant.WxPayConstants; import com.github.binarywang.wxpay.service.WxPayService; import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl; import com.wechat.pay.java.core.RSAAutoCertificateConfig; import com.wechat.pay.java.core.notification.NotificationParser; import com.wechat.pay.java.service.payments.jsapi.JsapiServiceExtension; import com.wechat.pay.java.service.refund.RefundService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.ClassPathResource; import org.springframework.util.StreamUtils; import javax.annotation.PostConstruct; import java.io.InputStream; import java.nio.charset.StandardCharsets; /** * 微信小程序组件 */ @Slf4j @Configuration public class WxMiniConfig { /********微信小程序服务**********/ public static WxMaService wxMaService; /********微信小程序支付 V2**********/ public static WxPayService wxPayService; /********微信APP支付**********/ public static WxPayService wxAppPayService; /********微信支付 V3**********/ public static JsapiServiceExtension v3JsapiService; public static RefundService v3RefundService; public static NotificationParser v3NotificationParser; @Autowired private WxPayProperties wxPayProperties; public static WxMiniConfig me() { return SpringUtils.get().getBean(WxMiniConfig.class); } @PostConstruct void init() { this.load_WxMaService(); // this.load_wxPayService(); this.load_wxPayV3Service(); // this.load_wxAppPayService(); } /** * 初始化微信小程序 */ public void load_WxMaService() { WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl(); config.setAppid(StringUtils.trimToNull(wxPayProperties.getAppId())); config.setSecret(StringUtils.trimToNull(wxPayProperties.getAppSecret())); config.setMsgDataFormat("JSON"); WxMaService wxMaService = new WxMaServiceImpl(); wxMaService.setWxMaConfig(config); this.wxMaService = wxMaService; } /** * 初始化微信小程序支付 V2 */ // public void load_wxPayService() { // WxPayConfig payConfig = new WxPayConfig(); // payConfig.setTradeType(WxPayConstants.TradeType.JSAPI); // payConfig.setSignType(WxPayConstants.SignType.MD5); // payConfig.setAppId(StringUtils.trimToNull(wxPayProperties.getAppId())); // payConfig.setMchId(StringUtils.trimToNull(wxPayProperties.getMchId())); // payConfig.setMchKey(StringUtils.trimToNull(wxPayProperties.getMchKey())); // payConfig.setKeyPath(StringUtils.trimToNull(wxPayProperties.getKeyPath())); // payConfig.setNotifyUrl(StringUtils.trimToNull(wxPayProperties.getNotifyUrl())); // WxPayService wxPayService = new WxPayServiceImpl(); // wxPayService.setConfig(payConfig); // this.wxPayService = wxPayService; // } /** * 初始化微信支付 V3(JSAPI + 退款 + 回调验签) * 使用平台证书模式(自动下载和管理微信平台证书) */ public void load_wxPayV3Service() { try { // 从 classpath 读取商户私钥 ClassPathResource keyResource = new ClassPathResource(StringUtils.trimToNull(wxPayProperties.getPrivateKeyPath())); InputStream keyStream = keyResource.getInputStream(); String privateKey = StreamUtils.copyToString(keyStream, StandardCharsets.UTF_8); keyStream.close(); RSAAutoCertificateConfig config = new RSAAutoCertificateConfig.Builder() .merchantId(StringUtils.trimToNull(wxPayProperties.getMchId())) .privateKey(privateKey) .merchantSerialNumber(StringUtils.trimToNull(wxPayProperties.getSerialNumer())) .apiV3Key(StringUtils.trimToNull(wxPayProperties.getApiV3Key())) .build(); v3JsapiService = new JsapiServiceExtension.Builder().config(config).build(); v3RefundService = new RefundService.Builder().config(config).build(); v3NotificationParser = new NotificationParser(config); log.info("微信支付V3初始化成功(平台证书模式)"); } catch (Exception e) { log.error("微信支付V3初始化失败: {}", e.getMessage(), e); } } // /** // * 初始化App支付 // */ // public void load_wxAppPayService() { // WxPayConfig payConfig = new WxPayConfig(); // payConfig.setTradeType(WxPayConstants.TradeType.APP); // payConfig.setSignType(WxPayConstants.SignType.MD5); // payConfig.setAppId(""); // payConfig.setMchId(StringUtils.trimToNull(sysDictService.getSysDictValue(SysDictEnum.WX_MINI_MchId.getCode()))); // payConfig.setMchKey(StringUtils.trimToNull(sysDictService.getSysDictValue(SysDictEnum.WX_MINI_MchKey.getCode()))); // payConfig.setKeyPath(StringUtils.trimToNull(sysDictService.getSysDictValue(SysDictEnum.WX_MINI_KeyPath.getCode()))); // payConfig.setNotifyUrl(StringUtils.trimToNull(sysDictService.getSysDictValue(SysDictEnum.WX_MINI_NotifyUrl.getCode()))); // WxPayService wxPayService = new WxPayServiceImpl(); // wxPayService.setConfig(payConfig); // this.wxAppPayService = wxPayService; // } }