22、短信发送
22.1、短信服务介绍
1、目前市面上有很多第三方提供的短信服务,这些第三方短信服务会和各个运营商(移动、电信、联通)对接,我们只需要注册成为会员并且按照提供的开发文档进行调用就可以发送短信。需要说明的是,这些短信服务一般都是收费服务。
2、常用的短信服务:
- 阿里云
- 华为云
- 腾讯云
- 京东
- 梦网
- 乐信
22.2、阿里云短信服务
22.2.1、介绍
1、阿里云短信服务(Short Message Service
)是广大企业客户快速触达手机用户所优选使用的通信能力。调用API
或用群发助手,即可发送验证码、通知类和营销类短信;国内验证短信秒级触达,到达率最高可达99%;国际/港澳台短信覆盖200多个国家和地区,安全稳定,广受出海企业选用。
2、应用场景
- 验证码
- 短信通知
- 推广短信
22.2.2、注册账号
1、阿里云官网:https://www.aliyun.com
2、注册步骤
点击网页右上角的立即注册按钮,进入注册页面,可以选择扫码注册,也可以选择账号密码注册。
注册成功后,点击登录按钮进行登录。
22.2.3、开通短信服务
登录后进入控制台, 在左上角的菜单栏中搜索短信服务。第一次使用,需要点击,并开通短信服务。
22.2.4、设置短信签名
1、登录后进入短信服务管理页面,选择国内消息菜单:
2、点击添加签名
1、短信签名是短信发送者的署名,表示发送方的身份。
2、注意:
目前,阿里云短信服务申请签名主要针对企业开发,个人申请时有一定难度的,在审核时,会审核资质,需要上传营业执照 ;所以,我们课程中,主要是演示一下短信验证码如何发送,大家只需要学习这块儿的开发流程、实现方式即可,无需真正的发送短信。如果以后在企业中做项目,需要发送短信,我们会以公司的资质去申请对应的签名。
22.2.5、设置短信模板
1、切换到【模板管理】标签页:
2、短信模板包含短信发送内容、场景、变量信息。
模板的详情如下:
3、添加模板
添加的短信模板,也是需要进行审核的只有审核通过,才可以正常使用。
22.2.6、设置AccessKey
1、AccessKey 是访问阿里云 API 的密钥,具有账户的完全权限,我们要想在后面通过API调用阿里云短信服务的接口发送短信,那么就必须要设置AccessKey。
2、我们点击右上角的用户头像,选择"AccessKey管理",这时就可以进入到AccessKey的管理界面。
3、进入到AccessKey的管理界面之后,提示两个选项 “继续使用AccessKey” 和 “开始使用子用户AccessKey”,两个区别如下:
- 继续使用AccessKey:如果选择的是该选项,我们创建的是阿里云账号的AccessKey,是具有账户的完全权限,有了这个AccessKey以后,我们就可以通过API调用阿里云的服务,不仅是短信服务,其他服务(OSS,语音服务,内容安全服务,视频点播服务…等)也可以调用。 相对来说,并不安全,当前的AccessKey泄露,会影响到我当前账户的其他云服务。
- 开始使用子用户AccessKey:可以创建一个子用户,这个子用户我们可以分配比较低的权限,比如仅分配短信发送的权限,不具备操作其他的服务的权限,即使这个AccessKey泄漏了,也不会影响其他的云服务,相对安全。
4、创建子用户AccessKey
5、配置权限
上述我们已经创建了子用户, 但是这个子用户,目前没有任何权限,接下来,我们需要为创建的这个用户来分配权限。
22.3、代码开发
1、使用阿里云短信服务发送短信,可以参照官方提供的文档即可。
官方文档: https://help.aliyun.com/product/44282.html?spm=5176.12212571.help.dexternal.57a91cbewHHjKq
2、具体开发步骤:
① 导入maven
坐标
<!--阿里云短信服务-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.16</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>2.1.0</version>
</dependency>
② 调用API
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
/**
* 短信发送工具类
*/
public class SMSUtils {
/**
* 发送短信
* @param signName 签名
* @param templateCode 模板
* @param phoneNumbers 手机号
* @param param 参数
*/
public static void sendMessage(String signName, String templateCode,String phoneNumbers,String param){
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "", "");
IAcsClient client = new DefaultAcsClient(profile);
SendSmsRequest request = new SendSmsRequest();
request.setSysRegionId("cn-hangzhou");
request.setPhoneNumbers(phoneNumbers);
request.setSignName(signName);
request.setTemplateCode(templateCode);
request.setTemplateParam("{\"code\":\""+param+"\"}");
try {
SendSmsResponse response = client.getAcsResponse(request);
System.out.println("短信发送成功");
}catch (ClientException e) {
e.printStackTrace();
}
}
}