Files
server/微信小程序支付上线配置修改清单.md
2025-11-02 19:34:16 +08:00

640 lines
17 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 微信小程序支付功能上线配置修改清单
## 文档说明
**文档版本:** v1.0
**创建日期:** 2025年9月30日
**适用项目:** xiaozhi-server 微信小程序支付功能
**执行优先级:** 🔴 高优先级(上线前必须完成)
> ⚠️ **重要提醒:** 本文档包含生产环境配置信息,请严格按照公司信息安全规范执行,确保敏感信息不被泄露。
---
## 1. 测试环境与正式环境差异对比
### 1.1 环境配置差异表
| 配置项 | 测试环境 | 正式环境 | 修改优先级 |
|--------|----------|----------|------------|
| 服务器地址 | localhost:8091 | https://api.xiaozhi.com | 🔴 高 |
| 数据库环境 | 本地MySQL | 生产MySQL集群 | 🔴 高 |
| 微信支付环境 | 沙箱环境 | 正式环境 | 🔴 高 |
| 日志级别 | DEBUG | INFO/WARN | 🟡 中 |
| 缓存配置 | 本地Redis | Redis集群 | 🔴 高 |
| SSL证书 | 自签名证书 | 正式SSL证书 | 🔴 高 |
### 1.2 配置文件修改位置
**主要配置文件:**
- `src/main/resources/application.yml` - 主配置文件
- `src/main/resources/application-prod.yml` - 生产环境配置
- `src/main/java/com/xiaozhi/plus/utils/api/WxMpApi.java` - 微信API配置
---
## 2. API接口地址和密钥替换清单
### 2.1 微信支付API接口地址
**需要修改的配置项:**
```yaml
# application-prod.yml
wechat:
pay:
# 测试环境 -> 正式环境
api-url:
old: "https://api.mch.weixin.qq.com/sandboxnew" # 测试环境
new: "https://api.mch.weixin.qq.com" # 正式环境
# 统一下单接口
unifiedorder-url:
old: "https://api.mch.weixin.qq.com/sandboxnew/pay/unifiedorder"
new: "https://api.mch.weixin.qq.com/pay/unifiedorder"
# 订单查询接口
orderquery-url:
old: "https://api.mch.weixin.qq.com/sandboxnew/pay/orderquery"
new: "https://api.mch.weixin.qq.com/pay/orderquery"
```
### 2.2 密钥配置更新
**⚠️ 敏感信息 - 需要从运维团队获取正式密钥**
```yaml
# 需要替换的密钥配置
wechat:
pay:
# 商户密钥32位
mch-key:
old: "test_mch_key_32_characters_long" # 测试密钥
new: "${WECHAT_MCH_KEY}" # 生产密钥(环境变量)
# API密钥32位
api-key:
old: "test_api_key_32_characters_long" # 测试密钥
new: "${WECHAT_API_KEY}" # 生产密钥(环境变量)
```
### 2.3 修改执行步骤
1. **备份当前配置文件**
```bash
cp src/main/resources/application.yml src/main/resources/application.yml.backup
```
2. **更新配置文件**
- 修改 `application-prod.yml` 中的API地址
- 配置生产环境密钥(使用环境变量)
3. **验证配置**
- 确认所有URL指向正式环境
- 验证密钥格式正确32位字符串
---
## 3. 支付回调URL更新要求
### 3.1 回调URL配置
**当前测试环境回调URL**
```
http://localhost:8091/api/wechat/pay/notify
```
**正式环境回调URL**
```
https://api.xiaozhi.com/api/wechat/pay/notify
```
### 3.2 回调URL安全要求
1. **HTTPS协议要求**
- ✅ 必须使用HTTPS协议
- ✅ SSL证书必须有效
- ✅ 支持TLS 1.2及以上版本
2. **域名要求**
- ✅ 使用已备案的正式域名
- ✅ 域名必须与微信商户平台配置一致
- ❌ 不能使用IP地址
3. **端口要求**
- ✅ 使用标准HTTPS端口443
- ❌ 不使用自定义端口
### 3.3 微信商户平台配置
**配置路径:** 微信商户平台 → 产品中心 → 开发配置 → 支付配置
**需要配置的回调URL**
- **支付结果通知URL** `https://api.xiaozhi.com/api/wechat/pay/notify`
- **退款结果通知URL** `https://api.xiaozhi.com/api/wechat/pay/refund/notify`
---
## 4. 商户号、AppID等敏感信息变更清单
### 4.1 微信小程序信息
| 配置项 | 测试环境值 | 正式环境值 | 获取方式 |
|--------|------------|------------|----------|
| **AppID** | `wxff56c34ef9aceb62` | `wx[16位正式AppID]` | 微信公众平台 |
| **AppSecret** | `f2c900d3296ce82a91dbc46de56a9fc3` | `[32位正式AppSecret]` | 微信公众平台 |
### 4.2 微信支付商户信息
| 配置项 | 测试环境值 | 正式环境值 | 获取方式 |
|--------|------------|------------|----------|
| **商户号(mch_id)** | `1234567890` | `[10位正式商户号]` | 微信商户平台 |
| **商户密钥(mch_key)** | `test_key_32_chars` | `[32位正式密钥]` | 微信商户平台 |
| **子商户号(sub_mch_id)** | 无 | `[如有子商户]` | 微信商户平台 |
### 4.3 配置文件更新示例
```yaml
# application-prod.yml
wechat:
mp:
appid: ${WECHAT_APPID} # 从环境变量读取
secret: ${WECHAT_APPSECRET} # 从环境变量读取
pay:
mch-id: ${WECHAT_MCH_ID} # 商户号
mch-key: ${WECHAT_MCH_KEY} # 商户密钥
app-id: ${WECHAT_APPID} # 应用ID
notify-url: "https://api.xiaozhi.com/api/wechat/pay/notify"
```
### 4.4 环境变量配置
**生产服务器需要设置的环境变量:**
```bash
# 微信小程序配置
export WECHAT_APPID="wx[正式AppID]"
export WECHAT_APPSECRET="[正式AppSecret]"
# 微信支付配置
export WECHAT_MCH_ID="[正式商户号]"
export WECHAT_MCH_KEY="[正式商户密钥]"
```
---
## 5. 支付证书和密钥文件更换说明
### 5.1 证书文件清单
**需要更换的证书文件:**
| 文件名 | 用途 | 测试环境路径 | 正式环境路径 |
|--------|------|--------------|--------------|
| `apiclient_cert.p12` | API客户端证书 | `/test/cert/` | `/prod/cert/` |
| `apiclient_cert.pem` | API客户端证书(PEM格式) | `/test/cert/` | `/prod/cert/` |
| `apiclient_key.pem` | API客户端私钥 | `/test/cert/` | `/prod/cert/` |
| `rootca.pem` | 根证书 | `/test/cert/` | `/prod/cert/` |
### 5.2 证书获取和安装步骤
1. **从微信商户平台下载正式证书**
- 登录微信商户平台
- 进入 账户中心 → API安全 → 证书下载
- 下载最新的API证书
2. **证书文件部署**
```bash
# 创建证书目录
mkdir -p /opt/xiaozhi/cert
# 复制证书文件权限设置为600
cp apiclient_cert.p12 /opt/xiaozhi/cert/
chmod 600 /opt/xiaozhi/cert/apiclient_cert.p12
# 设置证书文件所有者
chown xiaozhi:xiaozhi /opt/xiaozhi/cert/*
```
3. **配置文件更新**
```yaml
# application-prod.yml
wechat:
pay:
cert-path: "/opt/xiaozhi/cert/apiclient_cert.p12"
cert-password: "${WECHAT_CERT_PASSWORD}" # 证书密码
```
### 5.3 证书安全要求
- ✅ 证书文件权限设置为 600 (仅所有者可读写)
- ✅ 证书密码通过环境变量配置
- ✅ 定期检查证书有效期建议每3个月检查一次
- ❌ 禁止将证书文件提交到代码仓库
---
## 6. 支付限额和业务参数调整建议
### 6.1 支付限额配置
**当前测试环境限额:**
- 单笔支付限额:无限制
- 日累计限额:无限制
- 月累计限额:无限制
**建议正式环境限额:**
| 限额类型 | 建议值 | 配置位置 | 业务考虑 |
|----------|--------|----------|----------|
| 单笔最小金额 | 1分 | 代码校验 | 微信支付最小限额 |
| 单笔最大金额 | 50,000元 | 代码校验 | 风控要求 |
| 用户日限额 | 10,000元 | 业务逻辑 | 用户体验平衡 |
| 用户月限额 | 100,000元 | 业务逻辑 | 合规要求 |
### 6.2 业务参数配置
```yaml
# application-prod.yml
business:
payment:
# 支付限额配置
limits:
min-amount: 1 # 最小支付金额(分)
max-amount: 5000000 # 最大支付金额(分)= 50,000元
daily-limit: 1000000 # 日限额(分)= 10,000元
monthly-limit: 10000000 # 月限额(分)= 100,000元
# 订单配置
order:
timeout: 1800 # 订单超时时间(秒)= 30分钟
retry-times: 3 # 支付重试次数
# 风控配置
risk:
enable-frequency-limit: true # 启用频率限制
max-requests-per-minute: 10 # 每分钟最大请求次数
```
### 6.3 支付场景配置
**需要配置的支付场景:**
1. **商品购买支付**
- 支付描述格式:`小智AI-{商品名称}`
- 订单号前缀:`XZ`
- 超时时间30分钟
2. **会员充值支付**
- 支付描述格式:`小智AI会员充值`
- 订单号前缀:`VIP`
- 超时时间15分钟
3. **设备激活支付**
- 支付描述格式:`小智设备激活`
- 订单号前缀:`DEV`
- 超时时间60分钟
---
## 7. 测试数据和模拟账号清理清单
### 7.1 需要清理的测试数据
**数据库清理清单:**
```sql
-- 1. 清理测试订单数据
DELETE FROM wechat_pay_order
WHERE openid LIKE 'test_%'
OR body LIKE '%测试%'
OR out_trade_no LIKE '%test%';
-- 2. 清理测试用户数据
DELETE FROM user_info
WHERE openid LIKE 'test_%'
OR nickname LIKE '%测试%';
-- 3. 清理测试设备数据
DELETE FROM device_info
WHERE device_id LIKE 'test_%'
OR device_name LIKE '%测试%';
-- 4. 清理测试日志数据保留最近7天
DELETE FROM system_log
WHERE create_time < DATE_SUB(NOW(), INTERVAL 7 DAY)
AND (content LIKE '%test%' OR content LIKE '%测试%');
```
### 7.2 需要移除的测试账号
**测试OpenID清单**
- `test_normal_001` - 正常支付测试账号
- `test_normal_002` - 高价值商品测试账号
- `test_boundary_001` - 边界值测试账号
- `test_boundary_002` - 零金额测试账号
- `test_boundary_003` - 负数金额测试账号
- `test_boundary_004` - 极大金额测试账号
- `test_duplicate_001` - 重复支付测试账号
### 7.3 配置文件清理
**需要移除的测试配置:**
```yaml
# 移除测试环境特有配置
# application.yml 中需要删除的配置项:
# 测试模式配置(需要删除)
test:
mode: true
mock-payment: true
skip-signature-verify: true
# 调试配置(需要删除)
debug:
enable-sql-log: true
enable-request-log: true
```
### 7.4 代码中的测试标记清理
**需要检查和移除的代码:**
```java
// 搜索并移除以下测试相关代码
// 1. 测试模式判断
if (isTestMode()) {
// 测试逻辑 - 需要移除
}
// 2. Mock数据返回
// WechatPayServiceImpl.java 中的模拟返回
return mockPaymentResponse(); // 需要移除
// 3. 跳过签名验证的代码
if (!isProduction()) {
return true; // 跳过验证 - 需要移除
}
```
---
## 8. 支付成功页面正式文案要求
### 8.1 支付成功页面文案
**页面标题:**
```
支付成功
```
**成功提示文案:**
```
恭喜您,支付已完成!
您的订单正在处理中,请耐心等待。
```
**订单信息展示:**
```
订单号:{订单号}
支付金额:¥{金额}
支付时间:{时间}
商品名称:{商品名称}
```
**操作按钮文案:**
- 主按钮:`返回首页`
- 次按钮:`查看订单`
### 8.2 支付失败页面文案
**页面标题:**
```
支付失败
```
**失败提示文案:**
```
很抱歉,支付未能完成
请检查网络连接或稍后重试
```
**常见错误提示:**
- 余额不足:`账户余额不足,请充值后重试`
- 网络错误:`网络连接异常,请检查网络后重试`
- 系统繁忙:`系统繁忙,请稍后重试`
**操作按钮文案:**
- 主按钮:`重新支付`
- 次按钮:`返回首页`
### 8.3 支付中页面文案
**页面标题:**
```
支付处理中
```
**处理提示文案:**
```
正在处理您的支付请求
请不要关闭页面或重复操作
```
**等待动画文案:**
```
支付处理中,请稍候...
```
### 8.4 文案配置文件
**创建文案配置文件:** `src/main/resources/messages.properties`
```properties
# 支付相关文案
payment.success.title=支付成功
payment.success.message=恭喜您,支付已完成!您的订单正在处理中,请耐心等待。
payment.success.button.home=返回首页
payment.success.button.order=查看订单
payment.failed.title=支付失败
payment.failed.message=很抱歉,支付未能完成,请检查网络连接或稍后重试
payment.failed.button.retry=重新支付
payment.failed.button.home=返回首页
payment.processing.title=支付处理中
payment.processing.message=正在处理您的支付请求,请不要关闭页面或重复操作
payment.processing.waiting=支付处理中,请稍候...
# 错误提示文案
payment.error.insufficient_balance=账户余额不足,请充值后重试
payment.error.network_error=网络连接异常,请检查网络后重试
payment.error.system_busy=系统繁忙,请稍后重试
```
---
## 9. 上线前检查清单
### 9.1 配置检查清单
**🔴 必须完成项:**
- [ ] **API接口地址更新**
- [ ] 统一下单接口地址已更新为正式环境
- [ ] 订单查询接口地址已更新为正式环境
- [ ] 支付回调URL已配置为HTTPS正式地址
- [ ] **密钥和证书更新**
- [ ] 商户密钥已更换为正式密钥
- [ ] API证书已更换为正式证书
- [ ] 证书文件权限已正确设置600
- [ ] **商户信息更新**
- [ ] AppID已更新为正式AppID
- [ ] 商户号已更新为正式商户号
- [ ] 微信商户平台回调URL已配置
- [ ] **测试数据清理**
- [ ] 测试订单数据已清理
- [ ] 测试用户数据已清理
- [ ] 测试配置已移除
**🟡 建议完成项:**
- [ ] **业务参数优化**
- [ ] 支付限额已配置
- [ ] 订单超时时间已设置
- [ ] 风控参数已配置
- [ ] **文案更新**
- [ ] 支付成功页面文案已更新
- [ ] 支付失败页面文案已更新
- [ ] 错误提示文案已完善
### 9.2 测试验证清单
**上线前必须测试的功能:**
1. **支付功能测试**
- [ ] 小额支付测试1分
- [ ] 正常金额支付测试100元
- [ ] 大额支付测试1000元
- [ ] 支付失败场景测试
2. **回调功能测试**
- [ ] 支付成功回调处理
- [ ] 支付失败回调处理
- [ ] 回调签名验证
3. **订单查询测试**
- [ ] 成功订单查询
- [ ] 失败订单查询
- [ ] 不存在订单查询
4. **异常处理测试**
- [ ] 网络异常处理
- [ ] 参数错误处理
- [ ] 系统异常处理
### 9.3 监控和日志配置
**生产环境监控配置:**
```yaml
# application-prod.yml
logging:
level:
com.xiaozhi.pay: INFO # 支付相关日志级别
org.springframework: WARN # Spring框架日志级别
file:
name: /var/log/xiaozhi/payment.log # 支付日志文件
max-size: 100MB # 单个日志文件最大大小
max-history: 30 # 保留日志文件天数
# 监控配置
management:
endpoints:
web:
exposure:
include: health,info,metrics # 暴露的监控端点
endpoint:
health:
show-details: when-authorized # 健康检查详情显示条件
```
---
## 10. 应急预案
### 10.1 回滚方案
**如果上线后发现问题,按以下步骤回滚:**
1. **立即停止服务**
```bash
sudo systemctl stop xiaozhi-server
```
2. **恢复备份配置**
```bash
cp application.yml.backup application.yml
```
3. **重启服务**
```bash
sudo systemctl start xiaozhi-server
```
4. **验证服务状态**
```bash
curl -X GET http://localhost:8091/actuator/health
```
### 10.2 常见问题处理
**问题1支付接口返回签名错误**
- **原因:** 商户密钥配置错误
- **解决:** 检查并更新正确的商户密钥
**问题2回调接口无法访问**
- **原因:** 回调URL配置错误或SSL证书问题
- **解决:** 检查回调URL和SSL证书配置
**问题3订单查询失败**
- **原因:** API接口地址未更新或证书问题
- **解决:** 检查API地址和证书配置
### 10.3 联系方式
**技术支持联系方式:**
- **开发团队负责人:** [姓名] - [电话] - [邮箱]
- **运维团队负责人:** [姓名] - [电话] - [邮箱]
- **微信支付技术支持:** 400-xxx-xxxx
---
## 11. 文档维护
**文档更新记录:**
| 版本 | 更新日期 | 更新内容 | 更新人 |
|------|----------|----------|--------|
| v1.0 | 2025-09-30 | 初始版本创建 | AI助手 |
**文档审核:**
- **技术审核:** 待审核
- **安全审核:** 待审核
- **业务审核:** 待审核
**下次更新计划:**
- 根据实际上线情况更新配置参数
- 补充实际遇到的问题和解决方案
- 优化检查清单和操作步骤
---
> 📋 **使用说明:** 请严格按照本文档顺序执行配置修改,每完成一项请在对应的检查框中打勾。如遇到问题,请及时联系技术支持团队。
> 🔒 **安全提醒:** 本文档包含敏感配置信息,请妥善保管,不得外传。所有密钥和证书信息请通过安全渠道获取和传输。