目录
一、登陆阿里云,开通短信服务(收费的,需要充值,1元能发20条左右),并获取AccessKeyId和AccessKeySecret
四、准备工作已完成,编码环节开始,为了让代码简单直接,抛弃了开发规范~~
本篇文章为记录自己学习发送短信验证码小功能的过程,所有的调用三方接口的功能都如出一辙,在学习一个调用三方接口的过程中总结经验,再学习其他的,思路就会很清晰,就像我刚学完发送邮件(上一篇博客有总结),现在学发短信,很清楚自己该干什么。
一、登陆阿里云,开通短信服务(收费的,需要充值,1元能发20条左右),并获取AccessKeyId和AccessKeySecret
AccessKeyId,用阿里云官网的话说,是访问阿里云API的密钥,一个用户可以有多个,每次向阿里云服务发送请求,需要带着AccessKeyId,阿里云接收到请求以后需要验证这个AccessKeyId-AccessKeySecret,验证通过才可进行访问,获取方法如下:
1、开通短信服务
登陆以后,在搜索框直接搜索短信服务 控制台,进入控制台,未开通的会提示开通,直接开通即可
2、进入AccessKey管理界面
进入控制台后,鼠标放到右上角自己头像,会看到有个 管理AccessKeyId 选项
3、点击创建,发送验证码验证即可创建成功
二、创建短信模板与签名
1、创建短信模板,创建完模板后有个模板CODE,java代码需要用到
2、创建签名
验证码类型不需要上传什么证明
三、引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<-- 阿里依赖 -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.3</version>
</dependency>
<-- 由于SpringBoot自带的jackson的API不如fastjson好用,所以又引入了依赖>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency>
四、准备工作已完成,编码环节开始,为了让代码简单直接,抛弃了开发规范~~
1、代码,注意,参数的属性名必须跟我的保持一致,例如设置短信签名request.putQueryParameter("SignName", signName),属性名必须为SignName,错一个字母就会报错
@RestController
@RequestMapping("/sms/test")
public class SmsTestController {
// 阿里云获取的访问API密钥
private static final String accessKeyId = "自己的accessKeyId";
private static final String accessKeySecret = "自己的accessKeySecret";
//短信签名,即最前面在【】这个中的文字,可以打开手机随便看一条商业短信,例:【淘宝】亲爱的用户.....
private static final String signName = "自己的签名";
// 短信模板,即在阿里云短信服务中自己创建的短信模板ID
private static final String templateCode = "自己的模板ID";
@RequestMapping(value = "/send", method = RequestMethod.POST)
public ResultVO sendSms(String phone) throws ClientException {
// 初始化acsClient,需要填写自己的accessKeyId和accessSecret
// regionId只有一个杭州,不支持其他地区
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
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", phone);
// 短信签名
request.putQueryParameter("SignName", signName);
// 模板ID
request.putQueryParameter("TemplateCode", templateCode);
// 构建短信模板参数替换,要求格式为json
// 如果你的短信模板为:验证码为:${code},那么你的json为:{"code": "2345"}
Map<String, String> jsonParam = new HashMap<>();
jsonParam.put("code", "2345");
//此处我用的json格式化的依赖是fastjson,SpringBoot自带的是jackson
request.putQueryParameter("TemplateParam", JSON.toJSONString(jsonParam));
// 发送请求并获取响应,判断是否成功
CommonResponse response = client.getCommonResponse(request);
if (response.getHttpResponse().isSuccess()) {
return ResultVO.success();
}
return ResultVO.fail();
}
}
2、代码解释
1)accessKeyId和accessKeySecret是本篇文章第一节说的,不多说了
2)signName短信签名,需要跟阿里云短信服务里自己创建并审核通过的签名保持一致,需要注意的是自己不需要加【】,阿里会自动给你的签名匹配上这个中文的中括号
3)templateCode
五、如何学习阿里短信API
在阿里短信服务控制台可以看到一个快速学习,点进去,然后选择查看 API Demo
如下图:
这里有个比较详细的案例,有兴趣的小伙伴可以去看看,API文档每一个都介绍了是干嘛用的,是否必填,而且在中间那参数栏填了参数,最右侧的代码示例就会增加代码