springboot 集成腾讯云国内短信

雨点打透心脏的1/2处 2022-11-12 02:32 429阅读 0赞

国内短信快速入门

步骤1:开通短信服务

注册腾讯云账号

  • 如果您还没有腾讯云账号,您需要 注册腾讯云 账号,并完成 企业实名认证。
  • 如果您已有实名认证的腾讯云账号,请直接进行下一步操作。

申请开通短信服务

说明:

首次登录短信控制台时,需要申请开通短信服务。

  1. 登录 短信控制台,勾选【我已阅读并同意 腾讯云短信 服务协议】,单击【开始接入】即可开通。
  2. 在左侧导航栏选择【快速入门】,单击【开始创建】进入短信发送流程指引页面。
    74f1cc8e51141d4d70b11a2b65d63cdd.png

步骤2:配置短信内容

一个完整的短信由短信签名短信正文内容组成,您可以根据业务需求分别设置不同的模板,然后组合成最终短信内容:【短信签名】短信正文内容。短信签名和模板提交后,我们会在2个小时左右完成审核,如有需求可设置常用手机和邮箱,用于及时接收该应用短信内容审核通知。
3074bf5104a7a4159fe68d1e6a49c8cf.png

创建签名

  1. 在 快速入门 页面,单击【开始创建】。
  2. 结合实际情况和 签名审核标准 设置以下参数:

    • 签名用途:选择【自用(签名为本账号实名认证的公司、网站、产品名等)】。
    • 签名类型:选择【公司】。
    • 签名内容:输入腾讯云
    • 证明类型:选择【三证合一】。
    • 证明上传:上传证书照片或扫描件。
  3. 单击【确定】。
    等待签名审核,当状态变为【已通过】时,短信签名才可用。

创建正文模板

  1. 在 快速入门 页面,单击【开始创建】。
    156a5c10cb0a8f4e26f704774a4a833b.png
  2. 结合实际情况和 正文模板审核标准 设置以下参数:

    • 模板名称:输入验证码
    • 短信类型:选择【普通短信】。
    • 短信内容:输入您的验证码是:{1}
  3. 单击【确定】。
    等待正文模板审核,当状态变为【已通过】时,正文模板才可用。

步骤3:等待审核

短信签名和正文模板提交后,我们将会在2个小时左右完成审核,如有需求可设置常用手机和邮箱,用于及时接收短信内容审核通知。
在 快速入门 页面,您可以单击【查看】快速查看签名或正文模板的审核状态,待签名与正文模板状态变为【已通过】时才可用。
9a3b22faa92c087a87bbee726f53be1f.png

步骤4:发送短信

1. 接口描述

接口请求域名: sms.tencentcloudapi.com 。

短信发送接口,用户给用户发短信验证码、通知类短信或营销短信。

  • 注:由于云 API3.0 安全性有所提升,所以接口鉴权较为复杂,建议使用 SDK 来使用云短信服务。
  • 您可以在 API 3.0 Explorer 中直接运行该接口,可以先免去签名计算步骤。运行成功后,API Explorer可以自动生成SDK代码示例。

默认接口请求频率限制:3000次/秒。

推荐使用 API Explorer

点击调试

API Explorer 提供了在线调用、签名验证、SDK 代码生成和快速检索接口等能力。您可查看每次调用的请求内容和返回结果以及自动生成 SDK 调用示例。

2. 输入参数

以下请求参数列表仅列出了接口请求参数和部分公共参数,完整公共参数列表见 公共请求参数。














































































参数名称 必选 类型 描述
Action String 公共参数,本接口取值:SendSms。
Version String 公共参数,本接口取值:2019-07-11。
Region String 公共参数,本接口不需要传递此参数。
PhoneNumberSet.N Array of String 下发手机号码,采用 e.164 标准,格式为+[国家或地区码][手机号],单次请求最多支持200个手机号且要求全为境内手机号或全为境外手机号。
例如:+8613711112222, 其中前面有一个+号 ,86为国家码,13711112222为手机号。
TemplateID String 模板 ID,必须填写已审核通过的模板 ID。模板ID可登录 短信控制台 查看,若向境外手机号发送短信,仅支持使用国际/港澳台短信模板。
SmsSdkAppid String 短信SdkAppid在 短信控制台 添加应用后生成的实际SdkAppid,示例如1400006666。
Sign String 短信签名内容,使用 UTF-8 编码,必须填写已审核通过的签名,签名信息可登录 短信控制台 查看。注:国内短信为必填参数。
TemplateParamSet.N Array of String 模板参数,若无模板参数,则设置为空。
ExtendCode String 短信码号扩展号,默认未开通,如需开通请联系 sms helper
SessionContext String 用户的 session 内容,可以携带用户侧 ID 等上下文信息,server 会原样返回。
SenderId String 国内短信无senderid,无需填写该项;若需开通国际/港澳台短信senderid,请联系smshelper。

