基于腾讯云短信服务发送短信

技术分析:

1.把发短信功能抽取成一个web应用,发短信直接调用即可

2.service使用httpclient调用

使用:

1.导入腾讯短信需要的包

<dependency>
   <groupId>com.github.qcloudsms</groupId>
   <artifactId>qcloudsms</artifactId>
   <version>1.0.5</version>
</dependency>

2.HTTPClient工具类见上一篇文章

3.Controller代码

@RestController
@RequestMapping("/tx_sms")
public class TX_SMSController {
   // 短信应用SDK AppID
   int appid = XXXX; // 1400开头

   // 短信应用SDK AppKey
   String appkey = "XXXX";

   @RequestMapping("/send")
   public void sendSms(String phoneNumber,
                       String code)
           throws Exception {

       // 需要发送短信的手机号码
       String[] phoneNumbers = {phoneNumber};

       // 短信模板ID,需要在短信应用中申请
       int templateId = XXXX;

       // 签名
       String smsSign = "XXXX";

       // 指定模板ID单发短信
       try {
           String[] params = {code};
           SmsMultiSender msender = new SmsMultiSender(appid, appkey);
           SmsMultiSenderResult result =  msender.sendWithParam("86", phoneNumbers,
                   templateId, params, smsSign, "", "");  // 签名参数未提供或者为空时,会使用默认签名发送短信
           System.out.print(result);
       } catch (HTTPException e) {
           // HTTP响应码错误
           e.printStackTrace();
       }  catch (Exception e) {
           // 网络IO错误
           e.printStackTrace();
       }
   }
}

Service代码

@Override
public void sendSms(String phone) {
   // 腾讯云短信服务
   HttpClient httpClient = new HttpClient("http://localhost:7788/tx_sms/send");
   httpClient.addParameter("phoneNumber", phone);
   String numeric = RandomStringUtils.randomNumeric(4); // 生成随机验证码
   httpClient.addParameter("code", numeric);
   System.out.println(numeric);
   try {
       httpClient.post();
       String content = httpClient.getContent();
       System.out.println(content);
       // 把验证码放入Redis
       redisTemplate.boundValueOps("sms_" + phone).set(numeric, 300, TimeUnit.SECONDS);
   } catch (Exception e) {
       e.printStackTrace();
   }
}

发表评论