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

6.4 KiB
Raw Permalink Blame History

阿里云短信服务配置完整指南

一、前期准备

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 中配置

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. 开发环境配置

开发环境建议使用模拟模式:

aliyun:
  sms:
    enabled: false  # 关闭真实发送
    access-key-id: 
    access-key-secret: 
    sign-name: 红色思政学习平台
    template-code: 
    region-id: cn-hangzhou

模拟模式特点

  • 不会实际发送短信(节省费用)
  • 验证码会在控制台日志中输出
  • 适合开发和测试

3. 生产环境配置

生产环境使用真实发送:

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. 启动项目

cd schoolNewsServ/admin
mvn spring-boot:run

2. 测试发送验证码

使用 Postman 或 curl 测试:

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. 监控告警

  • 设置短信发送量告警
  • 监控异常发送行为
  • 定期查看短信发送报表

十、技术支持


最后提醒

  1. 开发环境务必使用 enabled: false 避免浪费
  2. AccessKey 信息要妥善保管
  3. 注意短信发送频率限制
  4. 定期查看账户余额