• SpringBoot实战系列之发送短信验证码


    大家好,我是 ??

    大二在读

    作业侠系列最新文章??

    Java实现聊天程序

    SpringBoot实战系列??

    SpringBoot实战系列之发送短信验证码

    一起刷算法与数据结构最新文章??

    一起刷算法与数据结构-树篇1

    环境搭建大集合

    环境搭建大集合(持续更新)


    内容速览:
    1.短信验证码平台选择考虑点
    2.短信平台
    3.实战发送短信验证码

    1.短信验证码平台选择考虑点

    • 各个类型短信价格
    • 短信到达率、到达时间
    • 短信内容变量灵活,便持多场景
    • 持多种推内容的短信发放,例如业务推、新产品宣讲、
    • 会员关怀等内容的短信
    • 多维度数据统计-查看请求量、发送成功量、失败量、等

    2.短信平台

    • 阿云:https://www.aliyun.com/product/sms
      公司使用推荐
    • 腾讯云:https://cloud.tencent.com/product/sms
      公司使用推荐
    • 第三商:https://market.aliyun.com/products/5700000
      2/cmapi00046920.html
      个人测试推荐

    注意
    由于申请接入阿里云,腾讯云需要企业认证,所以我们使用第三方厂商,复制上方链接浏览器打开即可

    进入之后,点击立即购买,不用选择什么,直接支付即可,大家看自己需求选择即可,自己测试着玩,三元即可
    在这里插入图片描述
    购买好之后会有对应api文档,当然包括一些类似密钥的东西
    在这里插入图片描述购买之后,api文档过一会就出现
    在这里插入图片描述
    代码实战:
    依赖说明,能够跑起来的Springboot项目就行
    在对应application.yml中添加加如下内容:

    sms:
      app-code: ${你自己的appcode}
      template-id: M72CB42894
    
    • 1
    • 2
    • 3

    template-id就是你短信发送的模板id,这个是官方默认的,想自己定义需要申请

    使用restTemplate用于第三方接口调用
    对应封装:

    @Configuration
    public class RestTemplateConfig {
        @Bean
        public RestTemplate restTemplate(ClientHttpRequestFactory requestFactory){
            return new RestTemplate(requestFactory);
        }
        @Bean
        public ClientHttpRequestFactory simpleClientHttpRequestFactory(){
            SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
            factory.setReadTimeout(10000);
            factory.setConnectTimeout(10000);
            return factory;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    然后封装smsConfig,使用了Lombok,大家没有对应依赖的生成对应setter,getter方法即可

    @ConfigurationProperties(prefix = "sms")
    @Configuration
    @Data
    public class SmsConfig {
        private String appCode;
    
        private String templateId;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    封装发送业务,信息打印使用了slf4j,大家没有对应依赖换成sout即可:

    @Component
    @Slf4j
    public class SmsComponent {
    
        private static final String URL_TEMPLATE = "https://jmsms.market.alicloudapi.com/sms/send?mobile=%s&templateId=%s&value=%s";
    
        @Autowired
        private RestTemplate restTemplate;
    
        @Autowired
        private SmsConfig smsConfig;
    
    
        public void send(String to, String templateId, String value) {
            String url = String.format(URL_TEMPLATE, to, templateId, value);
    
            HttpHeaders headers = new HttpHeaders();
            //最后在header中的格式(中间是英?空格)为
            headers.set("Authorization", "APPCODE " + smsConfig.getAppCode());
            HttpEntity entity = new HttpEntity<>(headers);
            ResponseEntity response = restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
            log.info("url={},body={}", url, response.getBody());
            if (response.getStatusCode() == HttpStatus.OK) {
                log.info("发送短信成功,响应信息:{}", response.getBody());
            } else {
                log.error("发送短信失败,响应信息:{}", response.getBody());
            }
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    在对应单元测试中编写测试方法:

    @RunWith(SpringRunner.class)
    @SpringBootTest(classes = AccountApplication.class)
    @Slf4j
    public class SmsTest {
    
    
        @Autowired
        private SmsConfig smsConfig;
        @Autowired
        private SmsComponent smsComponent;
    
        @Test
        public void testSmsSend(){
            smsComponent.send("110",smsConfig.getTemplateId(),"54688");
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    运行,发送成功
    在这里插入图片描述
    我的手机也收到了消息:
    在这里插入图片描述

    先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 相关阅读:
    Microsoft Office Word一打开文档就弹出样式小窗口
    朗强:高清视频HDMI延长器的特点
    制造型企业 如何实现便捷的机台文件统一管理?
    算法系列:斐波那契数列问题
    分布式电源接入对配电网影响的研究(Matlab代码实现)
    好用的Java工具类库—— Hutool
    2023年武汉市氢产业奖励申报条件+认定流程+材料+时间汇总!
    LeetCode刷题复盘笔记—一文搞懂完全背包之377. 组合总和 Ⅳ问题(动态规划系列第十二篇)
    爬虫常见风控
    java基于BS结构的中俄师生学术交流平台
  • 原文地址:https://blog.csdn.net/m0_67401660/article/details/126114575