侧边栏壁纸
  • 累计撰写 27 篇文章
  • 累计创建 42 个标签
  • 累计收到 34 条评论

目 录CONTENT

文章目录

腾讯云短信服务集成

miykah
2023-09-27 / 0 评论 / 0 点赞 / 49 阅读 / 6169 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2023-12-11,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

准备工作

image-20230927172714422

首先需要在腾讯云完成如图工作。

  1. 国内短信必须进行签名,并且需要审核,有点难通过,签名必须是网站名字

image-20230927172815697

  1. 创建短信模板并审核

image-20230927172938440

  1. 购买套餐包,腾讯最少购买1k条,50rmb

集成到 Spring Boot 项目

引入依赖

引入腾讯云的 maven 依赖

<dependency>
    <groupId>com.tencentcloudapi</groupId>
    <artifactId>tencentcloud-sdk-java</artifactId>
    <!-- go to https://search.maven.org/search?q=tencentcloud-sdk-java and get the latest version. -->
    <!-- 请到https://search.maven.org/search?q=tencentcloud-sdk-java查询所有版本,最新版本如下 -->
    <version>3.1.872</version>
</dependency>

编写 applictaion.yml

tencent:
  sms:
    secretID: 腾讯云账号的SecretId
    secretKey: 腾讯云账号的SecretKey
    smsSdkAppId: 短信控制台中的应用,应用的SDK AppID
    signName: 审核通过的签名
    templateId: 短信模板ID

其中:

  1. secretID:腾讯云账号的SecretId

image-20230927173326743

  1. secretKey: 腾讯云账号的SecretKey,同上图

  1. smsSdkAppId: 短信控制台中的应用,应用的SDK AppID

image-20230927173425804

  1. signName: 审核通过的签名,(不是id)

image-20230927173503569

  1. templateId: 短信模板ID

配置类 TencentSmsConfig

创建配置类 TencentSmsConfig.java,读取配置文件信息,并注册一个 client。

@Configuration
@ConfigurationProperties(prefix = "tencent.sms")
@Data
public class TencentSmsConfig {
​
    private String secretID ;
    private String secretKey ;
    private String smsSdkAppID ;
    private String signName ;
    private String templateID ;
​
    @Bean
    public SmsClient smsClient() {
        // 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKey,此处还需注意密钥对的保密
        // 密钥可前往https://console.cloud.tencent.com/cam/capi网站进行获取
        Credential cred = new Credential(secretID, secretKey);
        // 实例化一个http选项,可选的,没有特殊需求可以跳过
        HttpProfile httpProfile = new HttpProfile();
        httpProfile.setEndpoint("sms.tencentcloudapi.com");
        // 实例化一个client选项,可选的,没有特殊需求可以跳过
        ClientProfile clientProfile = new ClientProfile();
        clientProfile.setHttpProfile(httpProfile);
        // 实例化要请求产品的client对象,clientProfile是可选的  第二个参数是地域信息
        SmsClient client = new SmsClient(cred, "ap-guangzhou", clientProfile);
​
        return client;
    }
​
}

发送短信工具类 SmsManager

我将这种放在了项目的 manager 包下:

image-20230927175847781

@Component
public class SmsManager {
​
    @Resource
    private SmsClient client;
​
    @Resource
    private TencentSmsConfig tencentSmsConfig;
​
    public boolean send(String userAccount, String phoneCode) {
        try {
            // 实例化一个请求对象,每个接口都会对应一个request对象
            SendSmsRequest req = new SendSmsRequest();
            //设置固定的参数
            req.setSmsSdkAppId(tencentSmsConfig.getSmsSdkAppID());// 短信应用ID: 短信SdkAppId在 [短信控制台] 添加应用后生成的实际SdkAppId
            req.setSignName(tencentSmsConfig.getSignName());//短信签名内容: 使用 UTF-8 编码,必须填写已审核通过的签名
            req.setTemplateId(tencentSmsConfig.getTemplateID());//模板 ID: 必须填写已审核通过的模板 ID
            /* 用户的 session 内容: 可以携带用户侧 ID 等上下文信息,server 会原样返回 */
//            String sessionContext = "xxx";
//            req.setSessionContext(sessionContext);
​
            //设置发送相关的参数
            String[] phoneNumberSet1 = {"+86" + userAccount};
            req.setPhoneNumberSet(phoneNumberSet1);//发送的手机号
            String[] templateParamSet1 = {phoneCode};//模板的参数 第一个是验证码,第二个是过期时间
            req.setTemplateParamSet(templateParamSet1);//发送验证码
​
            //发送短信
            // 返回的resp是一个SendSmsResponse的实例,与请求对象对应
            SendSmsResponse resp = client.SendSms(req);
            System.out.println("resp" + resp);
            // 输出json格式的字符串回包
            System.out.println(SendSmsResponse.toJsonString(resp));
            return true;
        } catch (TencentCloudSDKException e) {
            throw new BusinessException(ErrorCode.SYSTEM_ERROR, e.getMessage());
        }
    }
​
}

调用

在业务中调用发送短信

image-20230927180009852


0

评论区