前提提示
视频对应的阿里云短信服务需要企业验证,下面换一种阿里云的产品也是大同小异的
分析讲解
名称 |
类型 |
是否必须 |
描述 |
mobile |
STRING |
必选 |
需要发送的手机号。(同一手机号码,同一签名验证码,一分钟一次,频率过快可能会导致运营商系统屏蔽,用户无法正常接收。) |
param |
STRING |
可选 |
短信模板变量替换。(字符串格式:**key**:value,**key**:value。例如:**code**:12345,**minute**:5。如模板中有多个变量请使用英文逗号隔开。建议对参数进行URLEncode编码,以免出现乱码等异常情况) |
smsSignId |
STRING |
必选 |
短信前缀ID(签名ID),可在控制台申请。——【1】测试前缀ID:2e65b1bb3d054466b82f0c9d125465e2;【2】测试签名限流规则,同一个号码,1分钟1次,1小时5次,24小时10次,不支持大量商用;【3】控制台&签名和模板申请教程:http://help.guoyangyun.com/Problem/Qm.html |
templateId |
STRING |
必选 |
短信正文ID(模板ID),可在控制台申请。—— 测试ID请用:908e94ccf08b4476ba6c876d13f084ad,对应短信正文为 {验证码:**code**,**minute**分钟内有效,请勿泄漏于他人!} |
错误码 |
错误信息 |
描述 |
1204 |
签名未报备 |
可在控制台申请 —— 【控制台&签名和模板申请教程】http://help.guoyangyun.com/Problem/Qm.html |
1205 |
签名不可用 |
签名一般为:公司名简称、产品名、商城名称、网站名称、APP名称、系统名称、公众号、小程序名称等等。不可以是纯数字、电话号码或者无意义的签名,如:【温馨提示】【测试】【你好】等; |
1302 |
短信内容包含敏感词 |
短信内容包含敏感词 |
1304 |
短信内容过长 |
短信内容实际长度=短信签名+短信内容。(短信计费方式:70字内按1条计费,超出按67字每条计费;一个汉字、数字、字母、符号都算一个字;带变量短信按实际替换后的长度计费) |
1320 |
模板ID不存在 |
可在控制台申请 —— 【控制台&签名和模板申请教程】http://help.guoyangyun.com/Problem/Qm.html |
1403 |
手机号码不正确 |
手机号码不正确 |
1905 |
验证未通过 |
验证未通过 |
1. curl -i -k -X POST 'https://gyytz.market.alicloudapi.com/sms/smsSend?mobile=mobile¶m=**code**%3A12345%2C**minute**%3A5&smsSignId=2e65b1bb3d054466b82f0c9d125465e2&templateId=908e94ccf08b4476ba6c876d13f084ad' -H 'Authorization:APPCODE 你自己的AppCode' 2. 3. //smsSignId(短信前缀)和templateId(短信模板),可登录国阳云控制台自助申请。参考文档:http://help.guoyangyun.com/Problem/Qm.html
正常返回示例
1. { 2. "msg": "成功", 3. "smsid": "16565614329364584123421", //批次号。可通过该ID查询发送状态或者回复短信。API接口可联系客服获取。 4. "code": "0", 5. "balance": "1234" //账户剩余次数 6. }
失败返回示例
1. { 2. "code":"XXXX", 3. "msg":"错误提示内容", 4. "ILLEGAL_WORDS":["XX","XX"] // 如有则显示 5. // 1、http响应状态码对照表请参考:https://help.aliyun.com/document_detail/43906.html; 6. // 2、如果次数用完会返回 403,Quota Exhausted,此时继续购买就可以; 7. // 3、如果appCode输入不正确会返回 403,Unauthorized; 8. }
java代码落地
SmsComponent类
1. @Data 2. @ConfigurationProperties(prefix = "spring.alicloud.sms") 3. @Component 4. public class SmsComponent { 5. 6. private String host; 7. private String path; 8. private String templateId; 9. private String smsSignId; 10. private String appcode; 11. 12. public void sendSmsCode(String phone,String code){ 13. String host = "https://gyytz.market.alicloudapi.com"; 14. String path = "/sms/smsSend"; 15. String method = "POST"; 16. String appcode = "9a0f9ce1ac154e108d00aade73e1bd3b"; 17. Map<String, String> headers = new HashMap<String, String>(); 18. //最后在header中的格式(中间是英文空格)为Authorization:APPCODE 83359fd73fe94948385f570e3c139105 19. headers.put("Authorization", "APPCODE " + appcode); 20. Map<String, String> querys = new HashMap<String, String>(); 21. querys.put("mobile", phone); 22. querys.put("param", "**code**:+"+code+",**minute**:666"); 23. 24. //smsSignId(短信前缀)和templateId(短信模板),可登录国阳云控制台自助申请。参考文档:http://help.guoyangyun.com/Problem/Qm.html 25. 26. querys.put("smsSignId", "2e65b1bb3d054466b82f0c9d125465e2"); 27. querys.put("templateId", "ea66d14c664649a69a19a6b47ba028db"); 28. Map<String, String> bodys = new HashMap<String, String>(); 29. try { 30. 31. HttpResponse response = HttpUtils.doPost(host, path, method, headers, querys, bodys); 32. System.out.println(response.toString()); 33. //获取response的body 34. //System.out.println(EntityUtils.toString(response.getEntity())); 35. } catch (Exception e) { 36. e.printStackTrace(); 37. } 38. } 39. 40. }
//smsSignId(短信前缀)和templateId(短信模板),可登录国阳云控制台自助申请。参考文档:http://help.guoyangyun.com/Problem/Qm.html
配置类相关代码
spring.cloud.alicloud.sms.host=https://gyytz.market.alicloudapi.com
spring.cloud.alicloud.sms.path=/sms/smsSend
spring.cloud.alicloud.sms.templateId=ea66d14c664649a69a19a6b47ba028db
spring.cloud.alicloud.sms.smsSignId=2e65b1bb3d054466b82f0c9d125465e2
spring.cloud.alicloud.sms.appcode=9a0f9ce1ac154e108d00aade73e1bd3b