Browse Source

大改:重构项目

main
科技小王子 4 weeks ago
parent
commit
0c027252f0
  1. 147
      src/main/java/com/gxwebsoft/shop/service/impl/ShopOrderServiceImpl.java
  2. BIN
      src/main/resources/dev/wechat/10550/apiclient_cert.p12
  3. 25
      src/main/resources/dev/wechat/10550/apiclient_cert.pem
  4. 28
      src/main/resources/dev/wechat/10550/apiclient_key.pem
  5. 9
      src/main/resources/dev/wechat/10550/wechatpay_cert.pem

147
src/main/java/com/gxwebsoft/shop/service/impl/ShopOrderServiceImpl.java

@ -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);
}
}
}

BIN
src/main/resources/dev/wechat/10550/apiclient_cert.p12

Binary file not shown.

25
src/main/resources/dev/wechat/10550/apiclient_cert.pem

@ -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-----

28
src/main/resources/dev/wechat/10550/apiclient_key.pem

@ -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-----

9
src/main/resources/dev/wechat/10550/wechatpay_cert.pem

@ -1,9 +0,0 @@
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAty9bVrLUO+O4vVILMaDX
rmsVCxH2FcZE2zAKJuOSkxscjEcpEBIuXO0CqKbYRt/Pn61W12sj3/MnV6bm1h++
ebdIMpwGRh9Dn3YXD7UzUF5DtQ1UT3LU2nJDLD27AtZmVSOy+sWHp8Qlz1IqdCyo
+7uIRNe5PIFDDG4dCjezYpZkuhCoeXAUmG838szabsbCN9hwuJx5YNAMBkGy5jqd
ou8NxNPCoMZtaKuhzjQUsow7IQ3brg78CnyB0pfFTDbPs1C9GLF5munvwK1prCLU
4KSbc4ZhjX88dLfClh3FTjdV0kQvlubf0Z71LqR9aMlU4WEFxE7KIeyolAGYdip4
xwIDAQAB
-----END PUBLIC KEY-----
Loading…
Cancel
Save