SpringBoot快速集成阿里云短信验证服务

添加用户组和用户

首先登陆阿里云 在个人头像这里可以看到AccessKey管理
在这里插入图片描述
点击进去 添加一个用户 然后将一个用户添加进用户组下
创建用户(开启子用户):
在这里插入图片描述
在这里插入图片描述
给用户组添加权限 并拿到AccessKey
在这里插入图片描述
点击刚刚创建的用户 会看到用户的具体的信息,然后拿到AccessKey和密码即可用来认证和授权
在这里插入图片描述
在这里插入图片描述
注意:AccessKey和AccessKey Secret 记得保存下来,千万不要泄露。。。

开通阿里云短信服务

在这里插入图片描述
添加签名和模版
在这里插入图片描述
添加签名
在这里插入图片描述添加模版
在这里插入图片描述
注意:添加完签名和模后都必须要等待审核通过!!!
现在我们已经有了授权码和密码、签名和模版!!!即可开始使用了!!!

编写代码开始测试 非常简单

在这里插入图片描述
即可看到阿里云短信服务的SDK,Java、PHP等语言的都有!!
在这里插入图片描述
文档连接:https://help.aliyun.com/document_detail/112148.html?spm=a2c4g.11174283.6.657.5e4f2c42B98bHY

创建springboot项目导入依赖

        <!--导入redis存储验证码-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
       <!--导入web方便测试-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
         <!--导入阿里云短信服务sdk-->
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.5.3</version>
        </dependency>
        <!-- 短信验证码那一块需要传入JSON字符串-->
         <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.62</version>
        </dependency>

配置文件

server:
  port: 8080

spring:
  redis:
    host: redis的host地址
    port: 端口号

API Demo文档
https://api.aliyun.com/?spm=a2c4g.11186623.2.12.3fcb7f20YiuHRq#/?product=Dysmsapi&lang=JAVA
在这里插入图片描述
可以看到文档里面的demo
我们复制进代码里面进行测试 可以仔细看一下需要改的地方哦!!!

package com.yangzihao.springbootsms;

import com.alibaba.fastjson.JSON;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.HashMap;
import java.util.Map;

@SpringBootTest
class SpringbootSmsApplicationTests {
    
    

    @Test
    void contextLoads() {
    
    
        //连接阿里云   输入之前生成的AccessKey和密码即可
        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "这里写密钥", "这里写秘钥的密码"); //前面的cn-hangzhou不要变 后面填写授权码和密码
        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("AddSmsSign");

        //自定义(参数、签名、模版、验证码、手机号!!) 参数不要瞎填
        request.putQueryParameter("PhoneNumbers", "1539280xxxx"); //这里填写要发送到的手机号
        request.putQueryParameter("SignName", "常安JAVA学习网站");  //签名 (刚刚添加的签名)
        request.putQueryParameter("TemplateCode", "SMS_204111877"); //模版 (刚刚添加的模版的CODE)

        //构建一个短信验证码
        Map<String,Object> map=new HashMap<>();
        map.put("code",2233); //短信  这里先写死进行测试
        request.putQueryParameter("TemplateParam", JSON.toJSONString(map)); //这里的验证码参数需要传入JSON字符串

        try {
    
    
            CommonResponse response = client.getCommonResponse(request);//发送
            System.out.println(response.getData());//响应  验证是否发送成功
        } catch (ServerException e) {
    
    
            e.printStackTrace();
        } catch (ClientException e) {
    
    
            e.printStackTrace();
        }
    }
}

直接附上真实的业务场景吧!!!

controller表现层

package com.yangzihao.springbootsms.controller;
import com.yangzihao.springbootsms.service.SmsSend;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Random;
import java.util.UUID;
import java.util.concurrent.TimeUnit;

@RestController
@CrossOrigin //跨域支持
public class SmsSendController {
    
    

    @Autowired
    private SmsSend smsSend;

    @Autowired
    private RedisTemplate<String,String> redisTemplate;

    /*请求带上手机号、模板code、验证码code*/
    @RequestMapping("/sendCod/{phone}")
    public String smsSend(@PathVariable("phone") String phoneNumbers){
    
    
        String code = redisTemplate.boundValueOps(phoneNumbers).get();
        if (!StringUtils.isEmpty(code)){
    
    
            return phoneNumbers+":"+code+"还没过期";
        }
        //生成随机验证码并存储
         code = UUID.randomUUID().toString().substring(0, 4);
        boolean isSend = smsSend.smsSend(phoneNumbers, "SMS_204111877", code);//发送验证码
        if (isSend){
    
    
            redisTemplate.boundValueOps(phoneNumbers).set(code,2, TimeUnit.MINUTES); //发送成功即存入redis
            return phoneNumbers+":"+code+"发送成功";
        }else {
    
    
            return phoneNumbers+":"+code+"发送失败";
        }
    }
}


service业务层

package com.yangzihao.springbootsms.service.impl;
import com.alibaba.fastjson.JSON;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.yangzihao.springbootsms.service.SmsSend;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;

@Service
public class SmsSendImpl implements SmsSend {
    
    

    @Override
    public boolean smsSend(String phoneNumbers, String templateCode, String code) {
    
    
        //连接阿里云   输入之前生成的AccessKey和密码即可
        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "这里写之前生成的秘钥", "这里写之前生成秘钥的密码");
        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("AddSmsSign");

        //自定义(参数、签名、模版、验证码、手机号!!) 参数不要瞎填
        request.putQueryParameter("PhoneNumbers", phoneNumbers); //手机号
        request.putQueryParameter("SignName", "常安JAVA学习网站");  //签名 (刚刚添加的签名)
        request.putQueryParameter("TemplateCode", templateCode); //模版 (刚刚添加的模版的CODE)

        //构建一个短信验证码
        Map<String,Object> map=new HashMap<>();
        map.put("code",code);
        request.putQueryParameter("TemplateParam", JSON.toJSONString(map)); //这里的验证码参数需要传入JSON字符串

        try {
    
    
            CommonResponse response = client.getCommonResponse(request);//发送
            System.out.println(response.getData());//响应
            return  response.getHttpResponse().isSuccess();  //响应发送成功则返回true
        } catch (ServerException e) {
    
    
            e.printStackTrace();
        } catch (ClientException e) {
    
    
            e.printStackTrace();
        }
        return false;
    }
}

就是这么简单、恭喜你,完结撒花!!!

猜你喜欢

转载自blog.csdn.net/weixin_45647685/article/details/114138539