Skip to content

Commit fbb8125

Browse files
authored
定时更新平台证书支持多商户 (#98)
* 增加github action,在pr时增加待办 * 自动更新平台证书支持多商户
1 parent 682bde3 commit fbb8125

File tree

12 files changed

+422
-288
lines changed

12 files changed

+422
-288
lines changed

.github/workflows/comment_on_pr.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@ on:
44
pull_request:
55

66
jobs:
7-
87
# pr时自动创建待完成任务
98
comment-on-pr:
109
runs-on: ubuntu-latest
10+
permissions:
11+
pull-requests: write
1112
steps:
13+
- uses: actions/checkout@v2
1214
- name: comment PR
1315
uses: unsplash/comment-on-pr@v1.3.0
1416
env:

README.md

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,11 @@
88

99
## 项目状态
1010

11-
当前版本`0.3.0`为测试版本。请商户的专业技术人员在使用时注意系统和软件的正确性和兼容性,以及带来的风险。
11+
当前版本`0.4.0`为测试版本。请商户的专业技术人员在使用时注意系统和软件的正确性和兼容性,以及带来的风险。
1212

1313
## 升级指引
1414

15-
版本`0.3.0`提供了更可靠的[定时更新平台证书功能](#定时更新平台证书功能)。若你使用了自动更新证书功能,推荐升级并使用新的`ScheduledUpdateCertificatesVerifier`替换`AutoUpdateCertificatesVerifier`
16-
17-
注:`Verifier`接口新增了`getLatestCertificate()`方法。若你通过实现`Verifier`接口自定义了验签器,升级后需实现该方法。
15+
若你使用的版本为`0.3.0`,升级前请参考[升级指南](UPGRADING.md)
1816

1917
## 环境要求
2018

@@ -184,16 +182,19 @@ WechatPayHttpClientBuilder builder = WechatPayHttpClientBuilder.create()
184182

185183
## 定时更新平台证书功能
186184

187-
版本>=`0.3.0`可使用 ScheduledUpdateCertificatesVerifier 类替代默认的验签器。它会定时下载和更新商户对应的[微信支付平台证书](https://wechatpay-api.gitbook.io/wechatpay-api-v3/ren-zheng/zheng-shu#ping-tai-zheng-shu)默认为1小时)。
185+
版本>=`0.4.0`可使用 CertificatesManager.getVerifier(mchId) 得到的验签器替代默认的验签器。它会定时下载和更新商户对应的[微信支付平台证书](https://wechatpay-api.gitbook.io/wechatpay-api-v3/ren-zheng/zheng-shu#ping-tai-zheng-shu)默认下载间隔为UPDATE_INTERVAL_MINUTE)。
188186

189187
示例代码:
190-
191188
```java
192-
// 使用定时更新的签名验证器,不需要传入证书
193-
verifier = new ScheduledUpdateCertificatesVerifier(
194-
new WechatPay2Credentials(merchantId, new PrivateKeySigner(merchantSerialNumber, merchantPrivateKey)),
195-
apiV3Key.getBytes(StandardCharsets.UTF_8));
196-
189+
// 获取证书管理器实例
190+
certificatesManager = CertificatesManager.getInstance();
191+
// 向证书管理器增加需要自动更新平台证书的商户信息
192+
certificatesManager.putMerchant(mchId, new WechatPay2Credentials(mchId,
193+
new PrivateKeySigner(mchSerialNo, merchantPrivateKey)), apiV3Key.getBytes(StandardCharsets.UTF_8));
194+
// ... 若有多个商户号,可继续调用putMerchant添加商户信息
195+
196+
// 从证书管理器中获取verifier
197+
verifier = certificatesManager.getVerifier(mchId);
197198
WechatPayHttpClientBuilder builder = WechatPayHttpClientBuilder.create()
198199
.withMerchant(merchantId, merchantSerialNumber, merchantPrivateKey)
199200
.withValidator(new WechatPay2Validator(verifier))
@@ -208,9 +209,9 @@ CloseableHttpResponse response = httpClient.execute(...);
208209

209210
### 风险
210211

211-
因为不需要传入微信支付平台证书,ScheduledUpdateCertificatesVerifier 在首次更新证书时**不会验签**,也就无法确认应答身份,可能导致下载错误的证书。
212+
因为不需要传入微信支付平台证书,CertificatesManager 在首次更新证书时**不会验签**,也就无法确认应答身份,可能导致下载错误的证书。
212213

213-
但下载时会通过 **HTTPS****AES 对称加密**来保证证书安全,所以可以认为,在使用官方 JDK、且 APIv3 密钥不泄露的情况下,ScheduledUpdateCertificatesVerifier**安全**的。
214+
但下载时会通过 **HTTPS****AES 对称加密**来保证证书安全,所以可以认为,在使用官方 JDK、且 APIv3 密钥不泄露的情况下,CertificatesManager**安全**的。
214215

215216
## 敏感信息加解密
216217

UPGRADING.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# 升级指南
2+
## 从 0.3.0 升级至 0.4.0
3+
版本`0.4.0`提供了支持多商户号的[定时更新平台证书功能](#定时更新平台证书功能),不兼容版本`0.3.0`。若你使用了`ScheduledUpdateCertificatesVerifier`,请使用`CertificatesManager`替换:
4+
```diff
5+
-verifier = new ScheduledUpdateCertificatesVerifier(
6+
- new WechatPay2Credentials(merchantId, new PrivateKeySigner(merchantSerialNumber, merchantPrivateKey)),
7+
- apiV3Key.getBytes(StandardCharsets.UTF_8));
8+
+// 获取证书管理器实例
9+
+certificatesManager = CertificatesManager.getInstance();
10+
+// 向证书管理器增加需要自动更新平台证书的商户信息
11+
+certificatesManager.putMerchant(mchId, new WechatPay2Credentials(mchId,
12+
+ new PrivateKeySigner(mchSerialNo, merchantPrivateKey)), apiV3Key.getBytes(StandardCharsets.UTF_8));
13+
+// 从证书管理器中获取verifier
14+
+verifier = certificatesManager.getVerifier(mchId);
15+
```

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ plugins {
55
}
66

77
group 'com.github.wechatpay-apiv3'
8-
version '0.3.0'
8+
version '0.4.0'
99

1010
sourceCompatibility = 1.8
1111
targetCompatibility = 1.8

src/main/java/com/wechat/pay/contrib/apache/httpclient/auth/ScheduledUpdateCertificatesVerifier.java

Lines changed: 0 additions & 74 deletions
This file was deleted.

src/main/java/com/wechat/pay/contrib/apache/httpclient/cert/CertManagerSingleton.java

Lines changed: 0 additions & 179 deletions
This file was deleted.

0 commit comments

Comments
 (0)