发送短信功能是现在最为常见的系统功能,不管是用手机号登录,还是用手机号找回密码,甚至手机号支付都需要用到发送短信验证码功能。现在市面上的短信云平台很多,百度,腾讯,阿里,华为,可以说基本上每一家云技术厂商都有相应的解决方案。今天我们介绍的是如何使用腾讯云短信平台来发送短信。
腾讯云短信(Short Message Service,SMS)沉淀腾讯十多年短信服务技术和经验,为 QQ、微信等亿级平台和10万+客户提供快速灵活接入的高质量的国内短信与国际/港澳台短信服务。
特点:# 腾讯云短信平台 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; }工具类:
/** * 短信发送 * 堆代码 duidaima.com * 参考: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(); }小结