腾讯云短信接口服务
开发准备
- 申请 SDK AppID 以及 App Key:
在开始本教程之前,您需要先获取 SDK AppID 和 App Key,如您尚未申请,请到 短信控制台 中添加应用。应用添加成功后您将获得 SDK AppID 以及 App Key。
注意:
SDK AppID 是以 14xxxxx 开头。
-
申请签名:
下发短信必须携带签名,您可以在短信 控制台 中申请短信签名 -
申请模板:
下发短信内容必须经过审核,您可以在短信控制台中申请短信模板
完成以上三项便可开始代码开发。
代码开发
第一步导入依赖 我这儿用到redis###
<!-- 腾讯云短信 开始-->
<!-- https://mvnrepository.com/artifact/com.github.qcloudsms/qcloudsms -->
<dependency>
<groupId>com.github.qcloudsms</groupId>
<artifactId>qcloudsms</artifactId>
<version>1.0.6</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<!-- 腾讯云短信 结束-->
<!-- redis依赖开始 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<!-- redis依赖结束 -->
第二步 编写发送短信工具类
package com.txy.util;
import com.github.qcloudsms.SmsSingleSender;
import com.github.qcloudsms.SmsSingleSenderResult;
import org.json.JSONException;
import javax.xml.ws.http.HTTPException;
import java.io.IOException;
/**
* 短信相关工具类
* @auther Lazy
* @create 2020/04/30
*/
public class SmsUtil {
// 短信应用SDK AppID
private static final int APPID = 14********;
// 短信应用SDK AppKey
private static final String APPKEY = "939***********3";
private static final String NATIONCODE = "86";
// 短信模板ID,需要在短信应用中申请
private static final int TEMPLATECODE = 4*****;
// 签名
private static final String SIGN = "****";
//测试发送是否成功
public static void main(String[] args) {
//sendSms(new String[]{"1234"},"155****8672");
}
public static boolean sendSms(String[] params,String phoneNum) {
try {
SmsSingleSender ssender = new SmsSingleSender(APPID, APPKEY);
SmsSingleSenderResult result = ssender.sendWithParam("86", phoneNum,
TEMPLATECODE, params, SIGN, "", "");
if (result.result == 0){
return true;
}
} catch (HTTPException e) {
// HTTP 响应码错误
e.printStackTrace();
} catch (JSONException e) {
// JSON 解析错误
e.printStackTrace();
} catch (IOException e) {
// 网络 IO 错误
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
/**
* 获取六位随机数
* @return
*/
public static String getRandom(){
int newNum = (int)((Math.random()*9+1)*100000);
return String.valueOf(newNum);
}
}
个人习惯 定义接口返回值类
package com.txy.util;
import java.io.Serializable;
import java.util.HashMap;
/**
* 定义接口返回值结构
* @auther Lazy
* @create 2020/04/30
*/
public class ResData implements Serializable {
// 验证token 0 - token失效 1 - token正常
private int tokenCheck = 1;
// 接口返回值状态 0 - 失败 1 - 成功
private int status = 1;
// 接口返回值信息
private String information = "";
// 接口返回值
private Object data;
public static final String ERRORMSG = "恭喜你遇到bug!";
/**
* 设置成功信息
* @param information 提示消息
* @param object 返回数据
*/
public void setSuccess(String information,Object object){
this.tokenCheck = 1;
this.status = 1;
this.information = information;
this.data = object;
}
/**
* 设置失败信息
* @param information 提示消息
* @param object 返回数据
*/
public void setError(String information,Object object){
this.tokenCheck = 1;
this.status = 0;
this.information = information;
this.data = object;
}
/**
* 设置token失效信息
*/
public void setTokenFalse(){
this.tokenCheck = 0;
this.status = 0;
this.information = "token失效!";
this.data = new HashMap<String,String>();
}
public int getTokenCheck() {
return tokenCheck;
}
public int getStatus() {
return status;
}
public String getInformation() {
return information;
}
public Object getData() {
return data;
}
}
第三步 编写发送方法 接口
package com.txy.controller;
import com.txy.util.ResData;
import com.txy.util.SmsUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.concurrent.TimeUnit;
@RestController
@RequestMapping("/send")
public class SendInfo {
@Autowired(required=true)
private StringRedisTemplate stringRedisTemplate;
@RequestMapping("/info")
public ResData telCodeForHappyCard(String phoneNum){
ResData resData = new ResData();
try{
// 获取6为随机验证码
String telCode = SmsUtil.getRandom();
// 发送验证码到手机
boolean send = SmsUtil.sendSms(new String[]{telCode}, phoneNum);
if (!send){
resData.setError("验证码发送失败","");
return resData;
}
// 将验证码存入redis : key = telCodeForHappyCard + phoneNum value = telCode
// 设置有效期为30分钟
stringRedisTemplate.opsForValue().set("telCodeForHappyCard"+phoneNum,telCode,30, TimeUnit.MINUTES);
resData.setSuccess("验证码发送成功!","验证码发送成功!");
}catch (Exception e){
e.printStackTrace();
resData.setError("恭喜你遇到bug!","恭喜你遇到bug!");
}
return resData;
}
}