3. 输出参数





















参数名称 类型 描述
SendStatusSet Array of SendStatus 短信发送状态。
RequestId String 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。

项目结构

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjI2NjYwNg_size_16_color_FFFFFF_t_70

SmsConfiguration.java

  1. package com.demo.config;
  2. import cn.hutool.core.util.StrUtil;
  3. import com.tencentcloudapi.common.Credential;
  4. import com.tencentcloudapi.sms.v20190711.SmsClient;
  5. import com.tencentcloudapi.sms.v20190711.models.SendSmsRequest;
  6. import com.tencentcloudapi.sms.v20190711.models.SendSmsResponse;
  7. import com.tencentcloudapi.sms.v20190711.models.SendStatus;
  8. import org.springframework.boot.context.properties.EnableConfigurationProperties;
  9. import org.springframework.context.annotation.Configuration;
  10. /**
  11. * @author 闰土的猹猹君
  12. */
  13. @Configuration(proxyBeanMethods = false)
  14. @EnableConfigurationProperties(SmsProperties.class)
  15. public class SmsConfiguration {
  16. private SmsProperties smsProperties;
  17. public SmsConfiguration(SmsProperties smsProperties) {
  18. this.smsProperties = smsProperties;
  19. }
  20. /**
  21. * 发送验证码
  22. *
  23. * @param phone 手机号
  24. * @param code 验证码
  25. */
  26. public void sendSms(String phone, int code) {
  27. try {
  28. /* 必要步骤:
  29. * 实例化一个认证对象,入参需要传入腾讯云账户密钥对 secretId 和 secretKey
  30. * 本示例采用从环境变量读取的方式,需要预先在环境变量中设置这两个值
  31. * 您也可以直接在代码中写入密钥对,但需谨防泄露,不要将代码复制、上传或者分享给他人
  32. * CAM 密钥查询:https://console.cloud.tencent.com/cam/capi*/
  33. Credential cred = new Credential(smsProperties.getSecretId(), smsProperties.getSecretKey());
  34. /* 实例化 SMS 的 client 对象
  35. * 第二个参数是地域信息,可以直接填写字符串 ap-guangzhou,或者引用预设的常量 */
  36. SmsClient client = new SmsClient(cred, "ap-guangzhou");
  37. /* 实例化一个请求对象,根据调用的接口和实际情况,可以进一步设置请求参数
  38. * 您可以直接查询 SDK 源码确定接口有哪些属性可以设置
  39. * 属性可能是基本类型,也可能引用了另一个数据结构
  40. * 推荐使用 IDE 进行开发,可以方便地跳转查阅各个接口和数据结构的文档说明 */
  41. SendSmsRequest req = new SendSmsRequest();
  42. /* 填充请求参数,这里 request 对象的成员变量即对应接口的入参
  43. * 您可以通过官网接口文档或跳转到 request 对象的定义处查看请求参数的定义
  44. * 基本类型的设置:
  45. * 帮助链接:
  46. * 短信控制台:https://console.cloud.tencent.com/smsv2
  47. * sms helper:https://cloud.tencent.com/document/product/382/3773 */
  48. /* 短信应用 ID: 在 [短信控制台] 添加应用后生成的实际 SDKAppID,例如1400006666 */
  49. req.setSmsSdkAppid(smsProperties.getAppId());
  50. /* 短信签名内容: 使用 UTF-8 编码,必须填写已审核通过的签名,可登录 [短信控制台] 查看签名信息 */
  51. req.setSign(smsProperties.getSign());
  52. /* 模板 ID: 必须填写已审核通过的模板 ID,可登录 [短信控制台] 查看模板 ID */
  53. req.setTemplateID(smsProperties.getTemplateId());
  54. req.setTemplateParamSet(new String[]{"" + code, "3"});
  55. /* 下发手机号码,采用 e.164 标准,+[国家或地区码][手机号]
  56. * 例如+8613711112222, 其中前面有一个+号 ,86为国家码,13711112222为手机号,最多不要超过200个手机号*/
  57. String[] phoneNumbers = new String[1];
  58. phoneNumbers[0] = StrUtil.format("+86{}", phone);
  59. req.setPhoneNumberSet(phoneNumbers);
  60. /* 通过 client 对象调用 SendSms 方法发起请求。注意请求方法名与请求对象是对应的
  61. * 返回的 res 是一个 SendSmsResponse 类的实例,与请求对象对应 */
  62. SendSmsResponse res = client.SendSms(req);
  63. SendStatus[] sendStatusSet = res.getSendStatusSet();
  64. SendStatus sendStatus = sendStatusSet[0];
  65. if ("Ok".equals(sendStatus.getCode())) {
  66. // 发送短信成功,存储这个验证码,后续验证
  67. }
  68. } catch (Exception e) {
  69. e.printStackTrace();
  70. }
  71. }
  72. /**
  73. * 生成验证码
  74. *
  75. * @param len 长度
  76. * @return
  77. */
  78. public int randomNum(int len) {
  79. StringBuffer sb = new StringBuffer("1");
  80. for (int i = 0; i < len; i++) {
  81. sb.append("0");
  82. }
  83. int value = Integer.parseInt(sb.toString());
  84. return (int) (Math.random() * (value * 0.9) + (value * 0.1));
  85. }
  86. }

