SpringBoot 开发案例之接入腾讯云短信

2020-11-05 14:22:58 浏览数 (1)

简介

腾讯云短信(Short Message Service,SMS)沉淀腾讯十多年短信服务技术和经验,为 QQ、微信等亿级平台和10万 客户提供快速灵活接入的高质量的国内短信与国际/港澳台短信服务。

  • 国内短信验证秒级触达,99%到达率。
  • 国际/港澳台短信覆盖全球200 国家/地区,稳定可靠。

申请

只要开通并个人认证就会默认送国内短信100条,白嫖还是很开心的!

签名

签名类型有APP、网站、公众号、小程序,不论是个人还是企业你只要提供相关的证明文件即可。因为撸主本人在腾讯有备案网站,所以直接申请的是网站签名,但是值得注意的是签名必须和网站备案的名称保持一致,否则不予通过。

模板

提交签名申请后,才可创建正文模板。只要不是特别违规的信息一般都能通过。

以上填写完毕,基本在十分钟之内就会收到审核消息,腾讯云的审核速度还是蛮快的。审核通过后会再送你100条免费短信额度,加上之前的100条,测试还是蛮够的!

集成

配置参数:

代码语言:javascript复制
# 腾讯云短信平台
tencentcloud.sms.secretId=**********
tencentcloud.sms.secretKey=**********
tencentcloud.sms.appId=**********

映射类:

代码语言:javascript复制
/**
 * 腾讯云短信
 */
@Data
@ConfigurationProperties(prefix = "tencentcloud.sms")
public class SendSmsProperties {

    private String secretId;
    private String secretKey;
    private String appId;

}

工具类:

代码语言:javascript复制
/**
 * 短信发送
 * 参考: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());
        }
    }
}

实体参数:

代码语言:javascript复制
/**
 * 短信参数
 */
@Data
public class Sms {

    /**
     * 签名
     */
    private String sign ;
    /**
     * 模板
     */
    private String templateId;
    /**
     * 手机号
     */
    private String[] mobile;
    /**
     * 模板参数 {}
     */
    private String[] params;
}

最后测试一下发送:

代码语言:javascript复制
@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();
}

小结

个人渠道申请还是挺方便的,只要你拥有备案域名、小程序或者公众号就可以申请,小伙伴们速度来薅腾讯的羊毛吧。

0 人点赞