阿里云短信服务
1. 申请
阿里云:https://www.aliyun.com/
短信发送使用场景:
1.在线预约时,确认手机号
2.预约成功之后,发送通知
3.手机号快速登录
注册阿里云是免费的,短信服务是收费的
2. 设置短信签名、设置短信模板
2.1 短信服务-国内消息-签名管理-添加签名
签名指的是短信发送的内容中最后会留有一个组织或者企业的签名
个人用户只能使用验证码,需要2个小时左右的验证时间
2.2 短信服务-国内消息-模板管理-添加模板
模板指的是发送给用户的短信内容
模版内容:给用户发送验证码的内容
可以使用常用模板库快速生成
3. 设置access keys
鼠标放在个人头像上,会出现accessKeys,点击进去。
4. 代码实现
导入maven坐标(新)
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.1.0</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.2</version>
</dependency>
老版本
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>1.0.0</version>
</dependency>
导入SMSUtils
package com.ittest.utils;
//import com.aliyuncs.CommonRequest;
//import com.aliyuncs.CommonResponse;
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;
import com.aliyuncs.profile.IClientProfile;
/**
* 短信发送工具类
*/
public class SMSUtils {
public static final String VALIDATE_CODE = "";//模板code
public static final String ORDER_NOTICE = "";//体检预约成功通知,暂时用不了
public static final String accessKeyId = "";// 你的accessKeyId,参考本文档步骤2
public static final String accessKeySecret = "";// 你的accessKeySecret,参考本文档步骤2
public static final String signName = "";// 签名名称
/**
* 发送短信
* @param phoneNumbers
* @param param
* @throws ClientException
*/
public static void sendShortMessage(String templateCode,String phoneNumbers,String param) throws ClientException{
// 设置超时时间-可自行调整
// System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
// System.setProperty("sun.net.client.defaultReadTimeout", "10000");
//// // 初始化ascClient需要的几个参数
// final String product = "Dysmsapi";// 短信API产品名称(短信产品名固定,无需修改)
// final String domain = "dysmsapi.aliyuncs.com";// 短信API产品域名(接口地址固定,无需修改)
//// // 替换成你的AK
//
//// // 初始化ascClient,暂时不支持多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();
// // 使用post提交
// request.setMethod(MethodType.POST);
// // 必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式
// request.setPhoneNumbers(phoneNumbers);
// // 必填:短信签名-可在短信控制台中找到
// request.setSignName(signName);
// // 必填:短信模板-可在短信控制台中找到
// request.setTemplateCode(templateCode);
// // 可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
// // 友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含\r\n的情况在JSON中需要表示成\\r\\n,否则会导致JSON在服务端解析失败
// request.setTemplateParam("{\"code\":\""+param+"\"}");
// // 可选-上行短信扩展码(扩展码字段控制在7位或以下,无特殊需求用户请忽略此字段)
// // request.setSmsUpExtendCode("90997");
// // 可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
// // request.setOutId("yourOutId");
// // 请求失败这里会抛ClientException异常
// SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
// if (sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {
// // 请求成功
// System.out.println("请求成功");
// }else{
// System.out.println(sendSmsResponse.getCode());
// System.out.println(sendSmsResponse.getMessage());
// }
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
IAcsClient client = new DefaultAcsClient(profile);
CommonRequest request = new CommonRequest();
request.setMethod(MethodType.POST);
request.setDomain("dysmsapi.aliyuncs.com");
request.setVersion("2017-05-25");
request.setAction("SendSms");
request.putQueryParameter("RegionId", "cn-hangzhou");
request.putQueryParameter("PhoneNumbers", phoneNumbers);
request.putQueryParameter("SignName", signName);
request.putQueryParameter("TemplateCode", templateCode);
request.putQueryParameter("TemplateParam", "{\"code\":\""+param+"\"}");
try {
CommonResponse response = client.getCommonResponse(request);
System.out.println(response.getData());
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws ClientException {
String s = ValidateCodeUtils.generateValidateCode4String(6);
SMSUtils.sendShortMessage(SMSUtils.VALIDATE_CODE,"",s);
}
}
1.VALIDATE_CODE和ORDER_NOTICE指定模板的CODE
2.request.setSignName(“我的app名称”);设置签名的名称,在阿里云签名管理中定义的名字
3.request.setTemplateParam("{“code”:""+param+""}");设置参数,拼合成JSON发送即可