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