diff --git a/src/main/java/com/gxwebsoft/shop/service/impl/ShopOrderServiceImpl.java b/src/main/java/com/gxwebsoft/shop/service/impl/ShopOrderServiceImpl.java index a4c435e..b424390 100644 --- a/src/main/java/com/gxwebsoft/shop/service/impl/ShopOrderServiceImpl.java +++ b/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 pageRel(ShopOrderParam param) { @@ -107,12 +110,20 @@ import com.gxwebsoft.common.core.service.PaymentCacheService; @Override public HashMap createWxOrder(ShopOrder order) { - // 后台微信支付配置信息 - final Payment payment = getPayment(order); - // 返回的订单数据 - final HashMap 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 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); + } } } diff --git a/src/main/resources/dev/wechat/10550/apiclient_cert.p12 b/src/main/resources/dev/wechat/10550/apiclient_cert.p12 deleted file mode 100644 index bde6b5e..0000000 Binary files a/src/main/resources/dev/wechat/10550/apiclient_cert.p12 and /dev/null differ diff --git a/src/main/resources/dev/wechat/10550/apiclient_cert.pem b/src/main/resources/dev/wechat/10550/apiclient_cert.pem deleted file mode 100644 index e3b8be8..0000000 --- a/src/main/resources/dev/wechat/10550/apiclient_cert.pem +++ /dev/null @@ -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----- diff --git a/src/main/resources/dev/wechat/10550/apiclient_key.pem b/src/main/resources/dev/wechat/10550/apiclient_key.pem deleted file mode 100644 index d3c1495..0000000 --- a/src/main/resources/dev/wechat/10550/apiclient_key.pem +++ /dev/null @@ -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----- diff --git a/src/main/resources/dev/wechat/10550/wechatpay_cert.pem b/src/main/resources/dev/wechat/10550/wechatpay_cert.pem deleted file mode 100644 index f225ce7..0000000 --- a/src/main/resources/dev/wechat/10550/wechatpay_cert.pem +++ /dev/null @@ -1,9 +0,0 @@ ------BEGIN PUBLIC KEY----- -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAty9bVrLUO+O4vVILMaDX -rmsVCxH2FcZE2zAKJuOSkxscjEcpEBIuXO0CqKbYRt/Pn61W12sj3/MnV6bm1h++ -ebdIMpwGRh9Dn3YXD7UzUF5DtQ1UT3LU2nJDLD27AtZmVSOy+sWHp8Qlz1IqdCyo -+7uIRNe5PIFDDG4dCjezYpZkuhCoeXAUmG838szabsbCN9hwuJx5YNAMBkGy5jqd -ou8NxNPCoMZtaKuhzjQUsow7IQ3brg78CnyB0pfFTDbPs1C9GLF5munvwK1prCLU -4KSbc4ZhjX88dLfClh3FTjdV0kQvlubf0Z71LqR9aMlU4WEFxE7KIeyolAGYdip4 -xwIDAQAB ------END PUBLIC KEY-----