大改:重构项目
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) {
|
||||
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) {
|
||||
try {
|
||||
final Payment payment = getPayment(order);
|
||||
String privateKey;
|
||||
String apiclientCert;
|
||||
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,8 +295,34 @@ import com.gxwebsoft.common.core.service.PaymentCacheService;
|
||||
}
|
||||
}
|
||||
|
||||
// 兼容公钥
|
||||
// 构建微信支付配置
|
||||
Config config;
|
||||
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 {
|
||||
// 生产环境兼容公钥配置
|
||||
if (payment.getPubKey() != null && !payment.getPubKey().isEmpty()) {
|
||||
config = new RSAPublicKeyConfig.Builder()
|
||||
.merchantId(payment.getMchId())
|
||||
@@ -275,9 +340,17 @@ import com.gxwebsoft.common.core.service.PaymentCacheService;
|
||||
.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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Binary file not shown.
@@ -1,25 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIEQDCCAyigAwIBAgIUK5M/fDUBShw2NkJiPkpiNks0xOswDQYJKoZIhvcNAQEL
|
||||
BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
|
||||
FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
|
||||
Q0EwHhcNMjUwNzI2MTI1MjMyWhcNMzAwNzI1MTI1MjMyWjCBmTETMBEGA1UEAwwK
|
||||
MTcyMzMyMTMzODEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMUUwQwYDVQQL
|
||||
DDzmnZzlsJTkvK/nibnokpnlj6Tml4/oh6rmsrvljr/ml7bph4zlhpzkuJrnp5Hm
|
||||
ioDmnInpmZDlhazlj7gxCzAJBgNVBAYTAkNOMREwDwYDVQQHDAhTaGVuWmhlbjCC
|
||||
ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANO4sq8tWbg5Zg6ioIltG8ME
|
||||
8D1V3w4SXcsqBm5ilyCBVflQTHLqTUIKtU9BeR7+SQpeArDDFEVaMfn4ZuHlHPkY
|
||||
Eic7YvuHMxH82IBAt9Ryz1m9ULTvae9Z3JGWEhIPiG/FmXjrak4LUlPoHDi22pVy
|
||||
XLallAacP/1O8UKFg3KaGNi5/ZrTgoDr/hHkdW1CR12PlqxAV3fSShqAhwEemHav
|
||||
msRptybIJND7K97XA3UPBxP84f2FuHwlj0c1sCqwI/C4R4hDZI7ShG+BEnNcUuDD
|
||||
plk3qjj3igHUX6KfZZ5V6/MWUw02inV+SH72dDKdhItLFdZlT8bpvxjjb9UYr4MC
|
||||
AwEAAaOBuTCBtjAJBgNVHRMEAjAAMAsGA1UdDwQEAwID+DCBmwYDVR0fBIGTMIGQ
|
||||
MIGNoIGKoIGHhoGEaHR0cDovL2V2Y2EuaXRydXMuY29tLmNuL3B1YmxpYy9pdHJ1
|
||||
c2NybD9DQT0xQkQ0MjIwRTUwREJDMDRCMDZBRDM5NzU0OTg0NkMwMUMzRThFQkQy
|
||||
JnNnPUhBQ0M0NzFCNjU0MjJFMTJCMjdBOUQzM0E4N0FEMUNERjU5MjZFMTQwMzcx
|
||||
MA0GCSqGSIb3DQEBCwUAA4IBAQAzIMqiMPT8gsJo3eEkppJPwOcA8SrPxrSJ0qV4
|
||||
/kZlu1ceClIy2aOPXDjf/LjB0I4YabU7/J8pLnXbKPKe2fSG1AycjrLEsZTOJ51M
|
||||
Yahvj6sRJoC5aa+xQOj17VAVqySEg0JyK/5k6kvAulPO1dG6/YGoycAdDflJOjyd
|
||||
mIHWQzlEJb5+LWQFCwskMTWy3CUF9Edw7jhgJwkl24CztocGrJ+AfJzoBTkfZmNO
|
||||
TxD5gVSK00B1r7+ipS+iLXxWeHCpaRsG3PSsByWDA6pphlwr5IMghqne465gavWi
|
||||
muwrpaGPdVi6+vz/QFyMelj4GT8g77VGVRCOa8DUvu0QxjTk
|
||||
-----END CERTIFICATE-----
|
||||
@@ -1,28 +0,0 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDTuLKvLVm4OWYO
|
||||
oqCJbRvDBPA9Vd8OEl3LKgZuYpcggVX5UExy6k1CCrVPQXke/kkKXgKwwxRFWjH5
|
||||
+Gbh5Rz5GBInO2L7hzMR/NiAQLfUcs9ZvVC072nvWdyRlhISD4hvxZl462pOC1JT
|
||||
6Bw4ttqVcly2pZQGnD/9TvFChYNymhjYuf2a04KA6/4R5HVtQkddj5asQFd30koa
|
||||
gIcBHph2r5rEabcmyCTQ+yve1wN1DwcT/OH9hbh8JY9HNbAqsCPwuEeIQ2SO0oRv
|
||||
gRJzXFLgw6ZZN6o494oB1F+in2WeVevzFlMNNop1fkh+9nQynYSLSxXWZU/G6b8Y
|
||||
42/VGK+DAgMBAAECggEAIgBuid2RpBlrv3v0pj1kkPxRDLimut7OO1uDbuTcenbq
|
||||
9MAllurz/2Ay4AiWyBh0aHrSmcqqjby/e/KdqzedYI+yEqTh75014XSm3GoIW9EY
|
||||
ZcQWmwg8DhlzZ9ofCtF9yt2EGTxNdT0yOpFzPtR25DtakmajEDC1whuUeWdxxcyY
|
||||
2fDnIDeyaYfWSD0MWBYCa3+8TcvM/gCYzamr/Tfj59VwsznPNr5ehkQdCCRWVMAr
|
||||
gg+h6ZOta8fSPwY11T6B743f5uyUUatKH90Yvg8OgbNqoqWyuPSoXM+VF0YOQk2N
|
||||
0Q0gKnQ4ReDPFPBDXLfzQ4Q7g+N+S2u12r1u6z/E6QKBgQDsAvEO4l22pV6pltX9
|
||||
DDu6qyjPrRE7wadahFDWE7Rm3ENp69Ha1DqaNMYzGzSjcVZX0eoXsBw/cfyhjlML
|
||||
vxw72SRS4XdZSJ+pfrtLw8n1XcuW8xOupVD0s9oLLB2dBXcJeytCM5UITZZHbJei
|
||||
Y90Rlg88Ud7evO9kaENIouYc/QKBgQDlpx1t2qmjQcaXS1Ohe09ovCzxIr3jv8LQ
|
||||
TQkM3wS9RdfOqX3MynnCopBlEYgxJFORQx2pzT1TmGtg5UOGP6Reck64oI8C+Vjt
|
||||
AkFlODk1JCjeSgoR1zw1+KEwOZ9x2jswC1E3oZsFU+FdbrdyBiCyHRAXfWX3QW8y
|
||||
CQIu6gnmfwKBgEALLE7Vroh5p45tl/Pq9epZt+FjHWIR0tAFR8pP3oxrCQAdNf0j
|
||||
yiM+XupPX6FaiAucsuFqsL+mtt9AN9jgK1EyQ2EaPcDErE7aTQjqQEuNAEod/CFQ
|
||||
Sv+cLncJqZ+KdBrmiX6VcMOoCjeniB5Q6xRym//KV6gprOyaPmffjIIhAoGAc1qQ
|
||||
7rgyE34bma1NkcRVq98xl+ICjd6ppWW8kQmI4OWvM/Bw7ygZJwnvC8VVqpF7pHCY
|
||||
+szL7CyYazBdzZY0Ivi50AVeMHk9ELfcT1KBcc769EUub620YcvEc2vOSir7JfPZ
|
||||
VN9I9dEfV4YggRbQ34a3qYTkbeEhUHmz7grC9FMCgYBOanMGgmxLyRkrJdFvSgr5
|
||||
cBFeUxyr2jqgNrNbE77d5yB1lbgtWKQuokszSaxdnxGnsANSYdeF1FVI9zhcaqJf
|
||||
xB2xOMesrNksZ4C+fKkSgmeofXi+D5aWYIZVuj73KInzJsvpci7z8qLK6/RjZsyF
|
||||
TomCc7Iv0ufa1OirExFaNA==
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -1,9 +0,0 @@
|
||||
-----BEGIN PUBLIC KEY-----
|
||||
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAty9bVrLUO+O4vVILMaDX
|
||||
rmsVCxH2FcZE2zAKJuOSkxscjEcpEBIuXO0CqKbYRt/Pn61W12sj3/MnV6bm1h++
|
||||
ebdIMpwGRh9Dn3YXD7UzUF5DtQ1UT3LU2nJDLD27AtZmVSOy+sWHp8Qlz1IqdCyo
|
||||
+7uIRNe5PIFDDG4dCjezYpZkuhCoeXAUmG838szabsbCN9hwuJx5YNAMBkGy5jqd
|
||||
ou8NxNPCoMZtaKuhzjQUsow7IQ3brg78CnyB0pfFTDbPs1C9GLF5munvwK1prCLU
|
||||
4KSbc4ZhjX88dLfClh3FTjdV0kQvlubf0Z71LqR9aMlU4WEFxE7KIeyolAGYdip4
|
||||
xwIDAQAB
|
||||
-----END PUBLIC KEY-----
|
||||
Reference in New Issue
Block a user