SpringBoot集成腾讯云短信服务发送短信

矫情吗;* 2023-07-07 03:55 92阅读 0赞

我们在使用APP、网站的过程中,都离不开短信的支持。比如:注册需要发送短信验证码,忘记密码需要发送验证码等等。所以接下来就把发送短信的具体实现过程记录下来,既是为了自己以后查阅方便,也是想分享给大家,如果有什么不足的地方欢迎大家不吝指出。

我们只需要完成下面的几个步骤就可以发送短信了

注册腾讯云以及完成认证

  1. 这里我使用的是腾讯云提供的短信服务,使用该服务之前我们需要完成认证,有个人认证和企业认证。这里我是个人认证,个人认证完成后提供100条免费短信发送,有效期是3个月,对于我们个人做测试是足够了。
  2. 注册并认证后,我们接下来就是在短信控制台中进行相关操作,下面网址就是直通到短信控制台页面。
    https://console.cloud.tencent.com/smsv2/manage-package在这里插入图片描述
  3. 我们也可以查看官方文档教程,写的也比较详细,下面也给出网址。
    https://cloud.tencent.com/document/product/382/18071在这里插入图片描述

短信结构

这里拿一张短信图片来说明,这是它官网教程的图片,短信主要由短信签名和短信模板组成。

  1. 短信签名就是下面红色框里面的内容:XXX
  2. 短信模板就是除了短信签名之外的所有内容
    在这里插入图片描述
    也就是我们我们接下来要创建属于自己的短信签名和短信模板,它们都需要经过审核通过后才能使用,要不然没法用…

创建应用

我们发送短信的时候,需要先创建应用。我们可以创建多个应用,每个应用都可以使用相同的短信签名和短信模板。创建应用不需要审核。

  1. 输入应用名称
  2. 输入应用简介
    在这里插入图片描述
    上面我创建了一个测试应用,我们直接点击应用名称,可以看到应用的详细内容,这里我们需要记住下图中两个红色框的内容。
    接下来我们使用短信API的时候要用到它们。
    在这里插入图片描述
    接下来我们就是要创建短信签名和短信模板了,如果它们都审核通过,我们就可以使用短信API发送短信了。

创建短信签名

  1. 我们在1位置选择签名的类型,这里我使用的是网站,还有其他的选项…
  2. 如果选择的是网站,那么签名内容一定要是网站的名称,不是可能审核不通过…
  3. 证明上传可以查看3位置处的查看范例,它说明的比较详细…
  4. 申明说明要求被写网站域名,创建签名后就等待审核,一般半个钟之内就能知道结果
    在这里插入图片描述

创建短信模板

  1. 输入模板名称,一般是以用途命名,比如:验证码…
  2. 我们可以在2位置选择标准模板,也可以跳过,直接在3位置处自定义我们的模板
  3. 模板中可能出现{1},{2},…这个表示的是变量,也就是我们可以在程序中动态指定它们,比如:验证码号码,有效时间…
  4. 创建模板后也需要审核,时间和签名差不多…
    在这里插入图片描述
    如果它们都审核通过,我们接下来就操作短信API来发送短信

引入短信API

我们需要使用腾讯云官方的API来发送短信,我们使用最常用的Maven依赖方式引入,主要下面一个依赖即可。

  1. <dependency>
  2. <groupId>com.github.qcloudsms</groupId>
  3. <artifactId>qcloudsms</artifactId>
  4. <version>1.0.6</version>
  5. </dependency>

定义相关参数

