1、引入依赖
compile('com.tencentcloudapi:tencentcloud-sdk-java:3.1.69')
compile('commons-beanutils:commons-beanutils:1.7.0')
2、编写工具类
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import org.apache.log4j.Logger;
import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
import com.tencentcloudapi.common.profile.ClientProfile;
import com.tencentcloudapi.common.profile.HttpProfile;
import com.tencentcloudapi.sms.v20190711.SmsClient;
import com.tencentcloudapi.sms.v20190711.models.SendSmsRequest;
import com.tencentcloudapi.sms.v20190711.models.SendSmsResponse;
/**
* 腾讯云短信工具类
*
* @className SMSUtils
* @author yangzhipeng
* @version V1.0 2020年9月14日 上午9:57:53 TODO(如果是修改版本,描述修改内容)
*/
public class SMSUtils {
/**
* LOG输出
*/
private static final Logger logger = Logger.getLogger(SMSUtils.class);
public static String getCode() {
List<String> list = Arrays.asList("0", "1", "2", "3", "4", "5", "6", "7", "8", "9");
String code = "";
for (int x = 0; x < 4; x++) {
int number = new Random().nextInt(10);
code += list.get(number);
}
return code;
}
public static void send(String SMS_SDK_APP_ID, String SECRET_ID, String SECRET_KEY,
String TEMPLATE_ID, String SIGN, String phone, String text, String minute) {
logger.debug(phone + ":" + text + "--" + minute);
// 腾讯云API
String URL = "sms.tencentcloudapi.com";
Credential cred = new Credential(SECRET_ID, SECRET_KEY);
HttpProfile httpProfile = new HttpProfile();
httpProfile.setEndpoint(URL);
ClientProfile clientProfile = new ClientProfile();
clientProfile.setHttpProfile(httpProfile);
SmsClient client = new SmsClient(cred, "", clientProfile);
String params =
"{\"PhoneNumberSet\":[\"+86" + phone.replace(" ", "") + "\"]," + "\"TemplateID\":\""
+ TEMPLATE_ID + "\",\"Sign\":\"" + SIGN + "\"," + "\"TemplateParamSet\":[\"" + text
+ "\",\"" + minute + "\"]," + "\"SmsSdkAppid\":\"" + SMS_SDK_APP_ID + "\"}";
SendSmsRequest req = SendSmsRequest.fromJsonString(params, SendSmsRequest.class);
try {
SendSmsResponse resp = client.SendSms(req);
logger.debug(resp);
} catch (TencentCloudSDKException e) {
logger.error(e);
}
}
}
3、参数说明
// 腾讯云应用ID SDK_APP_ID
@Value("${sms.app.id}")
private String SMS_SDK_APP_ID;
// 腾讯云API密钥ID
@Value("${sms.secret.id}")
private String SECRET_ID;
// 腾讯云API密钥ID
@Value("${sms.secret.key}")
private String SECRET_KEY;
// 腾讯云短信模板ID
@Value("${sms.template.id}")
private String TEMPLATE_ID;
// 签名内容
@Value("${sms.sign}")
private String SIGN;
4、调用
String text = SMSUtils.getCode();
SMSUtils.send(SMS_SDK_APP_ID, SECRET_ID, SECRET_KEY, TEMPLATE_ID, SIGN, "入参手机号", text, "5");
5、踩坑
本来想着验证码为数字、字母混合,经过测试正常走完代码不报错,但是收不到短信,腾讯云短信控制台报错发送失败,
验证码只能为纯数字