阿里云短信验证码 - 使用样例
发送短信验证码的流程:
流程说明:
- 用户向SSO系统发送请求,在请求中传递手机号;
- SSO系统接收到请求后,生成随机验证码以及短信内容,请求阿里云短信服务;
- 阿里云短信服务接收到请求后,会进行一系列的验证,比如账号余额、短信模板是否正确等,最后向运营商发起请求;
- 运营商接收到请求后,向该手机号下发短信,用户即可收到短信;
3.6.1、阿里云短信服务
3.6.1.1、申请签名与模板
https://dysms.console.aliyun.com/dysms.htm?spm=5176.12818093.0.ddysms.2a4316d0ql6PyD
说明:申请签名时,个人用户只能申请一个并且签名的名称必须为“ABC商城”,否则审核不通过。
申请模板:
审核时间需要12小时,请耐心等待
3.6.1.2、设置用户权限
在阿里云中,需要在RAM服务中创建用户以及权限,才能通过api进行访问接口。
创建用户:
创建完成后要保存AccessKey Secret和AccessKey ID,AccessKey Secret只显示这一次,后面将不再显示。
添加权限:
3.6.1.3、示例代码
文档:https://help.aliyun.com/document_detail/101414.html?spm=a2c4g.11186623.6.625.18705ffa8u4lwj:
package com.tanhua.sso.service;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
/*
pom.xml
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.3</version>
</dependency>
*/
public class SendSms {
public static void main(String[] args) {
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou",
"LTAI4G7d2Q9CHc741gighjTF", "uKOOGdIKvmoGhHlej8cJY8H3nlU6Fj");
IAcsClient client = new DefaultAcsClient(profile);
CommonRequest request = new CommonRequest();
request.setSysMethod(MethodType.POST);
request.setSysDomain("dysmsapi.aliyuncs.com");
request.setSysVersion("2017-05-25");
request.setSysAction("SendSms");
request.putQueryParameter("RegionId", "cn-hangzhou");
request.putQueryParameter("PhoneNumbers", "158****7944"); //目标手机号
request.putQueryParameter("SignName", "ABC商城"); //签名名称
request.putQueryParameter("TemplateCode", "SMS_204756062"); //短信模板code
request.putQueryParameter("TemplateParam", "{\"code\":\"123456\"}");//模板中变量替换
try {
CommonResponse response = client.getCommonResponse(request);
//{"Message":"OK","RequestId":"EC2D4C9A-0EAC-4213-BE45-CE6176E1DF23","BizId":"110903802851113360^0","Code":"OK"}
System.out.println(response.getData());
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
}
}