引入API后,我们需要定义发送短信需要的参数。下面的参数都是虚假的,大家在使用的时候对应写成自己的即可。
因为是测试发送短信,所有参数都是固定写,没有动态指定。

  1. /** * 封装发送短信所需的参数 */
  2. @Data
  3. public class SMSParameter {
  4. // 短信应用 SDK AppID,SDK AppID 以1400开头
  5. private int appId = XXX;
  6. // 短信应用SDK AppKey
  7. private String appKey = "XXX";
  8. // 需要发送短信的手机号码,可以定义多个手机号码
  9. private String[] phoneNumbers = { "XXX","XXX"};
  10. // 短信模板ID,需要在短信控制台中申请,我们查看自己的短信模板ID即可
  11. private int templateId = XXX;
  12. // 签名,签名参数使用的是`签名内容`,而不是`签名ID`,真实的签名需要在短信控制台申请,这里按自己的来修改就好
  13. private String smsSign = "XXX";
  14. }

生成短信验证码工具类

短信验证码可以是4位或者6位的数字字母组合,我们可以通过下面代码动态的生成短信验证码

  1. /** * 动态生成短信验证码工具类 */
  2. public class VerifyCode {
  3. /** * 创建指定数量的随机字符串 * @param isNumber 是否是数字 * @param length * @return */
  4. public static String createRandom(boolean isNumber, int length){
  5. String resultStr = "";
  6. String codeContent = isNumber ? "1234567890" : "1234567890abcdefghijkmnpqrstuvwxyz";
  7. boolean flag = true;
  8. do {
  9. int count = 0;
  10. for (int i = 0; i < length; i++) {
  11. double randomCode = Math.random() * codeContent.length();
  12. int code = (int) Math.floor(randomCode);
  13. char c = codeContent.charAt(code);
  14. if (('0' <= c) && (c <= '9')) {
  15. count++;
  16. }
  17. resultStr += codeContent.charAt(code);
  18. }
  19. if (count >= 2) {
  20. flag = false;
  21. }
  22. } while (flag);
  23. return resultStr;
  24. }
  25. }

发送短信

上面的步骤都完成后,我们就可以发送短信了。下面我就说一下发送短信的步骤

  1. 这里我就直接new一个参数类对象,如果使用springboot的话可以通过依赖注入的方式
  2. 下面的params是为短信模板中的变量复制,也就是我们上面说的{1},{2},…,顺序要对应起来,要不然发送的短信意思可就乱了…
  3. 我的短信模板是有两个变量,一个是验证码,另一个是有效时间,当然变量个数是不限制的

    public class SendMessageTest {

    1. private SMSParameter smsParameter = new SMSParameter();
    2. @Test
    3. public void testSendMessage(){
    4. try {
    5. //短信模板中的参数列表
    6. String[] params = { VerifyCode.createRandom(true,4),"5"};
    7. SmsSingleSender sender = new SmsSingleSender(smsParameter.getAppId(), smsParameter.getAppKey());
    8. SmsSingleSenderResult result = sender.sendWithParam("86", smsParameter.getPhoneNumbers()[0],
    9. smsParameter.getTemplateId(), params, smsParameter.getSmsSign(), "", "");
    10. } catch (HTTPException e) {
    11. // HTTP 响应码错误
    12. e.printStackTrace();
    13. } catch (JSONException e) {
    14. // JSON 解析错误
    15. e.printStackTrace();
    16. } catch (IOException e) {
    17. // 网络 IO 错误
    18. e.printStackTrace();
    19. }
    20. }

    }

这里给出sendWithParam方法所有参数的说明,哈哈,直接拿官方的来展示…
在这里插入图片描述
执行测试,发送短信成功,这样我们就完成了发送短信功能。这样我们就可以在项目中使用短信验证码登录等等…
下面的9999之前我是固定写的,后来才改为动态生成验证码,因为动态生成的验证码一般不可能是9999,这样的概率太小了。
在这里插入图片描述

发表评论

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

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

相关阅读

    相关 Java 调用发送

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

    相关 java对接服务

    一.开发前准备 1. 创建一个签名 点击这个创建模板,或者点击左侧的 国内短信》签名管理 这里需要一个已经备案好的网站,没有备案网站的可以在腾讯云买一个,然后在