简介
腾讯云短信(Short Message Service,SMS)沉淀腾讯十多年短信服务技术和经验,为 QQ、微信等亿级平台和10万+客户提供快速灵活接入的高质量的国内短信与国际/港澳台短信服务。
- 国内短信验证秒级触达,99%到达率。
- 国际/港澳台短信覆盖全球200+国家/地区,稳定可靠。
申请
只要开通并个人认证就会默认送国内短信100条,白嫖还是很开心的!
签名
签名类型有APP、网站、公众号、小程序,不论是个人还是企业你只要提供相关的证明文件即可。因为撸主本人在腾讯有备案网站,所以直接申请的是网站签名,但是值得注意的是签名必须和网站备案的名称保持一致,否则不予通过。
模板
提交签名申请后,才可创建正文模板。只要不是特别违规的信息一般都能通过。
以上填写完毕,基本在十分钟之内就会收到审核消息,腾讯云的审核速度还是蛮快的。审核通过后会再送你100条免费短信额度,加上之前的100条,测试还是蛮够的!
集成
配置参数:
# 腾讯云短信平台
tencentcloud.sms.secretId=**********
tencentcloud.sms.secretKey=**********
tencentcloud.sms.appId=**********
映射类:
/**
* 腾讯云短信
*/
@Data
@ConfigurationProperties(prefix = "tencentcloud.sms")
public class SendSmsProperties {
private String secretId;
private String secretKey;
private String appId;
}
工具类:
/**
* 短信发送
* 参考:https://cloud.tencent.com/document/product/382/43194#example
* CAM 密钥查询:https://console.cloud.tencent.com/cam/capi
* 短信控制台:https://console.cloud.tencent.com/smsv2
*/
@Component
@Configuration
@EnableConfigurationProperties({SendSmsProperties.class})
public class SendSmsUtils {
private final static Logger LOGGER = LoggerFactory.getLogger(SendSmsUtils.class);
private SendSmsProperties sendSms;
public SendSmsUtils(SendSmsProperties sendSms) {
this.sendSms = sendSms;
}
private static String code = "OK";
/**
* 发送
*/
public void sand(Sms sms) {
LOGGER.info("发送短信:{}",Arrays.toString(sms.getMobile()));
try {
/**
* 实例化一个认证对象
*/
Credential cred = new Credential(sendSms.getSecretId(), sendSms.getSecretKey());
/**
* 实例化一个客户端配置对象
*/
ClientProfile clientProfile = new ClientProfile();
/**
* 实例化 SMS 的 client 对象
*/
SmsClient client = new SmsClient(cred, "",clientProfile);
/**
* 实例化一个请求对象
*/
SendSmsRequest req = new SendSmsRequest();
/**
* SDK appId 短信-应用管理-应用列表
*/
req.setSmsSdkAppid(sendSms.getAppId());
/**
* 签名 短信-国内短信-签名管理,必须是审核通过的
*/
req.setSign(sms.getSign());
/**
* 模板ID 短信-国内短信-正文模板管理,必须是审核通过的
*/
req.setTemplateID(sms.getTemplateId());
/**
* 如+8613711112222, 其中前面有一个+号 ,86为国家码,13711112222为手机号
*/
String[] phoneNumberSet = new String[sms.getMobile().length];
String[] array = sms.getMobile();
for(int i=0;i<phoneNumberSet.length;i++){
phoneNumberSet[i] = "+86"+array[i];
}
req.setPhoneNumberSet(phoneNumberSet);
/**
* 模板参数{}
*/
String[] templateParams = sms.getParams();
req.setTemplateParamSet(templateParams);
/**
* 发送请求
*/
SendSmsResponse res = client.SendSms(req);
/**
* 打印成功失败信息
*/
SendStatus[] status = res.getSendStatusSet();
if(code.equals(status[0].getCode())){
LOGGER.info("短信:{}发送成功", Arrays.toString(sms.getMobile()));
}else{
LOGGER.info("短信:{}发送失败", SendSmsResponse.toJsonString(res));
}
} catch (TencentCloudSDKException e) {
LOGGER.error("短信:{}发送失败,{}",Arrays.toString(sms.getMobile()),e.getMessage());
}
}
}
实体参数:
/**
* 短信参数
*/
@Data
public class Sms {
/**
* 签名
*/
private String sign ;
/**
* 模板
*/
private String templateId;
/**
* 手机号
*/
private String[] mobile;
/**
* 模板参数 {}
*/
private String[] params;
}
最后测试一下发送:
@RequestMapping("sms")
public Result sms() {
try {
Sms sms = new Sms();
sms.setMobile(new String[]{"17788888888"});
sms.setParams(new String[]{"苍井空"});
sms.setSign("云图");
sms.setTemplateId("844589");
sendSmsUtils.sand(sms);
} catch (Exception e) {
return Result.error();
}
return Result.ok();
}
小结
个人渠道申请还是挺方便的,只要你拥有备案域名、小程序或者公众号就可以申请,小伙伴们速度来薅腾讯的羊毛吧。