通过第三方平台实现手机发送短信

通过第三方平台实现手机发送短信

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

    • 各个类型短信价格

    • 短信到达率、到达时间

    • 短信内容变量灵活,方便支持多场景

    • 支持多种推广内容的短信发放,例如业务推广、新产品宣讲、会员关怀等内容的短信

    • 多维度数据统计-查看请求量、发送成功量、失败量、等

    • 引入第三方短信平台
  • 短信平台

  • 使用阿里云市场

    image-20221210154202856

  • 参数:

    AppKey:XXXXXX AppSecret:XXXXXX
    AppCode:XXXXXXXXXX
    模板ID: XXXXXX
    实战

    第三方平台短信使用的规范:【聚美智数】短信验证码-106三网短信验证码-验证码短信-短信验证码接口-验证码短信-短信验证码API-验证码-手机短信验证码【最新版】-云市场-阿里云 (aliyun.com)

    • 添加SmsConfig配置

      • application.yml

        #------自定义sms配置------
        sms:
        #AppCode
        app-code: 7470e2e1320c4451b26260ea820b1be2
        #模板Id
        template-id: M105EABDEC
      • 通过springBoot获取配置文件中的属性

        • 使用注解:
        • @ConfigurationProperties(prefix = "sms"):配置文件中的前缀
          @Configuration:指定该类为配置类
        /**
        * @Author:fan
        * @Description
        * @Date:2022-11-25 23:06
        */
        @ConfigurationProperties(prefix = "sms")
        @Configuration
        @Data
        public class SmsConfig {
        private String appCode;
        private String templateId;
        }
    • SmsComponent工具类封装

      • 入参是:手机号、第三方短信平台的模板id、短信内容
      • 使用的是 restTemplate 发送post请求
      @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;
      /**
      * 发送短信验证码
      * @param mobile 短信接收人号码
      * @param templateId 短信模板ID
      * @param value 短信发送的内容
      */
      public void send(String mobile,String templateId,String value){
      String url = String.format(URL_TEMPLATE,mobile,templateId,value);
      HttpHeaders httpHeaders = new HttpHeaders();
      //最后在header中的格式(中间是英文空格)为Authorization:APPCODE 83359fd73fe94948385f570e3c139105
      httpHeaders.set("Authorization","APPCODE "+smsConfig.getAppCode());
      HttpEntity entity = new HttpEntity<>(httpHeaders);
      ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
      log.info("url={},body={}",url,response.getBody());
      if(response.getStatusCode().is2xxSuccessful()){
      log.info("发送短信验证码成功");
      }else {
      log.error("发送短信验证码失败:{}",response.getBody());
      }
      }
      }
    • 单元测试

      @RunWith(SpringRunner.class)
      @SpringBootTest(classes = AccountApplication.class)
      @Slf4j
      public class SmsTest {
      @Autowired
      private SmsComponent smsComponent;
      @Test
      public void testSendSms(){
      smsComponent.sendCode("13113677337","M72CB92894","223344");
      }
      }
posted @   snail05  阅读(979)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
点击右上角即可分享
微信分享提示