版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
一、购买申请短信网关
我测试使用的是腾讯云包含的“短信网关”接口。腾讯云短信网关地址
二、创建短信模板
模板案例
{1}为您的登录验证码,请于{2}分钟内填写。如非本人操作,请忽略本短信。 (其中{1}、{2}为可自定义的内容,须从1开始连续编号,如{1}、{2}等)
三、发送短信操作(重点)
1、开发文档
2、demo测试工具类代码
依赖引入:
<!-- 短信网关 start -->
<dependency>
<groupId>com.github.qcloudsms</groupId>
<artifactId>qcloudsms</artifactId>
<version>1.0.6</version>
</dependency>
<!-- 短信网关 end -->
import java.io.IOException;
import java.util.Random;
import org.json.JSONException;
import com.github.qcloudsms.SmsSingleSender;
import com.github.qcloudsms.SmsSingleSenderResult;
import com.github.qcloudsms.httpclient.HTTPException;
import cn.linkpower.util.StringUtils;
/**
* 短信网关工具类
*
* @author 76519
*
*/
public class SMSUtils {
/**
* 发送短信至指定的手机上,同时保存短信信息至session中
* @param smsLen 指定验证码长度
* @param phoneNumber 手机号码
* @param smsAppId appid
* @param smsAppKey appkey
* @param templateId 模板id
* @param timeout 验证码超时时间
* @param smsSign 验证码内容标头
* @return
*/
public static String sendAndGetRandomCode(Integer smsLen,
String phoneNumber,
int smsAppId,
String smsAppKey,
int templateId,
String timeout,
String smsSign){
//获取随机的指定长度的验证码信息
String smsVal = getRandomIntValue(smsLen);
if(StringUtils.isNull(smsVal)){
return null;
}
//编辑模板填充信息
String[] params = new String[2];
//如果模板中包含多个{1}、{2}、、时,采取数组方式传递参数信息
params[0] = smsVal;
params[1] = timeout;
//发送短信验证码信息
SmsSingleSender ssSender = new SmsSingleSender(smsAppId, smsAppKey);
SmsSingleSenderResult sSMResult = null;
try {
sSMResult = ssSender.sendWithParam("86", phoneNumber,
templateId, params, smsSign, "", "");
} catch (HTTPException e) {
// HTTP 响应码错误
e.printStackTrace();
} catch (JSONException e) {
// JSON 解析错误
e.printStackTrace();
} catch (IOException e) {
// 网络 IO 错误
e.printStackTrace();
}
//如果发送成功,判断获取回调信息
//成功格式:{"result":0,"errmsg":"OK","ext":"","sid":"8:j8cV6yePO1ZqNVxbyLX20190910","fee":1}
//失败格式:{"result":1019,"errmsg":"package format error, no such sdkappid","ext":""}
if(StringUtils.isNull(sSMResult) || sSMResult.result != 0){
return null;
}
//保存session信息
//request.getSession().setAttribute(UserProperties.getRandomVal, smsVal);
return smsVal;
}
/**
* 获取指定长度的随机数字组成的验证码
* @param length
* @return
*/
private static String getRandomIntValue(Integer length){
if(isNull(length)){
return null;
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < length; i++) {
Random r = new Random();
int randomVal = r.nextInt(10);
sb.append(randomVal);
}
return sb.toString();
}
/**
* 判断给定的数据是否为null
* @param integer
* @return
*/
private static boolean isNull(Integer integer){
return integer == null;
}
}