大改:重构项目
This commit is contained in:
@@ -27,6 +27,7 @@ import com.gxwebsoft.common.core.service.PaymentCacheService;
|
||||
import com.wechat.pay.java.core.Config;
|
||||
import com.wechat.pay.java.core.RSAConfig;
|
||||
import com.wechat.pay.java.core.RSAPublicKeyConfig;
|
||||
import com.gxwebsoft.common.core.utils.WechatCertAutoConfig;
|
||||
import com.wechat.pay.java.core.exception.ServiceException;
|
||||
import com.wechat.pay.java.service.payments.jsapi.JsapiServiceExtension;
|
||||
import com.wechat.pay.java.service.payments.jsapi.model.*;
|
||||
@@ -70,6 +71,8 @@ import com.gxwebsoft.common.core.service.PaymentCacheService;
|
||||
private CertificateLoader certificateLoader;
|
||||
@Resource
|
||||
private PaymentCacheService paymentCacheService;
|
||||
@Resource
|
||||
private WechatCertAutoConfig wechatCertAutoConfig;
|
||||
|
||||
@Override
|
||||
public PageResult<ShopOrder> pageRel(ShopOrderParam param) {
|
||||
@@ -107,12 +110,20 @@ import com.gxwebsoft.common.core.service.PaymentCacheService;
|
||||
|
||||
@Override
|
||||
public HashMap<String, String> createWxOrder(ShopOrder order) {
|
||||
// 后台微信支付配置信息
|
||||
final Payment payment = getPayment(order);
|
||||
// 返回的订单数据
|
||||
final HashMap<String, String> orderInfo = new HashMap<>();
|
||||
// 构建service
|
||||
JsapiServiceExtension service = getWxService(order);
|
||||
try {
|
||||
// 后台微信支付配置信息
|
||||
final Payment payment = getPayment(order);
|
||||
System.out.println("=== 开始创建微信支付订单 ===");
|
||||
System.out.println("订单号: " + order.getOrderNo());
|
||||
System.out.println("租户ID: " + order.getTenantId());
|
||||
System.out.println("支付配置: " + (payment != null ? "已获取" : "未获取"));
|
||||
|
||||
// 返回的订单数据
|
||||
final HashMap<String, String> orderInfo = new HashMap<>();
|
||||
// 构建service
|
||||
System.out.println("开始构建微信支付服务...");
|
||||
JsapiServiceExtension service = getWxService(order);
|
||||
System.out.println("微信支付服务构建完成");
|
||||
|
||||
// 订单金额
|
||||
BigDecimal decimal = order.getTotalPrice();
|
||||
@@ -152,6 +163,13 @@ import com.gxwebsoft.common.core.service.PaymentCacheService;
|
||||
orderInfo.put("paySign", response.getPaySign());
|
||||
orderInfo.put("orderNo", order.getOrderNo());
|
||||
return orderInfo;
|
||||
} catch (Exception e) {
|
||||
System.err.println("=== 创建微信支付订单失败 ===");
|
||||
System.err.println("错误信息: " + e.getMessage());
|
||||
System.err.println("错误类型: " + e.getClass().getName());
|
||||
e.printStackTrace();
|
||||
throw new RuntimeException("创建支付订单失败:" + e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -203,7 +221,28 @@ import com.gxwebsoft.common.core.service.PaymentCacheService;
|
||||
* @return
|
||||
*/
|
||||
public Payment getPayment(ShopOrder order) {
|
||||
return paymentCacheService.getPaymentConfig(order.getPayType(), order.getTenantId());
|
||||
Payment payment = paymentCacheService.getPaymentConfig(order.getPayType(), order.getTenantId());
|
||||
|
||||
// 添加详细的支付配置检查
|
||||
System.out.println("=== 支付配置检查 ===");
|
||||
System.out.println("订单支付类型: " + order.getPayType());
|
||||
System.out.println("租户ID: " + order.getTenantId());
|
||||
|
||||
if (payment == null) {
|
||||
throw new RuntimeException("未找到支付配置,支付类型: " + order.getPayType() + ", 租户ID: " + order.getTenantId());
|
||||
}
|
||||
|
||||
System.out.println("支付配置ID: " + payment.getId());
|
||||
System.out.println("支付方式名称: " + payment.getName());
|
||||
System.out.println("支付类型: " + payment.getType());
|
||||
System.out.println("支付代码: " + payment.getCode());
|
||||
System.out.println("应用ID: " + payment.getAppId());
|
||||
System.out.println("商户号: " + payment.getMchId());
|
||||
System.out.println("API密钥: " + (payment.getApiKey() != null ? "已配置(长度:" + payment.getApiKey().length() + ")" : "未配置"));
|
||||
System.out.println("商户证书序列号: " + payment.getMerchantSerialNumber());
|
||||
System.out.println("状态: " + payment.getStatus());
|
||||
|
||||
return payment;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -212,32 +251,32 @@ import com.gxwebsoft.common.core.service.PaymentCacheService;
|
||||
* @return
|
||||
*/
|
||||
public JsapiServiceExtension getWxService(ShopOrder order) {
|
||||
final Payment payment = getPayment(order);
|
||||
String privateKey;
|
||||
String apiclientCert;
|
||||
String pubKey = null;
|
||||
try {
|
||||
final Payment payment = getPayment(order);
|
||||
String privateKey;
|
||||
String apiclientCert = null;
|
||||
String pubKey = null;
|
||||
|
||||
// 开发环境配置 - 使用证书加载器
|
||||
// 开发环境配置 - 使用自动证书配置
|
||||
if (active.equals("dev")) {
|
||||
// 构建包含租户号的证书路径: dev/wechat/{tenantId}/
|
||||
String tenantCertPath = "dev/wechat/" + order.getTenantId();
|
||||
String privateKeyPath = tenantCertPath + "/" + certConfig.getWechatPay().getDev().getPrivateKeyFile();
|
||||
String merchantCertPath = tenantCertPath + "/" + certConfig.getWechatPay().getDev().getApiclientCertFile();
|
||||
String wechatpayCertPath = tenantCertPath + "/" + certConfig.getWechatPay().getDev().getWechatpayCertFile();
|
||||
|
||||
System.out.println("开发环境证书路径 - 租户ID: " + order.getTenantId());
|
||||
System.out.println("开发环境证书路径 - 私钥: " + privateKeyPath);
|
||||
System.out.println("开发环境证书路径 - 商户证书: " + merchantCertPath);
|
||||
System.out.println("开发环境证书路径 - 微信支付平台证书: " + wechatpayCertPath);
|
||||
System.out.println("支付配置信息 - 商户号: " + payment.getMchId() +
|
||||
", 序列号: " + payment.getMerchantSerialNumber() +
|
||||
", API密钥: " + (payment.getApiKey() != null ? "已配置" : "未配置"));
|
||||
System.out.println("=== 支付配置详细信息 ===");
|
||||
System.out.println("商户号: " + payment.getMchId());
|
||||
System.out.println("序列号: " + payment.getMerchantSerialNumber());
|
||||
System.out.println("API密钥: " + (payment.getApiKey() != null ? "已配置(长度:" + payment.getApiKey().length() + ")" : "未配置"));
|
||||
System.out.println("应用ID: " + payment.getAppId());
|
||||
System.out.println("支付类型: " + payment.getType());
|
||||
System.out.println("支付代码: " + payment.getCode());
|
||||
|
||||
privateKey = certificateLoader.loadCertificatePath(privateKeyPath);
|
||||
apiclientCert = certificateLoader.loadCertificatePath(wechatpayCertPath);
|
||||
|
||||
System.out.println("证书加载完成 - 私钥文件: " + privateKey);
|
||||
System.out.println("证书加载完成 - 微信支付平台证书文件: " + apiclientCert);
|
||||
System.out.println("使用自动证书配置,无需手动加载微信支付平台证书");
|
||||
} else {
|
||||
// 生产环境配置 - 从容器证书目录加载,包含租户号
|
||||
final String certRootPath = certConfig.getCertRootPath(); // /www/wwwroot/file.ws
|
||||
@@ -256,28 +295,62 @@ import com.gxwebsoft.common.core.service.PaymentCacheService;
|
||||
}
|
||||
}
|
||||
|
||||
// 兼容公钥
|
||||
// 构建微信支付配置
|
||||
Config config;
|
||||
if (payment.getPubKey() != null && !payment.getPubKey().isEmpty()) {
|
||||
config = new RSAPublicKeyConfig.Builder()
|
||||
.merchantId(payment.getMchId())
|
||||
.privateKeyFromPath(privateKey)
|
||||
.publicKeyFromPath(pubKey)
|
||||
.publicKeyId(payment.getPubKeyId())
|
||||
.merchantSerialNumber(payment.getMerchantSerialNumber())
|
||||
.apiV3Key(payment.getApiKey())
|
||||
.build();
|
||||
if (active.equals("dev")) {
|
||||
// 开发环境使用自动证书配置
|
||||
// 检查数据库配置是否完整
|
||||
if (payment.getMchId() == null || payment.getMchId().trim().isEmpty()) {
|
||||
throw new RuntimeException("数据库中商户号(mchId)未配置");
|
||||
}
|
||||
if (payment.getMerchantSerialNumber() == null || payment.getMerchantSerialNumber().trim().isEmpty()) {
|
||||
throw new RuntimeException("数据库中商户证书序列号(merchantSerialNumber)未配置");
|
||||
}
|
||||
if (payment.getApiKey() == null || payment.getApiKey().trim().isEmpty()) {
|
||||
throw new RuntimeException("数据库中API密钥(apiKey)未配置");
|
||||
}
|
||||
|
||||
System.out.println("=== 使用数据库支付配置 ===");
|
||||
System.out.println("商户号: " + payment.getMchId());
|
||||
System.out.println("序列号: " + payment.getMerchantSerialNumber());
|
||||
System.out.println("API密钥: 已配置(长度:" + payment.getApiKey().length() + ")");
|
||||
|
||||
config = wechatCertAutoConfig.createAutoConfig(
|
||||
payment.getMchId(),
|
||||
privateKey,
|
||||
payment.getMerchantSerialNumber(),
|
||||
payment.getApiKey()
|
||||
);
|
||||
} else {
|
||||
config = new RSAConfig.Builder()
|
||||
.merchantId(payment.getMchId())
|
||||
.privateKeyFromPath(privateKey)
|
||||
.merchantSerialNumber(payment.getMerchantSerialNumber())
|
||||
.wechatPayCertificatesFromPath(apiclientCert)
|
||||
.build();
|
||||
// 生产环境兼容公钥配置
|
||||
if (payment.getPubKey() != null && !payment.getPubKey().isEmpty()) {
|
||||
config = new RSAPublicKeyConfig.Builder()
|
||||
.merchantId(payment.getMchId())
|
||||
.privateKeyFromPath(privateKey)
|
||||
.publicKeyFromPath(pubKey)
|
||||
.publicKeyId(payment.getPubKeyId())
|
||||
.merchantSerialNumber(payment.getMerchantSerialNumber())
|
||||
.apiV3Key(payment.getApiKey())
|
||||
.build();
|
||||
} else {
|
||||
config = new RSAConfig.Builder()
|
||||
.merchantId(payment.getMchId())
|
||||
.privateKeyFromPath(privateKey)
|
||||
.merchantSerialNumber(payment.getMerchantSerialNumber())
|
||||
.wechatPayCertificatesFromPath(apiclientCert)
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
||||
// 构建service
|
||||
return new JsapiServiceExtension.Builder().config(config).build();
|
||||
} catch (Exception e) {
|
||||
System.err.println("=== 构建微信支付服务失败 ===");
|
||||
System.err.println("错误信息: " + e.getMessage());
|
||||
System.err.println("错误类型: " + e.getClass().getName());
|
||||
e.printStackTrace();
|
||||
throw new RuntimeException("构建微信支付服务失败:" + e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user