254 lines
6.4 KiB
Markdown
254 lines
6.4 KiB
Markdown
# 阿里云短信服务配置完整指南
|
||
|
||
## 一、前期准备
|
||
|
||
### 1. 注册阿里云账号
|
||
访问 https://www.aliyun.com/ 注册账号并完成实名认证
|
||
|
||
### 2. 开通短信服务
|
||
1. 登录阿里云控制台
|
||
2. 搜索"短信服务"并开通
|
||
3. 进入短信服务控制台:https://dysms.console.aliyun.com/
|
||
|
||
## 二、创建短信签名
|
||
|
||
### 1. 申请签名
|
||
- 进入【国内消息】->【签名管理】
|
||
- 点击【添加签名】
|
||
- 填写签名信息:
|
||
- **签名名称**:红色思政学习平台
|
||
- **签名来源**:网站(需要提供网站备案信息)
|
||
- **签名场景**:验证码
|
||
- **签名说明**:用于用户注册和登录验证
|
||
- **资质证明**:上传相关资质文件
|
||
|
||
### 2. 审核时间
|
||
通常1-2个工作日审核完成
|
||
|
||
## 三、创建短信模板
|
||
|
||
### 1. 申请模板
|
||
- 进入【国内消息】->【模板管理】
|
||
- 点击【添加模板】
|
||
- 填写模板信息:
|
||
- **模板类型**:验证码
|
||
- **模板名称**:注册验证码
|
||
- **模板内容**:您的验证码为:${code},该验证码10分钟内有效,请勿泄漏于他人!
|
||
|
||
### 2. 注意事项
|
||
- 模板必须包含变量:`${code}`
|
||
- 验证码模板必须说明有效期
|
||
- 必须包含防骗提示语
|
||
|
||
### 3. 审核时间
|
||
通常1-2个工作日审核完成
|
||
|
||
### 4. 获取模板CODE
|
||
审核通过后,会生成模板CODE,格式如:`SMS_123456789`
|
||
|
||
## 四、创建RAM用户(推荐)
|
||
|
||
### 1. 为什么使用RAM用户
|
||
- 主账号权限过大,不安全
|
||
- RAM用户可以精细化权限控制
|
||
- 方便管理多个应用的访问权限
|
||
|
||
### 2. 创建步骤
|
||
|
||
#### 步骤1:进入访问控制
|
||
访问:https://ram.console.aliyun.com/users
|
||
|
||
#### 步骤2:创建用户
|
||
1. 点击【创建用户】
|
||
2. 填写用户信息:
|
||
- **登录名称**:school-news-sms
|
||
- **显示名称**:红色思政短信服务
|
||
- **访问方式**:勾选【OpenAPI调用访问】
|
||
|
||
#### 步骤3:保存AccessKey
|
||
创建成功后,**立即下载CSV文件保存AccessKey信息**(只显示一次!)
|
||
- AccessKey ID:LTAI5txxxxxxxxxxxxxxxxxx
|
||
- AccessKey Secret:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||
|
||
#### 步骤4:授权
|
||
1. 找到刚创建的用户
|
||
2. 点击【添加权限】
|
||
3. 搜索并添加权限:`AliyunDysmsFullAccess`(短信服务完全访问权限)
|
||
|
||
## 五、配置项目
|
||
|
||
### 1. 在 application.yml 中配置
|
||
|
||
```yaml
|
||
aliyun:
|
||
sms:
|
||
# 是否启用阿里云短信服务(true: 真实发送, false: 模拟模式)
|
||
enabled: true
|
||
# AccessKey ID(从RAM用户获取)
|
||
access-key-id: LTAI5txxxxxxxxxxxxxxxxxx
|
||
# AccessKey Secret(从RAM用户获取)
|
||
access-key-secret: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||
# 短信签名名称(审核通过后的签名名称)
|
||
sign-name: 红色思政学习平台
|
||
# 验证码模板CODE(审核通过后的模板CODE)
|
||
template-code: SMS_123456789
|
||
# 区域ID
|
||
region-id: cn-hangzhou
|
||
```
|
||
|
||
### 2. 开发环境配置
|
||
|
||
开发环境建议使用模拟模式:
|
||
|
||
```yaml
|
||
aliyun:
|
||
sms:
|
||
enabled: false # 关闭真实发送
|
||
access-key-id:
|
||
access-key-secret:
|
||
sign-name: 红色思政学习平台
|
||
template-code:
|
||
region-id: cn-hangzhou
|
||
```
|
||
|
||
**模拟模式特点**:
|
||
- 不会实际发送短信(节省费用)
|
||
- 验证码会在控制台日志中输出
|
||
- 适合开发和测试
|
||
|
||
### 3. 生产环境配置
|
||
|
||
生产环境使用真实发送:
|
||
|
||
```yaml
|
||
aliyun:
|
||
sms:
|
||
enabled: true # 开启真实发送
|
||
access-key-id: ${ALIYUN_SMS_ACCESS_KEY_ID} # 从环境变量读取
|
||
access-key-secret: ${ALIYUN_SMS_ACCESS_KEY_SECRET} # 从环境变量读取
|
||
sign-name: 红色思政学习平台
|
||
template-code: SMS_123456789
|
||
region-id: cn-hangzhou
|
||
```
|
||
|
||
## 六、测试验证
|
||
|
||
### 1. 启动项目
|
||
|
||
```bash
|
||
cd schoolNewsServ/admin
|
||
mvn spring-boot:run
|
||
```
|
||
|
||
### 2. 测试发送验证码
|
||
|
||
使用 Postman 或 curl 测试:
|
||
|
||
```bash
|
||
curl -X POST http://localhost:8081/schoolNewsServ/auth/send-sms-code \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"phone":"13800138000"}'
|
||
```
|
||
|
||
### 3. 查看日志
|
||
|
||
**模拟模式**:
|
||
```
|
||
【模拟发送】短信验证码,手机号: 13800138000, 验证码: 123456
|
||
```
|
||
|
||
**真实发送**:
|
||
```
|
||
阿里云短信发送成功,手机号: 13800138000, BizId: 123456789^0
|
||
```
|
||
|
||
## 七、费用说明
|
||
|
||
### 1. 收费标准
|
||
- **验证码短信**:约 ¥0.045/条
|
||
- **通知短信**:约 ¥0.045/条
|
||
- **推广短信**:约 ¥0.055/条
|
||
|
||
### 2. 充值方式
|
||
1. 进入短信服务控制台
|
||
2. 点击【充值】
|
||
3. 选择充值金额(建议先充值100元测试)
|
||
|
||
### 3. 余额查询
|
||
控制台首页可查看账户余额和使用情况
|
||
|
||
## 八、常见问题
|
||
|
||
### 1. 签名审核不通过
|
||
- **原因**:资质不全、信息不符
|
||
- **解决**:按审核意见补充资料,重新提交
|
||
|
||
### 2. 模板审核不通过
|
||
- **原因**:内容不规范、缺少必要信息
|
||
- **解决**:修改模板内容,确保包含:
|
||
- 验证码变量 `${code}`
|
||
- 有效期说明
|
||
- 防骗提示
|
||
|
||
### 3. 发送失败:isv.BUSINESS_LIMIT_CONTROL
|
||
- **原因**:短信发送频率过高
|
||
- **解决**:
|
||
- 同一手机号1分钟内只能发送1条
|
||
- 同一手机号1小时内最多发送5条
|
||
- 同一手机号1天内最多发送10条
|
||
|
||
### 4. 发送失败:isv.AMOUNT_NOT_ENOUGH
|
||
- **原因**:账户余额不足
|
||
- **解决**:充值
|
||
|
||
### 5. 发送失败:isv.MOBILE_NUMBER_ILLEGAL
|
||
- **原因**:手机号格式错误
|
||
- **解决**:检查手机号是否正确
|
||
|
||
### 6. 代码中看不到验证码
|
||
- **原因**:enabled=true 时真实发送,不会在日志输出
|
||
- **解决**:
|
||
- 开发环境设置 `enabled: false`
|
||
- 或查看手机短信
|
||
|
||
## 九、安全建议
|
||
|
||
### 1. AccessKey 安全
|
||
- ❌ 不要将 AccessKey 直接写在代码中
|
||
- ❌ 不要将 AccessKey 提交到 Git 仓库
|
||
- ✅ 使用环境变量或配置中心
|
||
- ✅ 定期更换 AccessKey
|
||
- ✅ 使用 RAM 用户而非主账号
|
||
|
||
### 2. 防刷机制
|
||
系统已实现:
|
||
- ✅ 60秒发送频率限制
|
||
- ✅ 验证码10分钟有效期
|
||
- ✅ Redis存储验证码
|
||
- ✅ 手机号格式验证
|
||
|
||
建议增加:
|
||
- 图形验证码
|
||
- IP限流
|
||
- 黑名单机制
|
||
|
||
### 3. 监控告警
|
||
- 设置短信发送量告警
|
||
- 监控异常发送行为
|
||
- 定期查看短信发送报表
|
||
|
||
## 十、技术支持
|
||
|
||
- 阿里云短信服务文档:https://help.aliyun.com/product/44282.html
|
||
- 工单咨询:https://selfservice.console.aliyun.com/ticket/createIndex
|
||
- 电话客服:95187
|
||
|
||
---
|
||
|
||
**最后提醒**:
|
||
1. 开发环境务必使用 `enabled: false` 避免浪费
|
||
2. AccessKey 信息要妥善保管
|
||
3. 注意短信发送频率限制
|
||
4. 定期查看账户余额
|
||
|