前提工作:

1、注册阿里云账号
2、开通短信服务
3、账号需要充值一点金额, 短信服务是收费的
4、学习官方文档

一、注册阿里云账号

自己注册, 略

二、开通短信服务

1、登陆阿里云控制台, 搜索短信服务

java 阿里短信获取详细信息 springboot阿里云短信_spring


2、开通短信服务我这里已经开通过了, 第一次进入会提示开通服务, 点击开通即可。

java 阿里短信获取详细信息 springboot阿里云短信_redis_02


java 阿里短信获取详细信息 springboot阿里云短信_微服务_03


3、学习官方文档

官方文档是我们学习新技术最好的参考资料, 这里会给出所有的样例, 以及向我们详细的介绍这项技术。 (好多技术文档都是英文的, 阅读起来比较费劲, 直接就把一部分同学劝退了, 好在阿里云是国产。。。)找到文档, 之后就开始阅读把

链接:

https://help.aliyun.com/document_detail/59210.html?spm=a2c4g.11186623.6.558.508715ecm4kLnC

点击帮助文档, 哇塞 , 这么全!新手必看, 1 、2 、 3、4 还担心学不会嘛!

java 阿里短信获取详细信息 springboot阿里云短信_spring_04

点击第一步

阅读步骤后, 我们发现获取 AccessKey、 和创建模板签名是管加你步骤, 熟悉使用第三方服务的同学对AccessKey都比较了解了, 它就是相当于我们的账号, 还有一个对应的密码,我们在编码的时候不可能扫码登陆阿里云把, 不现实, 所有就有了替代产品, AccessKey, 这个AccessKey去自己的阿里云控制台就可以获取到了。

java 阿里短信获取详细信息 springboot阿里云短信_redis_05

获取 AccessKey

自己点击获取, 一定要注意保密。

java 阿里短信获取详细信息 springboot阿里云短信_spring_06

创建短信模板和签名

先分析一波短信验证码, 这个每天见, 啊啊啊哈哈哈,
签名:

【 短信签名, 一般公司的名字, 自己平台的名字, 官方点的】

模板:

就是你具体要发送的内容了

java 阿里短信获取详细信息 springboot阿里云短信_java 阿里短信获取详细信息_07

了解之后, 就开始创建把, 返回到我们的短信控制台, 点击创建

java 阿里短信获取详细信息 springboot阿里云短信_redis_08

1、添加签名

注意要正式一点, 我已经添加过一个了, 不可以添加了。。。。

java 阿里短信获取详细信息 springboot阿里云短信_redis_09

2、添加模板

依旧傻瓜式操作, 依次填写内容,开始申请。

java 阿里短信获取详细信息 springboot阿里云短信_微服务_10

成功界面如下:

开始快乐编码把!

java 阿里短信获取详细信息 springboot阿里云短信_spring_11

编写微服务

1、学习官方 SDK
2、编码, 微服务

一、学习官方SDK

我们想要的东西, 在控制台首页全部都有!!!!

java 阿里短信获取详细信息 springboot阿里云短信_spring_12

点击进去

你会发现, 直接就有生成的代码, 没错!!!阿里就是这么强大!!!,添写必要的参数 , Run !!!

java 阿里短信获取详细信息 springboot阿里云短信_阿里云_13

实例:

java 阿里短信获取详细信息 springboot阿里云短信_java 阿里短信获取详细信息_14

结果:

哈哈哈, 激动吗, 生活中的验证码就是这样发类 ,简单把

java 阿里短信获取详细信息 springboot阿里云短信_微服务_15

现在我们已经完成了简单的发送验证码了, 接下来就是编写微服务。

二、编写微服务

1、导入依赖
2、复制代码

就是这么真实, 复制代码!!!

点击 SDK使用说明

https://help.aliyun.com/document_detail/66496.html?spm=a2c1g.8271268.10000.132.772fdf25o9SfBZ

导入依赖

<dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.10</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.28</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.1.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

复制代码

@Test
    void contextLoads() {
        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", " ", " ");
        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", "  ");
        HashMap<Object, Object> map = new HashMap<>();
        map.put("code", "1321");
        request.putQueryParameter("TemplateParam", JSONObject.toJSONString(map));
        try {
            CommonResponse response = client.getCommonResponse(request);
            System.out.println(response.getData());
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }

    }

填写你的信息, 即可测试!!!

三、集成 redis , 成为 微服务, 我们架构中的一个小模块!!!

1、配置文件

spring.redis.port=6379
spring.redis.host=127.0.0.1
spring.redis.password=123456

2、接口

public interface sendMsg {
    boolean send(String phone, String templatecode, HashMap<String, Object> map);
}

3、实现

@Override
    public boolean send(String phone, String templatecode, HashMap<String, Object> map) {
        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", " ", " ");
        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", phone);
        request.putQueryParameter("SignName", " ");
        request.putQueryParameter("TemplateCode", templatecode);
        request.putQueryParameter("TemplateParam", JSONObject.toJSONString(map));

        try {
            CommonResponse response = client.getCommonResponse(request);
            System.out.println(response.getData());
            return true;
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
        return false;
    }

4、Controller

@Autowired
    sendMsg sendMsg;

    @Autowired
    RedisTemplate<String, String> redisTemplate;

    @GetMapping("/send/{phone}")
    public String code(@PathVariable("phone") String phone) {

        String code = redisTemplate.opsForValue().get(phone);
        if (!StringUtils.isEmpty(code)) {
            return phone + ":" + code + "已经存在";
        }

        code = UUID.randomUUID().toString().substring(0, 4);
        HashMap<String, Object> param = new HashMap<>();
        param.put("code", code);

        boolean issend = sendMsg.send(phone, " ", param);

        if(issend) {
            redisTemplate.opsForValue().set(phone, code, 5, TimeUnit.SECONDS);
            return phone + ":" + code + "发送成功";
        }else{
            return phone + ":" + code + "发送失败";
        }

    }

java 阿里短信获取详细信息 springboot阿里云短信_java 阿里短信获取详细信息_16

Nice !!!
提示: 短信服务是收费的, 不过阿里已经做了防止盗刷。(代码里面也做了处理)

小结

集成第三方服务其实仔细阅读官方文档即可, 导入相应的依赖, 直接把实例代码拿过来用就行了, 超级方便快捷,简直就是 CV工程师的快乐源泉啊。

https://www.bilibili.com/video/BV1c64y1M7qN