阿里云短信服务手机验证码

    技术2022-07-13  78

    目录

    阿里云短信服务了解阿里云用户权限操作开通阿里云短信服务添加短信模板添加签名编写测试代码编写可复用的微服务接口,实现验证码的发送


    阿里云短信服务

    最好有SpringBoot的基础!!!

    了解阿里云用户权限操作

    链接:阿里云官网

    1、注册账户进行登录

    2、点击AccessKey管理,开通使用子用户AccessKey

    3、新建添加用户组

    4、点击权限管理,开通想要的权限

    对应的权限举例:

    管理对象存储服务(OSS)权限

    管理短信服务(SMS)权限

    管理视频点播服务(VOD)权限

    5、添加用户

    6、最后得到AccessKey(ID,密码)

    注意一定要保存好信息

    开通阿里云短信服务

    1、主页搜索短信服务,找到对应面板

    2、找到帮助文档

    阿里巴巴短信服务文档说明

    添加短信模板

    1、短信的具体内容

    如:您的验证码是:${code},请在5分钟内使用,请勿泄露给被人使用。

    2、等待审核通过(需要正当的理由)

    添加签名

    1、公司的名称

    如:【淘宝网】

    2、等待审核通过(需要正当的理由)

    编写测试代码

    1、创建一个SpringBoot的项目

    2、导入依赖

    <!-- 短信验证码--> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.0.3</version> </dependency> <!-- 传送json字符串--> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.62</version> </dependency> <!-- 集成到redis中使用--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data.redis</artifactId> </dependency>

    3、编写测试代码

    @Test void contextLoads{ //连接阿里云 DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou","<accessKeyId>","<accessSecret>"); 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("PhoneNumbers","手机号"); request.putQueryParameter("SignName","签名名称"); request.putQueryParameter("TemplateCode","模板Code号"); //构建一个短信验证码(此处测试写死了) HashMap<String,Object> map = new HashMap<String,Object>(); map.put("code",2233); request.putQueryParameter("TemplateParam",JSONObject.toString(map)); try{ CommonResponse response = Client.getCommonResponse(request); System.out.println(response.getData()); }catch (ServerException e){ e.printStackTrace(); }catch (ClientException e){ e.printStackTrace(); } }

    编写可复用的微服务接口,实现验证码的发送

    application.properties

    server.port = 9090; spring.redis.host = 127.0.0.1 spring.redis.port = 6379

    业务接口

    public interface SendSms(){ public boolean send(String PhoneNum, String templateCode, Map<String, Object> code); }

    实现类:

    public class SendSmsImpl implements SendSms { @Override public boolean send(String PhoneNum, String templateCode, Map<String, Object> code){ //连接阿里云 DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou","<accessKeyId>","<accessSecret>"); 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("PhoneNumbers",PhoneNum); request.putQueryParameter("SignName","签名名称"); request.putQueryParameter("TemplateCode",templateCode); request.putQueryParameter("TemplateParam",JSONObject.toString(code)); try{ CommonResponse response = Client.getCommonResponse(request); System.out.println(response.getData()); return response.getHttpResponse().isSuccess(); }catch (ServerException e){ e.printStackTrace(); }catch (ClientException e){ e.printStackTrace(); } return false; } }

    Controller的编写

    @RestController @CrossOrigin //跨域支持 public class SmsApiController{ @Autowired private SendSms sendSms; @Autowired private RedisTemplate<String,String> redisTemplate; @GetMapping("/send/{phone}") public String code(@PathVariable("phone") String phone){ //调用发送发送(模拟真实业务使用redis) String code = redisTemplate.opsForValue().get(phone); if(!StringUtils.isEmpty(code)){ return phone + ":" + code +"已存在,还没有过期"; } //生成验证码并存储到redis中 code = UUID.randomUUID().toString().substring(0,4); HashMap<String, Object> param = new HashMap<String, Object>(); param.put("code",code); boolean isSend = SendSms.send(phone, "模板Code号", param); if(isSend){ redisTemplate.opsForValue().set(phone,code,5,TimeUnit.SECONDS); return phone + ":" + code +"发送成功!"; }else{ return "发送失败!"; } } }
    如果有收获!!! 希望老铁们来个三连,点赞、收藏、转发 创作不易,别忘点个赞,可以让更多的人看到这篇文章,顺便鼓励我写出更好的博客
    Processed: 0.011, SQL: 9