SmsProperties.java

  1. package com.demo.config;
  2. import lombok.Data;
  3. import org.springframework.boot.context.properties.ConfigurationProperties;
  4. /**
  5. * @author 闰土的猹猹君
  6. */
  7. @Data
  8. @ConfigurationProperties(prefix = "sms")
  9. public class SmsProperties {
  10. /**
  11. * 腾讯云账户密钥对 secretId
  12. */
  13. private String secretId;
  14. /**
  15. * 腾讯云账户密钥对 secretKey
  16. */
  17. private String secretKey;
  18. /**
  19. * 短信应用 ID
  20. */
  21. private String appId;
  22. /**
  23. * 短信签名内容
  24. */
  25. private String sign;
  26. /**
  27. * 模板 ID
  28. */
  29. private String templateId;
  30. }

SmsController.java

  1. package com.demo.controller;
  2. import com.demo.config.SmsConfiguration;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5. import org.springframework.web.bind.annotation.RequestParam;
  6. import org.springframework.web.bind.annotation.RestController;
  7. /**
  8. * @author 闰土的猹猹君
  9. */
  10. @RestController
  11. public class SmsController {
  12. @Autowired
  13. private SmsConfiguration smsConfiguration;
  14. /**
  15. * 发送验证码
  16. *
  17. * @param phone 手机号
  18. */
  19. @RequestMapping("/sendSms")
  20. public void sendSms(
  21. @RequestParam("phone") String phone
  22. ) {
  23. smsConfiguration.sendSms(phone, smsConfiguration.randomNum(6));
  24. }
  25. }

DemoApplication.java

  1. package com.demo;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. /**
  5. * @author 闰土的猹猹君
  6. */
  7. @SpringBootApplication
  8. public class DemoApplication {
  9. public static void main(String[] args) {
  10. SpringApplication.run(DemoApplication.class, args);
  11. }
  12. }

application.yml

  1. sms:
  2. app-id: #短信应用 ID
  3. secret-id: #腾讯云账户密钥对 secretId
  4. secret-key: #腾讯云账户密钥对 secretKey
  5. template-id: #模板 ID
  6. sign: #短信签名内容

pom.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>org.example</groupId>
  7. <artifactId>springboot-sms</artifactId>
  8. <version>1.0-SNAPSHOT</version>
  9. <parent>
  10. <groupId>org.springframework.boot</groupId>
  11. <artifactId>spring-boot-starter-parent</artifactId>
  12. <version>2.4.3</version>
  13. </parent>
  14. <dependencies>
  15. <dependency>
  16. <groupId>org.springframework.boot</groupId>
  17. <artifactId>spring-boot-starter-web</artifactId>
  18. </dependency>
  19. <dependency>
  20. <groupId>org.springframework.boot</groupId>
  21. <artifactId>spring-boot-configuration-processor</artifactId>
  22. </dependency>
  23. <!--腾讯云短信-->
  24. <dependency>
  25. <groupId>com.tencentcloudapi</groupId>
  26. <artifactId>tencentcloud-sdk-java</artifactId>
  27. <version>3.1.62</version>
  28. </dependency>
  29. <dependency>
  30. <groupId>org.projectlombok</groupId>
  31. <artifactId>lombok</artifactId>
  32. </dependency>
  33. <dependency>
  34. <groupId>cn.hutool</groupId>
  35. <artifactId>hutool-all</artifactId>
  36. <version>5.6.1</version>
  37. </dependency>
  38. </dependencies>
  39. </project>

发表评论

表情:
评论列表 (有 0 条评论,429人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java 调用发送

    本篇为从 0 到 1 的一个,用 Java 对接腾讯短信发送功能的一篇流程文章。而标题中的 44 大洋则是用来购买短信套餐,当然如果你是首次使用腾讯云平台则可以享受【免费使用】