Files
schoolNews/schoolNewsServ/auth/阿里云短信配置示例.md

254 lines
6.4 KiB
Markdown
Raw 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.

# 阿里云短信服务配置完整指南
## 一、前期准备
### 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 IDLTAI5txxxxxxxxxxxxxxxxxx
- AccessKey Secretxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
#### 步骤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. 定期查看账户余额