Java 接入腾讯云 SMS 发短信(2023/06/02)

Java 接入腾讯云 SMS

文章目录

  • Java 接入腾讯云 SMS
    • 1. 开通短信服务
      • 1.1 注册腾讯云账号
      • 1.2 开通短信服务
    • 2. 配置短信内容
      • 2.1 创建签名
      • 2.2 创建正文模板
    • 3. 发送短信

本文将介绍如何通过 Java 接入腾讯云 SMS 实现发短信功能。

1. 开通短信服务

1.1 注册腾讯云账号

注册 - 腾讯云 (tencent.com)

1.2 开通短信服务

登陆短信控制台,勾选我已阅读并同意 腾讯云短信服务协议,单击开始接入即可开通。

2. 配置短信内容

一个完整的短信由短信签名短信正文内容组成,可以根据业务需求分别设置不同的模板,然后组合成最终短信内容:【短信签名】 短信正文内容

2.1 创建签名

进入签名管理结合实际情况设置相关参数点击确定即可。

2.2 创建正文模板

进入正文模板管理结合实际情况设置相关参数点击确定即可。

3. 发送短信

发送短信分为 API 与 SDK 两种方式,本文选择通过 Java SDK 的方式接入,具体过程如下:

  1. 添加 Maven 依赖:

    <dependency>
        <groupId>com.tencentcloudapigroupId>
        <artifactId>tencentcloud-sdk-javaartifactId>
        <version>3.1.769version>
    dependency>
    
  2. 创建相关参数配置类:

    import lombok.Data;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * 腾讯云配置.
     *
     * @author xiaoQQya
     * @since 2023/05/16
     */
    @Data
    @Configuration
    @ConfigurationProperties(prefix = "tencentcloud")
    public class TencentCloudConfig {
    
        /**
         * 腾讯云账户信息
         */
        private Account account = new Account();
    
        /**
         * 腾讯云短信服务信息
         */
        private Sms sms = new Sms();
    
        @Data
        public static class Account {
    
            /**
             * 腾讯云账户密钥对
             */
            private String secretId;
    
            /**
             * 腾讯云账户密钥对
             */
            private String secretKey;
        }
    
        @Data
        public static class Sms {
    
            /**
             * 短信应用 ID
             */
            private String sdkAppId;
    
            /**
             * 短信签名内容
             */
            private String signName;
    
            /**
             * 短信模板 ID
             */
            private String templateId;
        }
    }
    
  3. 配置上述各项参数:

    # application.yml
    tencentcloud:
      account:
        secret-id: "AKIDiHfqmTyEF31lGWYNxHMDpCKcibGgttfc"
        secret-key: "MUO2g8LJ2Zu2xe8PQGtKYhdOwGNHzUlP"
      sms:
        sdk-app-id: "1400706213"
        sign-name: "腾讯云"
        template-id: "1797899"
    
  4. 创建工具类:

    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.v20210111.SmsClient;
    import com.tencentcloudapi.sms.v20210111.models.SendSmsRequest;
    import com.tencentcloudapi.sms.v20210111.models.SendSmsResponse;
    
    /**
     * 短信工具类.
     *
     * @author xiaoQQya
     * @since 2023/05/16
     */
    @SuppressWarnings(value = {"unused"})
    public class SmsUtils {
    
        private SmsUtils() {
        }
    
        /**
         * 发送短信.
         *
         * @param secretId         腾讯云账户密钥对
         * @param secretKey        腾讯云账户密钥对
         * @param sdkAppId         短信应用 ID
         * @param signName         短信签名内容
         * @param templateId       模板 ID
         * @param templateParamSet 模板参数
         * @param phoneNumberSet   下发手机号码, 示例 +8613711112222
         * @return 发送结果
         * @throws TencentCloudSDKException TencentCloudSDKException 异常
         */
        public static SendSmsResponse sendSms(
                String secretId,
                String secretKey,
                String sdkAppId,
                String signName,
                String templateId,
                String[] templateParamSet,
                String[] phoneNumberSet
        ) throws TencentCloudSDKException {
            Credential cred = new Credential(secretId, secretKey);
    
            HttpProfile httpProfile = new HttpProfile();
            httpProfile.setReqMethod("POST");
            httpProfile.setConnTimeout(60);
            httpProfile.setEndpoint("sms.tencentcloudapi.com");
    
            ClientProfile clientProfile = new ClientProfile();
            clientProfile.setSignMethod("HmacSHA256");
            clientProfile.setHttpProfile(httpProfile);
            SmsClient client = new SmsClient(cred, "ap-beijing", clientProfile);
            SendSmsRequest req = new SendSmsRequest();
    
            req.setSmsSdkAppId(sdkAppId);
            req.setSignName(signName);
            req.setTemplateId(templateId);
            req.setTemplateParamSet(templateParamSet);
            req.setPhoneNumberSet(phoneNumberSet);
    
            return client.SendSms(req);
        }
    }
    
  5. 发送短信:

    SmsUtils.sendSms(
        tencentCloudConfig.getAccount().getSecretId(),
        tencentCloudConfig.getAccount().getSecretKey(),
        tencentCloudConfig.getSms().getSdkAppId(),
        tencentCloudConfig.getSms().getSignName(),
        tencentCloudConfig.getSms().getTemplateId(),
        new String[]{"hello", "world"},
        new String[]{"+8613287236743", "+8615823753956"}
    );
    

参考:

  • 短信 国内短信快速入门-国内短信-文档中心-腾讯云 (tencent.com)
  • 短信 Java SDK-SDK 文档-文档中心-腾讯云 (tencent.com)

你可能感兴趣的:(Java,java,腾讯云)