目录
一、登陆阿里云,开通短信服务(收费的,需要充值,1元能发20条左右),并获取AccessKeyId和AccessKeySecret
二、创建短信模板与签名
三、引入依赖
四、准备工作已完成,编码环节开始,为了让代码简单直接,抛弃了开发规范~~
五、如何学习阿里短信API
本篇文章为记录自己学习发送短信验证码小功能的过程,所有的调用三方接口的功能都如出一辙,在学习一个调用三方接口的过程中总结经验,再学习其他的,思路就会很清晰,就像我刚学完发送邮件(上一篇博客有总结),现在学发短信,很清楚自己该干什么。
一、登陆阿里云,开通短信服务(收费的,需要充值,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 = "自己的签名";// 短信模板,即在阿里云短信服务中自己创建的短信模板IDprivate 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("");request.setSysVersion("-05-25");request.setSysAction("SendSms");request.putQueryParameter("RegionId", "cn-hangzhou");// 短信接收者手机号request.putQueryParameter("PhoneNumbers", phone);// 短信签名request.putQueryParameter("SignName", signName);// 模板IDrequest.putQueryParameter("TemplateCode", templateCode);// 构建短信模板参数替换,要求格式为json// 如果你的短信模板为:验证码为:${code},那么你的json为:{"code": "2345"}Map<String, String> jsonParam = new HashMap<>();jsonParam.put("code", "2345");//此处我用的json格式化的依赖是fastjson,SpringBoot自带的是jacksonrequest.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文档每一个都介绍了是干嘛用的,是否必填,而且在中间那参数栏填了参数,最右侧的代码示例就会增加代码