|
|
@@ -3,6 +3,7 @@ package org.dromara.main.config;
|
|
|
import cn.hutool.crypto.PemUtil;
|
|
|
import com.wechat.pay.java.core.Config;
|
|
|
import com.wechat.pay.java.core.RSAAutoCertificateConfig;
|
|
|
+import com.wechat.pay.java.core.RSAPublicKeyConfig;
|
|
|
import com.wechat.pay.java.service.payments.jsapi.JsapiService;
|
|
|
import com.wechat.pay.java.service.payments.jsapi.model.Amount;
|
|
|
import com.wechat.pay.java.service.payments.jsapi.model.Payer;
|
|
|
@@ -134,12 +135,32 @@ public class WxPayConfig {
|
|
|
}
|
|
|
|
|
|
// 配置微信支付
|
|
|
- Config config = new RSAAutoCertificateConfig.Builder()
|
|
|
- .merchantId(mchId)
|
|
|
- .privateKey(privateKey)
|
|
|
- .merchantSerialNumber(certSerialNo)
|
|
|
- .apiV3Key(apiV3Key)
|
|
|
- .build();
|
|
|
+ Config config;
|
|
|
+ PaymentConfig dbConfigForInit = null;
|
|
|
+ if (paymentConfigService != null) {
|
|
|
+ dbConfigForInit = paymentConfigService.getEnabledWechatConfig();
|
|
|
+ }
|
|
|
+
|
|
|
+ if (dbConfigForInit != null && StringUtils.isNotBlank(dbConfigForInit.getPublicKeyId())
|
|
|
+ && StringUtils.isNotBlank(dbConfigForInit.getPublicKey())) {
|
|
|
+ log.info("检测到微信支付公钥配置,使用 RSAPublicKeyConfig 初始化");
|
|
|
+ config = new RSAPublicKeyConfig.Builder()
|
|
|
+ .merchantId(mchId)
|
|
|
+ .privateKey(privateKey)
|
|
|
+ .merchantSerialNumber(certSerialNo)
|
|
|
+ .publicKeyId(dbConfigForInit.getPublicKeyId())
|
|
|
+ .publicKey(dbConfigForInit.getPublicKey())
|
|
|
+ .apiV3Key(apiV3Key)
|
|
|
+ .build();
|
|
|
+ } else {
|
|
|
+ log.info("未检测到微信支付公钥配置,使用 RSAAutoCertificateConfig 初始化(自动下载平台证书)");
|
|
|
+ config = new RSAAutoCertificateConfig.Builder()
|
|
|
+ .merchantId(mchId)
|
|
|
+ .privateKey(privateKey)
|
|
|
+ .merchantSerialNumber(certSerialNo)
|
|
|
+ .apiV3Key(apiV3Key)
|
|
|
+ .build();
|
|
|
+ }
|
|
|
|
|
|
// 初始化服务
|
|
|
jsapiService = new JsapiService.Builder().config(config).build();
|
|
|
@@ -180,12 +201,26 @@ public class WxPayConfig {
|
|
|
}
|
|
|
|
|
|
// 动态构建微信支付服务(SDK 直接接收 PEM 字符串)
|
|
|
- Config config = new RSAAutoCertificateConfig.Builder()
|
|
|
- .merchantId(dbMchId)
|
|
|
- .privateKey(pemContent)
|
|
|
- .merchantSerialNumber(dbSerialNo)
|
|
|
- .apiV3Key(dbApiV3Key)
|
|
|
- .build();
|
|
|
+ Config config;
|
|
|
+ if (StringUtils.isNotBlank(dbConfig.getPublicKeyId()) && StringUtils.isNotBlank(dbConfig.getPublicKey())) {
|
|
|
+ log.info("微信支付预下单 - 使用微信支付公钥模式");
|
|
|
+ config = new RSAPublicKeyConfig.Builder()
|
|
|
+ .merchantId(dbMchId)
|
|
|
+ .privateKey(pemContent)
|
|
|
+ .merchantSerialNumber(dbSerialNo)
|
|
|
+ .publicKeyId(dbConfig.getPublicKeyId())
|
|
|
+ .publicKey(dbConfig.getPublicKey())
|
|
|
+ .apiV3Key(dbApiV3Key)
|
|
|
+ .build();
|
|
|
+ } else {
|
|
|
+ log.info("微信支付预下单 - 使用自动下载平台证书模式");
|
|
|
+ config = new RSAAutoCertificateConfig.Builder()
|
|
|
+ .merchantId(dbMchId)
|
|
|
+ .privateKey(pemContent)
|
|
|
+ .merchantSerialNumber(dbSerialNo)
|
|
|
+ .apiV3Key(dbApiV3Key)
|
|
|
+ .build();
|
|
|
+ }
|
|
|
JsapiService currentJsapiService = new JsapiService.Builder().config(config).build();
|
|
|
|
|
|
// 解析私钥对象(用于签名),兼容 PKCS#8 和 PKCS#1 格式
|