阿里云短信验证码实战

打印 上一主题 下一主题

主题 536|帖子 536|积分 1608

一、创建阿里云短信权限用户

1、登岸阿里云之后我们点击头像,接着点击AccessKey:

2、选择开始使用子用户 :

3、我们先要创建一个用户组:

4、依次点击新建的用户组——授权管理,给用户组授权,开通短信验证码服务:

5、接着我们新建一个用户(具体用来操纵的账号),肯定要勾选OpenAPI调用访问,如许我们才能通过代码访问:

记得把AccessKey保存下来,以为背面会看不到:

6、接着将这个用户添加到刚刚的用户组即可:

二、开通阿里云短信服务

1、在搜索框搜索短信服务,点击加载之后,选择免费开通,即可开通短信服务。
2、我们开通短信服务之后,还要设置签名和模板:

签名就相当于公司名称,模板就是短信的模板,验证码短信分为几部分:

默认会给我们设置一个模板,我们可以直接用这个模板(注意:模板肯定要和某个签名绑定,否则发送不了验证码):

但是没有默认的签名,我们需要本身添加,申请里有肯定要有理有据,比较正当,等待审核通过即可:

可以在快速学习和测试模块,体验一下短信验证码的使用:

这一块也会有实现短信验证码功能的代码:

三、编写测试代码

我们可以在资助文档中查看具体的使用步调:资助文档
1、首先在项目中导入Java SDK的依靠:
  1. <!--阿里云短信验证码sdk-->
  2.         <dependency>
  3.             <groupId>com.aliyun</groupId>
  4.             <artifactId>aliyun-java-sdk-core</artifactId>
  5.             <version>4.5.16</version>
  6.         </dependency>
  7.         <dependency>
  8.             <groupId>com.alibaba</groupId>
  9.             <artifactId>fastjson</artifactId>
  10.             <version>1.2.83</version>
  11.         </dependency>
  12.                        
  13.                         <!--springboot集成redis-->
  14.         <dependency>
  15.             <groupId>org.springframework.boot</groupId>
  16.             <artifactId>spring-boot-starter-data-redis</artifactId>
  17.         </dependency>
复制代码
然后编写一个测试类来测试是否能正常发送验证码:
  1. //连接阿里云
  2.         DefaultProfile profile = DefaultProfile.getProfile("cn-beijing", "Your AccessKey ID", "Your AccessKey Secret");
  3.         IAcsClient client = new DefaultAcsClient(profile);
  4.         //构建请求,一般这里不用动
  5.         CommonRequest request = new CommonRequest();
  6.         request.setSysMethod(MethodType.POST);
  7.         request.setSysDomain("dysmsapi.aliyuncs.com");
  8.         request.setSysVersion("2017-05-25");
  9.         request.setSysAction("SendSms");
  10.         //设置发送相关的参数
  11.         request.putQueryParameter("PhoneNumbers","xxxx"); //手机号
  12.         request.putQueryParameter("SignName","xxxx"); //申请阿里云 签名名称
  13.         request.putQueryParameter("TemplateCode","xxxxx"); //申请阿里云 模板code
  14.         HashMap<String, Object> map = new HashMap<>();
  15.         map.put("code", 123456);
  16.         request.putQueryParameter("TemplateParam", JSONObject.toJSONString(map));//验证码数据,转换json数据传递
  17.         try{
  18.             CommonResponse response = client.getCommonResponse(request);
  19.             System.out.println(response.getData());
  20.         } catch (ClientException e){
  21.             e.printStackTrace();
  22.         }
复制代码
测试代码写完之后我们就可以实行这段代码举行测试了,结果成功!
四、封装发送短信接口

1、编写Service接口:
  1. public interface SendSms {
  2.     //手机号、模板代码、验证码
  3.     public boolean send(String phoneNum, String templateCode, Map<String, Object> code);
  4. }
复制代码
2、编写接口实现类:
  1. @Service
  2. public class SendSmsImpl implements SendSms {
  3.     @Override
  4.     public boolean send(String phoneNum, String templateCode, Map<String, Object> code) {
  5.         //连接阿里云
  6.         DefaultProfile profile = DefaultProfile.getProfile("cn-beijing", "LTAI5tMk6A312KwNVnxNuTno", "1MyEwE0uqfHYTFyFAcydutAFBZgGBj");
  7.         IAcsClient client = new DefaultAcsClient(profile);
  8.         //构建请求,一般这里不用动
  9.         CommonRequest request = new CommonRequest();
  10.         request.setSysMethod(MethodType.POST);
  11.         request.setSysDomain("dysmsapi.aliyuncs.com");
  12.         request.setSysVersion("2017-05-25");
  13.         request.setSysAction("SendSms");
  14.         //设置发送相关的参数
  15.         request.putQueryParameter("PhoneNumbers",phoneNum); //手机号
  16.         request.putQueryParameter("SignName","唐世华个人签名"); //申请阿里云 签名名称
  17.         request.putQueryParameter("TemplateCode",templateCode); //申请阿里云 模板code
  18.         request.putQueryParameter("TemplateParam", JSONObject.toJSONString(code));//验证码数据,转换json数据传递,这里要用map
  19.         try{
  20.             CommonResponse response = client.getCommonResponse(request);
  21.             System.out.println(response.getData());
  22.             return response.getHttpResponse().isSuccess();  //判断发送是否成功
  23.         } catch (ClientException e){
  24.             e.printStackTrace();
  25.         }
  26.         return false;
  27.     }
  28. }
复制代码
3、编写Controller测试类:
  1. @RestController
  2. @CrossOrigin  //跨域支持
  3. public class SendSmsController {
  4.     @Autowired
  5.     private SendSms sendSms;
  6.     @Autowired
  7.     private RedisTemplate<String, String> redisTemplate;
  8.     @GetMapping("/send/{phone}")
  9.     public String code(@PathVariable("phone") String phone){
  10.         //调用方法模拟真实业务
  11.         //如果redis缓存中存在手机号的验证码,说明验证码还未过期,可继续使用
  12.         String code = redisTemplate.opsForValue().get(phone);
  13.         System.out.println(code);
  14.         if(!StringUtils.isEmpty(code)){
  15.             return phone + ":" + code + "已存在,还没有过期,可继续使用!";
  16.         }
  17.         //生成验证码并存储到redis中
  18.         //生成验证码(包含数字和字母)
  19.         //code = UUID.randomUUID().toString().substring(0, 4);
  20.         //生成纯数字
  21.         int uuid = UUID.randomUUID().toString().replaceAll("-","").hashCode();
  22.         uuid = uuid < 0 ? -uuid : uuid;//String.hashCode() 值会为空
  23.         code = String.valueOf(uuid).substring(0, 4);
  24.         HashMap<String, Object> param = new HashMap<>();
  25.         param.put("code", code);
  26.         boolean isSend = sendSms.send(phone, "SMS_274310067", param);  //发送验证码
  27.         if(isSend){ //发送成功
  28.             redisTemplate.opsForValue().set(phone, code, 5, TimeUnit.SECONDS);  //将验证码存到redis,设置5分钟过期
  29.             return phone + ":" + code + "发送成功!";
  30.         }else {
  31.             return "发送失败";
  32.         }
  33.     }
  34. }
复制代码
完结撒花!!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

盛世宏图

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表