一、准备工作
首先要开通阿里云的短信服务,然后在控制台中找到短信服务。进入后就是以下界面。其中我们需要4个东西:accessKeyId、accessKeySecret、短信模板和短信签名。
获取AcessKey:
accessKeyId、accessKeySecret是阿里云API的密钥,阿里云许多产品都需要他们绑定,所以需要注意防护。进入AccessKey页面通过短信获取即可,第一次使用的话需要创建一个,如下图所示。
短信签名申请:
需要注意的是短信签名不需要自己添加【】、()、[]符号,签名发送会自带【】符号,避免重复。其余个人和企业账户规则可在申请规范中详细查看。如下图:
短信模板申请:
1、选择模板类型。
2、设置模板名称。
3、设置模板内容:最终短信会显示的内容,变量用${code}占用。
4、填写申请说明。
示例及模板预览如下图:
二、代码实现
引入阿里云短信SDK
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>3.7.1</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>1.1.0</version>
</dependency>
示例工具类
/**
* @author CXD
* @Description 阿里云发送短信工具类
* @date 2021/1/4
*/
public class AlySmsUtils {
// 产品名称:云通信短信API产品,开发者无需替换
static final String product = "Dysmsapi";
// 产品域名,开发者无需替换
static final String domain = "dysmsapi.aliyuncs.com";
// TODO 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找)
static final String accessKeyId = "********";
static final String accessKeySecret = "***********";
//自定义短信静态类
public static void smsToTest(String telephone, String code) throws ClientException {
String templateCode = "SMS_123456789"; //在阿里云官网注册的短信模板码
sendSms(telephone,code, templateCode);
}
public static SendSmsResponse sendSms(String telephone, String code, String templateCode) throws ClientException {
// 可自助调整超时时间
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
System.setProperty("sun.net.client.defaultReadTimeout", "10000");
// 初始化acsClient,暂不支持region化
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
IAcsClient acsClient = new DefaultAcsClient(profile);
// 组装请求对象-具体描述见控制台-文档部分内容
SendSmsRequest request = new SendSmsRequest();
// 必填:待发送手机号
request.setPhoneNumbers(telephone);
// 必填:短信签名-可在短信控制台中找到
request.setSignName("测试模板"); //阿里官网注册的短信签名名称
// 必填:短信模板-可在短信控制台中找到
request.setTemplateCode(templateCode);
// 可选:模板中的变量替换JSON串,如模板内容为"亲爱的用户,您的验证码为${code}"时,此处的值为
request.setTemplateParam("{\"code\":\"" + code + "\"}");
// 选填-上行短信扩展码(无特殊需求用户请忽略此字段)
// request.setSmsUpExtendCode("90997");
// 可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
request.setOutId("yourOutId");
// hint 此处可能会抛出异常,注意catch
SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
if (sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {
System.out.println("短信发送成功!");
} else {
System.out.println("短信发送失败!");
}
return sendSmsResponse;
}
}
使用测试类
//发送短信验证码
public static void SmsCode() throws ClientException {
//发送信息的手机号
String telephone = "12345678910";
//发送的验证码
String code = "666666";
//发送的短信模板(阿里云平台设置)
String templateCode = "SMS_132695077";
AlySmsUtils.sendSms(telephone, code, templateCode);
}
public static void main(String[] args) throws ClientException {
SmsCode();
}