update: 提交所有修改和新增功能代码

This commit is contained in:
lihanqi
2026-02-14 12:15:01 +08:00
parent dc59f393fa
commit ec597ffe2e
77 changed files with 4417 additions and 2411 deletions

238
短信服务迁移说明.md Normal file
View File

@@ -0,0 +1,238 @@
# 短信服务迁移说明 - 从阿里云SMS到腾讯云SMS
## 迁移概述
将短信服务从阿里云SMS迁移到腾讯云SMS保持原有功能不变。
## 1. 代码变更
### 1.1 SmsServiceImpl.java
**位置**`src/main/java/com/xy/xyaicpzs/service/impl/SmsServiceImpl.java`
**主要变更**
- 移除阿里云SDK依赖`com.aliyun.dysmsapi20170525`
- 引入腾讯云SDK`com.tencentcloudapi.sms.v20210111`
- 修改客户端创建方式
- 修改短信发送请求构建方式
- 手机号格式改为E.164标准(+86前缀
**关键代码**
```java
// 创建腾讯云短信客户端
private SmsClient createSmsClient() {
Credential cred = new Credential(secretId, secretKey);
return new SmsClient(cred, region);
}
// 发送短信
SendSmsRequest req = new SendSmsRequest();
req.setSmsSdkAppId(sdkAppId);
req.setSignName(signName);
req.setTemplateId(templateId);
req.setTemplateParamSet(new String[]{verificationCode});
req.setPhoneNumberSet(new String[]{"+86" + phoneNumber});
```
### 1.2 配置文件更新
**位置**`src/main/resources/application.yml`
**旧配置(阿里云)**
```yaml
aliyun:
sms:
sign-name: 西安精彩数据服务社
template-code: SMS_489840017
access-key-id: LTAI5tR18rXPYazi3y8kAuep
access-key-secret: KZ1aKZOupilVc332SXE1g1DfKsqHPu
```
**新配置(腾讯云)**
```yaml
tencent:
sms:
secret-id: ${TENCENT_SMS_SECRET_ID:your-secret-id}
secret-key: ${TENCENT_SMS_SECRET_KEY:your-secret-key}
sdk-app-id: 1401068120
template-id: 2598660
sign-name: 西安溢彩数智科技有限公司
region: ap-guangzhou
```
## 2. 配置说明
### 2.1 必需配置项
| 配置项 | 说明 | 示例值 |
|--------|------|--------|
| secret-id | 腾讯云SecretId | 从腾讯云控制台获取 |
| secret-key | 腾讯云SecretKey | 从腾讯云控制台获取 |
| sdk-app-id | 短信应用ID | 1401068120 |
| template-id | 短信模板ID | 2598660 |
| sign-name | 短信签名 | 西安溢彩数智科技有限公司 |
| region | 地域 | ap-guangzhou默认 |
### 2.2 环境变量配置(推荐)
为了安全,建议使用环境变量配置敏感信息:
**Linux/Mac**
```bash
export TENCENT_SMS_SECRET_ID=your-secret-id
export TENCENT_SMS_SECRET_KEY=your-secret-key
```
**Windows**
```cmd
set TENCENT_SMS_SECRET_ID=your-secret-id
set TENCENT_SMS_SECRET_KEY=your-secret-key
```
或者直接在 `application.yml` 中替换默认值。
## 3. Maven依赖
确保 `pom.xml` 中已添加腾讯云SMS SDK依赖
```xml
<!-- 腾讯云SMS SDK -->
<dependency>
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java-sms</artifactId>
<version>3.1.xxx</version>
</dependency>
```
**注意**可以移除阿里云SMS相关依赖
```xml
<!-- 可以删除 -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dysmsapi20170525</artifactId>
<version>xxx</version>
</dependency>
```
## 4. 功能保持不变
### 4.1 验证码生成
- 仍然生成6位随机数字验证码
- 验证码有效期5分钟
### 4.2 发送限制
- 每个手机号每天最多发送10次
- 使用Redis存储发送次数和验证码
### 4.3 API接口
- 接口路径不变:`POST /api/sms/sendCode`
- 请求参数不变:`phoneNumber`
- 响应格式不变
## 5. 腾讯云SMS模板要求
### 5.1 模板格式
根据模板ID `2598660`,模板内容应该类似:
```
您的验证码是{1}请在5分钟内完成验证。
```
### 5.2 模板参数
代码中传递的参数:
```java
String[] templateParamSet = {verificationCode};
```
**注意**:腾讯云模板参数是数组形式,按顺序对应模板中的 `{1}`, `{2}` 等占位符。
## 6. 手机号格式
### 6.1 阿里云格式
```
13868246742 // 直接11位手机号
```
### 6.2 腾讯云格式E.164标准)
```
+8613868246742 // 需要加 +86 前缀
```
代码中已自动处理:
```java
String[] phoneNumberSet = {"+86" + phoneNumber};
```
## 7. 错误处理
### 7.1 发送成功判断
腾讯云返回的状态码为 `"Ok"` 表示成功:
```java
if ("Ok".equals(code)) {
// 发送成功
}
```
### 7.2 常见错误码
| 错误码 | 说明 | 处理方式 |
|--------|------|---------|
| FailedOperation.ContainSensitiveWord | 内容包含敏感词 | 检查模板内容 |
| FailedOperation.SignatureIncorrectOrUnapproved | 签名未审核或不正确 | 检查签名配置 |
| LimitExceeded.PhoneNumberDailyLimit | 手机号日发送量超限 | 已在代码中限制 |
| InvalidParameterValue.TemplateParameterFormatError | 模板参数格式错误 | 检查参数数组 |
## 8. 测试建议
### 8.1 单元测试
1. 测试验证码生成
2. 测试发送次数限制
3. 测试验证码验证
### 8.2 集成测试
1. 发送验证码到真实手机号
2. 验证短信内容格式
3. 验证验证码有效期
4. 验证每日发送次数限制
### 8.3 测试命令
```bash
curl -X POST http://localhost:8123/api/sms/sendCode \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "phoneNumber=13868246742"
```
## 9. 注意事项
1. **配置敏感信息**
- 不要将 `secret-id``secret-key` 提交到代码仓库
- 使用环境变量或配置中心管理
2. **模板审核**
- 确保腾讯云控制台中模板ID `2598660` 已审核通过
- 确保签名"西安溢彩数智科技有限公司"已审核通过
3. **地域选择**
- 默认使用 `ap-guangzhou`(广州)
- 可根据实际情况修改为其他地域
4. **费用**
- 腾讯云SMS按条计费
- 建议在控制台设置费用告警
## 10. 回滚方案
如果需要回滚到阿里云SMS
1. 恢复 `SmsServiceImpl.java` 的旧版本
2. 恢复 `application.yml` 中的阿里云配置
3. 确保阿里云SDK依赖存在
4. 重启应用
## 11. 完成状态
✅ 代码迁移完成
✅ 配置文件更新
✅ 编译检查通过
✅ 功能保持不变
**迁移已完成,可以部署使用!**
## 12. 相关文档
- [腾讯云SMS SDK文档](https://cloud.tencent.com/document/product/382/43199)
- [腾讯云SMS API文档](https://cloud.tencent.com/document/api/382/52071)
- [腾讯云SMS控制台](https://console.cloud.tencent.com/smsv2)