From e7fd59e91ea7dce8a1a085421b784fad3b458832 Mon Sep 17 00:00:00 2001 From: yangconghuang Date: Tue, 11 Nov 2025 10:08:07 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20#3757=20=E5=8F=AA=E8=AE=BE=E7=BD=AEp?= =?UTF-8?q?rivateCertString=E6=88=96PrivateCertContent=E5=AF=BC=E8=87=B4ce?= =?UTF-8?q?rtSerialNo=E6=B2=A1=E6=9C=89=E7=94=9F=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../binarywang/wxpay/config/WxPayConfig.java | 4 +- .../impl/BaseWxPayServiceImplTest.java | 42 +++++++++++++++++++ 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/config/WxPayConfig.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/config/WxPayConfig.java index 43da17f04..7e2774400 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/config/WxPayConfig.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/config/WxPayConfig.java @@ -341,7 +341,7 @@ public CloseableHttpClient initApiV3HttpClient() throws WxPayException { certificate = (X509Certificate) objects[1]; this.certSerialNo = certificate.getSerialNumber().toString(16).toUpperCase(); } - if (certificate == null && StringUtils.isBlank(this.getCertSerialNo()) && StringUtils.isNotBlank(this.getPrivateCertPath())) { + if (certificate == null && StringUtils.isBlank(this.getCertSerialNo()) && (StringUtils.isNotBlank(this.getPrivateCertPath()) || StringUtils.isNotBlank(this.getPrivateCertString())) || this.getPrivateCertContent() != null) { try (InputStream certInputStream = this.loadConfigInputStream(this.getPrivateCertString(), this.getPrivateCertPath(), this.privateCertContent, "privateCertPath")) { certificate = PemUtils.loadCertificate(certInputStream); @@ -349,7 +349,7 @@ public CloseableHttpClient initApiV3HttpClient() throws WxPayException { this.certSerialNo = certificate.getSerialNumber().toString(16).toUpperCase(); } - if (this.getPublicKeyString() != null || this.getPublicKeyPath() != null || this.publicKeyContent != null) { + if (StringUtils.isNotBlank(this.getPublicKeyString()) || StringUtils.isNotBlank(this.getPublicKeyPath()) || this.publicKeyContent != null) { if (StringUtils.isBlank(this.getPublicKeyId())) { throw new WxPayException("请确保和publicKeyId配套使用"); } diff --git a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImplTest.java b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImplTest.java index 955071e10..09e928c69 100644 --- a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImplTest.java +++ b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImplTest.java @@ -33,6 +33,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.util.Calendar; @@ -976,4 +977,45 @@ public void testCreatePartnerOrderV3() throws WxPayException { WxPayUnifiedOrderV3Result.JsapiResult result = payService.createPartnerOrderV3(TradeTypeEnum.JSAPI, request); System.out.println(result); } + + @Test + public void test_certSerialNoExtractedFromPrivateCertContentOrPrivateCertString() throws Exception { + WxPayConfig wxPayConfig = new WxPayConfig(); + //服务商的参数 + wxPayConfig.setMchId("xxx"); + wxPayConfig.setAppId("xxx"); + wxPayConfig.setApiV3Key("xxx"); + wxPayConfig.setPrivateKeyContent("xxx".getBytes(StandardCharsets.UTF_8)); + wxPayConfig.setPrivateCertContent("xxx".getBytes(StandardCharsets.UTF_8) + ); + wxPayConfig.setPublicKeyId("xxx"); + wxPayConfig.setPublicKeyContent("xxx".getBytes(StandardCharsets.UTF_8)); + wxPayConfig.setAppId("xxx"); + //创建支付服务 + WxPayService wxPayService = new WxPayServiceImpl(); + wxPayService.setConfig(wxPayConfig); + + String outTradeNo = RandomUtils.getRandomStr(); + String notifyUrl = "https://api.qq.com/"; + System.out.println("outTradeNo = " + outTradeNo); + WxPayUnifiedOrderV3Request request = new WxPayUnifiedOrderV3Request(); + request.setOutTradeNo(outTradeNo); + request.setNotifyUrl(notifyUrl); + request.setDescription("test"); + + WxPayUnifiedOrderV3Request.Payer payer = new WxPayUnifiedOrderV3Request.Payer(); + payer.setOpenid("xxx"); + request.setPayer(payer); + + //构建金额信息 + WxPayUnifiedOrderV3Request.Amount amount = new WxPayUnifiedOrderV3Request.Amount(); + //设置币种信息 + amount.setCurrency(WxPayConstants.CurrencyType.CNY); + //设置金额 + amount.setTotal(BaseWxPayRequest.yuan2Fen(BigDecimal.ONE)); + request.setAmount(amount); + + wxPayService.createOrderV3(TradeTypeEnum.JSAPI, request); + } + } From c919f1540268d729b3c66387d6113013b252f814 Mon Sep 17 00:00:00 2001 From: Binary Wang Date: Wed, 12 Nov 2025 13:40:32 +0800 Subject: [PATCH 2/2] Update weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImplTest.java Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../binarywang/wxpay/service/impl/BaseWxPayServiceImplTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImplTest.java b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImplTest.java index 09e928c69..bd24f188d 100644 --- a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImplTest.java +++ b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImplTest.java @@ -990,7 +990,6 @@ public void test_certSerialNoExtractedFromPrivateCertContentOrPrivateCertString( ); wxPayConfig.setPublicKeyId("xxx"); wxPayConfig.setPublicKeyContent("xxx".getBytes(StandardCharsets.UTF_8)); - wxPayConfig.setAppId("xxx"); //创建支付服务 WxPayService wxPayService = new WxPayServiceImpl(); wxPayService.setConfig(wxPayConfig);