前提提示
视频对应的阿里云短信服务需要企业验证,下面换一种阿里云的产品也是大同小异的
分析讲解
名称 | 类型 | 是否必须 | 描述 |
---|---|---|---|
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 | 验证未通过 | 验证未通过 |
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'
//smsSignId(短信前缀)和templateId(短信模板),可登录国阳云控制台自助申请。参考文档:http://help.guoyangyun.com/Problem/Qm.html
正常返回示例
{
"msg": "成功",
"smsid": "16565614329364584123421", //批次号。可通过该ID查询发送状态或者回复短信。API接口可联系客服获取。
"code": "0",
"balance": "1234" //账户剩余次数
}
失败返回示例
{
"code":"XXXX",
"msg":"错误提示内容",
"ILLEGAL_WORDS":["XX","XX"] // 如有则显示
// 1、http响应状态码对照表请参考:https://help.aliyun.com/document_detail/43906.html;
// 2、如果次数用完会返回 403,Quota Exhausted,此时继续购买就可以;
// 3、如果appCode输入不正确会返回 403,Unauthorized;
}
java代码落地
SmsComponent类
@Data
@ConfigurationProperties(prefix = "spring.alicloud.sms")
@Component
public class SmsComponent {
private String host;
private String path;
private String templateId;
private String smsSignId;
private String appcode;
public void sendSmsCode(String phone,String code){
String host = "https://gyytz.market.alicloudapi.com";
String path = "/sms/smsSend";
String method = "POST";
String appcode = "9a0f9ce1ac154e108d00aade73e1bd3b";
Map<String, String> headers = new HashMap<String, String>();
//最后在header中的格式(中间是英文空格)为Authorization:APPCODE 83359fd73fe94948385f570e3c139105
headers.put("Authorization", "APPCODE " + appcode);
Map<String, String> querys = new HashMap<String, String>();
querys.put("mobile", phone);
querys.put("param", "**code**:+"+code+",**minute**:666");
//smsSignId(短信前缀)和templateId(短信模板),可登录国阳云控制台自助申请。参考文档:http://help.guoyangyun.com/Problem/Qm.html
querys.put("smsSignId", "2e65b1bb3d054466b82f0c9d125465e2");
querys.put("templateId", "ea66d14c664649a69a19a6b47ba028db");
Map<String, String> bodys = new HashMap<String, String>();
try {
HttpResponse response = HttpUtils.doPost(host, path, method, headers, querys, bodys);
System.out.println(response.toString());
//获取response的body
//System.out.println(EntityUtils.toString(response.getEntity()));
} catch (Exception e) {
e.printStackTrace();
}
}
}
//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