目 录CONTENT

文章目录

SpringBoot调用腾讯云API发送短信

不争
2024-01-02 / 0 评论 / 0 点赞 / 13 阅读 / 15449 字

SpringBoot调用腾讯云API发送短信

  1. 打开官网申请申请短信应用,申请签名与模板

  2. 打开腾讯云的控制台API页面

image-20230827123253328

  1. 导入maven的依赖,参照官网要求填写签名与模板ID等,在把生成的代码拿过来调试
<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.838</version>
</dependency>
public class SendSms
{
    public static void main(String [] args) {
        try{
            // 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密
            // 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305
            // 密钥可前往官网控制台 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-beijing", clientProfile);
            // 实例化一个请求对象,每个接口都会对应一个request对象
            SendSmsRequest req = new SendSmsRequest();
            String[] phoneNumberSet1 = {"你的手机号"};
            req.setPhoneNumberSet(phoneNumberSet1);

            req.setSmsSdkAppId("1400849908"); // SDK ID
            req.setSignName("我的技术分享个人网"); // 申请的签名名称
            req.setTemplateId("1907520"); // 模板ID

            String[] templateParamSet1 = {"6666"}; // 测试验证码
            req.setTemplateParamSet(templateParamSet1);

            // 返回的resp是一个SendSmsResponse的实例,与请求对象对应
            SendSmsResponse resp = client.SendSms(req);
            // 输出json格式的字符串回包
            System.out.println(SendSmsResponse.toJsonString(resp));
        } catch (TencentCloudSDKException e) {
            System.out.println(e.toString());
        }
    }
}

  1. 查看请求返回的信息
{"SendStatusSet":[{"SerialNo":"3369:294906593316931104718082751","PhoneNumber":"手机号","Fee":1,"SessionContext":"","Code":"Ok","Message":"send success","IsoCode":"CN"}],"RequestId":"69aceba9-a43d-434c-9021-e7320ef52d49"}

  1. 手机查收到短信

bbe42e7d688618ef9615e127d144e41

继续二次封装成工具类供我们简单使用

1.将调用api需要的参数全部写到yml中

myapp:
  secretId: XXXXXXXXXXXXXXXXXXXXXXX
  secretKey: XXXXXXXXXXXXXXXXXXXXXXX
  smsSdkAppId: XXXXXXXXXXXXXXXXXXXXXXX
  signName: XXXXXXXXXXXXXXXXXXXXXXX
  TemplateId: XXXXXXXXXXXXXXXXXXXXXXX

2.写一个类接收参数,用ConfigurationProperties自动配置,注意set方法不要写成静态得了

@Component
@ConfigurationProperties(prefix = "myapp")
public class MyAppPropertiesDto {
    private static String secretId;
    private static String secretKey;
    private static String smsSdkAppId;
    private static String signName;
    private static String TemplateId;

    public static String getSecretId() {
        return secretId;
    }

    public void setSecretId(String secretId) {
        MyAppPropertiesDto.secretId = secretId;
    }


    public static String getSecretKey() {
        return secretKey;
    }

    public void setSecretKey(String secretKey) {
        MyAppPropertiesDto.secretKey = secretKey;
    }

    public static String getSmsSdkAppId() {
        return smsSdkAppId;
    }

    public void setSmsSdkAppId(String smsSdkAppId) {
        MyAppPropertiesDto.smsSdkAppId = smsSdkAppId;
    }

    public static String getSignName() {
        return signName;
    }

    public void setSignName(String signName) {
        MyAppPropertiesDto.signName = signName;
    }

    public static String getTemplateId() {
        return TemplateId;
    }

    public void setTemplateId(String templateId) {
        MyAppPropertiesDto.TemplateId = templateId;
    }
}

3.在写一个工具类帮我们实现封装这些配置,只需要传入手机号和验证码即可发送参数。

@Component
@Slf4j
public class SmsUtil {
    private static SmsClient client = null;
	// 初始化操作
    @PostConstruct // 对象创建的时候执行
    public void init() {
        client = createClient(MyAppPropertiesDto.getSecretId(), MyAppPropertiesDto.getSecretKey());

    }
    // 提供一个公共方法发送验证码
    public static void smsValicode(String phone, String code) {
        // 实例化一个请求对象,每个接口都会对应一个request对象
        SendSmsRequest req = new SendSmsRequest();
        String[] phoneNumberSet1 = {phone}; // 手机号
        req.setPhoneNumberSet(phoneNumberSet1);

        req.setSmsSdkAppId(MyAppPropertiesDto.getSmsSdkAppId()); // sdkId
        req.setSignName(MyAppPropertiesDto.getSignName()); // 签名
        req.setTemplateId(MyAppPropertiesDto.getTemplateId()); // 模板Id

        String[] templateParamSet1 = {code}; // 发送的验证码
        req.setTemplateParamSet(templateParamSet1);

        // 返回的resp是一个SendSmsResponse的实例,与请求对象对应
        SendSmsResponse resp = null;
        try {
            resp = client.SendSms(req);
        } catch (TencentCloudSDKException e) {
            log.info("create Sms client error ");
            throw new RuntimeException(e);
        }
        // 输出json格式的字符串回包
        System.out.println(SendSmsResponse.toJsonString(resp));
    }

	// 创建客户端
    private static SmsClient createClient(String secretId, String secretKey) {
        // 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密
        // 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305
        // 密钥可前往官网控制台 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-beijing", clientProfile);
        return client;

    }
}

4.最后写成接口直接调用即可

@RestController
public class SmsController {
    @GetMapping("/sms")
    public String sendSms() {
        SmsUtil.smsValicode("手机号", "2654");
        return "ok";
    }
}

总结

代码写的略显粗糙,总体无伤大雅,仅为学习所用。

0

评论区