11
This commit is contained in:
192
docs/CERTIFICATE_FIX_SUMMARY.md
Normal file
192
docs/CERTIFICATE_FIX_SUMMARY.md
Normal file
@@ -0,0 +1,192 @@
|
||||
# 微信支付证书问题修复总结
|
||||
|
||||
## 问题描述
|
||||
|
||||
**错误信息**:`创建支付订单失败:创建支付订单失败:Cannot invoke "java.security.cert.X509Certificate.getSerialNumber()" because "certificate" is null`
|
||||
|
||||
**错误代码**:1
|
||||
|
||||
## 问题分析
|
||||
|
||||
这个错误发生在微信支付SDK使用 `RSAAutoCertificateConfig` 自动证书配置时,SDK尝试自动下载微信支付平台证书但失败,导致证书对象为null,进而在调用 `getSerialNumber()` 方法时抛出空指针异常。
|
||||
|
||||
## 已实施的修复方案
|
||||
|
||||
### 1. 增强错误处理和自动回退机制
|
||||
|
||||
**文件**:`src/main/java/com/gxwebsoft/shop/service/impl/ShopOrderServiceImpl.java`
|
||||
|
||||
**修复内容**:
|
||||
- 在开发环境和生产环境都增加了详细的错误诊断
|
||||
- 实现了自动回退机制:当 `RSAAutoCertificateConfig` 失败时,自动回退到 `RSAConfig` 或 `RSAPublicKeyConfig`
|
||||
- 增加了特定的证书错误检测和处理逻辑
|
||||
- 提供了详细的错误信息和修复建议
|
||||
|
||||
### 2. 创建证书诊断工具
|
||||
|
||||
**文件**:`src/main/java/com/gxwebsoft/common/core/utils/WechatPayCertificateDiagnostic.java`
|
||||
|
||||
**功能**:
|
||||
- 全面诊断微信支付证书配置
|
||||
- 检查基本配置(商户号、应用ID、APIv3密钥、证书序列号)
|
||||
- 验证证书文件存在性和有效性
|
||||
- 检查证书内容和序列号匹配
|
||||
- 生成详细的诊断报告和修复建议
|
||||
|
||||
### 3. 创建证书修复工具
|
||||
|
||||
**文件**:`src/main/java/com/gxwebsoft/common/core/utils/WechatPayCertificateFixer.java`
|
||||
|
||||
**功能**:
|
||||
- 自动检测和修复常见的证书配置问题
|
||||
- 验证证书文件路径和内容
|
||||
- 检查序列号匹配性
|
||||
- 提供自动修复建议
|
||||
|
||||
### 4. 创建诊断API接口
|
||||
|
||||
**文件**:`src/main/java/com/gxwebsoft/common/core/controller/WechatPayDiagnosticController.java`
|
||||
|
||||
**提供的API**:
|
||||
- `GET /system/wechat-pay-diagnostic/diagnose/{tenantId}` - 诊断特定租户的证书配置
|
||||
- `GET /system/wechat-pay-diagnostic/solutions` - 获取证书问题解决方案
|
||||
- `POST /system/wechat-pay-diagnostic/test/{tenantId}` - 测试证书配置
|
||||
- `GET /system/wechat-pay-diagnostic/environment` - 获取环境信息
|
||||
- `GET /system/wechat-pay-diagnostic/guide` - 获取证书配置指南
|
||||
|
||||
### 5. 集成诊断功能
|
||||
|
||||
在支付服务中集成了证书诊断功能,每次创建支付订单时都会运行诊断,提供详细的配置信息和错误分析。
|
||||
|
||||
## 使用方法
|
||||
|
||||
### 1. 自动诊断
|
||||
|
||||
系统在创建支付订单时会自动运行诊断,查看控制台输出:
|
||||
|
||||
```
|
||||
=== 微信支付证书诊断报告 ===
|
||||
租户ID: 10550
|
||||
商户号: 1723321338
|
||||
应用ID: wx1234567890abcdef
|
||||
商户证书序列号: 2B933F7C35014A1C363642623E4A62364B34C4EB
|
||||
APIv3密钥: 已配置(32位)
|
||||
证书文件路径: dev/wechat/10550/apiclient_key.pem
|
||||
证书文件存在: 是
|
||||
配置验证结果: 通过
|
||||
```
|
||||
|
||||
### 2. 手动诊断
|
||||
|
||||
使用诊断API进行手动检查:
|
||||
|
||||
```bash
|
||||
# 诊断特定租户
|
||||
curl -X GET "http://localhost:9200/system/wechat-pay-diagnostic/diagnose/10550" \
|
||||
-H "Authorization: Bearer YOUR_TOKEN"
|
||||
|
||||
# 获取解决方案
|
||||
curl -X GET "http://localhost:9200/system/wechat-pay-diagnostic/solutions"
|
||||
|
||||
# 测试证书配置
|
||||
curl -X POST "http://localhost:9200/system/wechat-pay-diagnostic/test/10550" \
|
||||
-H "Authorization: Bearer YOUR_TOKEN"
|
||||
```
|
||||
|
||||
### 3. 查看配置指南
|
||||
|
||||
访问 `GET /system/wechat-pay-diagnostic/guide` 获取完整的证书配置指南。
|
||||
|
||||
## 常见问题解决
|
||||
|
||||
### 1. 商户平台配置
|
||||
|
||||
确保在微信商户平台完成以下配置:
|
||||
1. 开启API安全功能
|
||||
2. 申请使用微信支付公钥
|
||||
3. 下载商户证书文件
|
||||
4. 设置32位APIv3密钥
|
||||
|
||||
### 2. 证书文件配置
|
||||
|
||||
**开发环境**:
|
||||
```
|
||||
src/main/resources/dev/wechat/{tenantId}/
|
||||
├── apiclient_key.pem # 必需:商户私钥
|
||||
└── apiclient_cert.pem # 可选:商户证书
|
||||
```
|
||||
|
||||
**生产环境**:
|
||||
- 将证书文件上传到服务器指定目录
|
||||
- 在数据库中配置正确的文件路径
|
||||
|
||||
### 3. 数据库配置
|
||||
|
||||
在 `payment` 表中确保以下字段正确配置:
|
||||
- `mch_id`: 商户号
|
||||
- `app_id`: 应用ID
|
||||
- `merchant_serial_number`: 商户证书序列号
|
||||
- `api_key`: APIv3密钥(32位)
|
||||
|
||||
## 技术特性
|
||||
|
||||
### 1. 自动回退机制
|
||||
|
||||
当自动证书配置失败时,系统会自动尝试以下回退方案:
|
||||
1. `RSAAutoCertificateConfig` (首选)
|
||||
2. `RSAPublicKeyConfig` (如果有公钥配置)
|
||||
3. `RSAConfig` (如果有商户证书文件)
|
||||
|
||||
### 2. 详细错误诊断
|
||||
|
||||
系统会检测特定的错误类型并提供针对性的解决方案:
|
||||
- X509Certificate相关错误
|
||||
- 404错误(API安全未开启)
|
||||
- 证书序列号错误
|
||||
- APIv3密钥错误
|
||||
- 网络连接问题
|
||||
|
||||
### 3. 环境适配
|
||||
|
||||
支持开发环境和生产环境的不同配置方式:
|
||||
- 开发环境:从classpath加载证书
|
||||
- 生产环境:从文件系统或Docker挂载卷加载证书
|
||||
|
||||
## 监控和维护
|
||||
|
||||
### 1. 日志监控
|
||||
|
||||
关注以下日志信息:
|
||||
- 证书诊断报告
|
||||
- 自动回退日志
|
||||
- 错误详情和建议
|
||||
|
||||
### 2. 定期检查
|
||||
|
||||
建议定期执行以下检查:
|
||||
- 证书有效期
|
||||
- 配置完整性
|
||||
- 网络连接状态
|
||||
|
||||
### 3. 更新维护
|
||||
|
||||
- 定期更新微信支付SDK版本
|
||||
- 监控微信支付平台公告
|
||||
- 及时更新过期证书
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [微信支付证书问题修复指南](./WECHAT_PAY_CERTIFICATE_FIX.md)
|
||||
- [微信支付官方文档](https://pay.weixin.qq.com/doc/v3/merchant/4012153196)
|
||||
- [API安全配置指南](https://pay.weixin.qq.com/doc/v3/merchant/4012153196)
|
||||
|
||||
## 总结
|
||||
|
||||
通过实施以上修复方案,系统现在具备了:
|
||||
1. **自动错误检测和诊断**
|
||||
2. **智能回退机制**
|
||||
3. **详细的错误信息和修复建议**
|
||||
4. **完整的诊断和修复工具**
|
||||
5. **API接口支持**
|
||||
|
||||
这些改进大大提高了微信支付证书问题的可诊断性和可修复性,减少了因证书配置问题导致的支付失败。
|
||||
Reference in New Issue
Block a user