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

我们在使用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依赖方式引入,主要下面一个依赖即可。

<dependency>
    <groupId>com.github.qcloudsms</groupId>
    <artifactId>qcloudsms</artifactId>
    <version>1.0.6</version>
</dependency>

定义相关参数

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

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

生成短信验证码工具类

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

/**
 *  动态生成短信验证码工具类
 */
public class VerifyCode {

    /**
     * 创建指定数量的随机字符串
     * @param isNumber 是否是数字
     * @param length
     * @return
     */
    public static String createRandom(boolean isNumber, int length){
        String resultStr = "";
        String codeContent = isNumber ? "1234567890" : "1234567890abcdefghijkmnpqrstuvwxyz";
        boolean flag = true;
        do {
            int count = 0;
            for (int i = 0; i < length; i++) {
                double randomCode = Math.random() * codeContent.length();
                int code = (int) Math.floor(randomCode);
                char c = codeContent.charAt(code);
                if (('0' <= c) && (c <= '9')) {
                    count++;
                }
                resultStr += codeContent.charAt(code);
            }
            if (count >= 2) {
                flag = false;
            }
        } while (flag);
        return resultStr;
    }
}

发送短信

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

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

    private SMSParameter smsParameter = new SMSParameter();
    
    @Test
    public void testSendMessage(){
        try {
            //短信模板中的参数列表
            String[] params = {VerifyCode.createRandom(true,4),"5"};
            SmsSingleSender sender = new SmsSingleSender(smsParameter.getAppId(), smsParameter.getAppKey());
            SmsSingleSenderResult result = sender.sendWithParam("86", smsParameter.getPhoneNumbers()[0],
                    smsParameter.getTemplateId(), params, smsParameter.getSmsSign(), "", "");
        } catch (HTTPException e) {
            // HTTP 响应码错误
            e.printStackTrace();
        } catch (JSONException e) {
            // JSON 解析错误
            e.printStackTrace();
        } catch (IOException e) {
            // 网络 IO 错误
            e.printStackTrace();
        }
    }
}

这里给出sendWithParam方法所有参数的说明,哈哈,直接拿官方的来展示...

在这里插入图片描述

执行测试,发送短信成功,这样我们就完成了发送短信功能。这样我们就可以在项目中使用短信验证码登录等等...
下面的9999之前我是固定写的,后来才改为动态生成验证码,因为动态生成的验证码一般不可能是9999,这样的概率太小了。
在这里插入图片描述

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • 在给客户开发一个信息发送功能的时候,需要涉及到短信的发送,短信发送一般不同的厂商提供的接口不同,处理方式也不太一样...
    伍华聪_开发框架阅读 1,974评论 0 49
  • 俗话说,真人不露相,露相非真人。说的是高手一般不轻易显摆,懂得韬光养晦。 是啊,锋芒毕露未必是好事,谨言慎行才是最...
    木木心Q阅读 3,093评论 4 13
  • 经历了一学期的彩虹花网课,激动很多,感动很多,收获也很多。原本只是一名助学老师的我,在一次机缘巧合下,收到时老师的...
    孙敏贵州阅读 467评论 0 9
  • 与伏羲教育结缘是在2016年冬的家长会,还下着毛毛细雨,虽然里里外外穿了好几层还是觉得冷,毕竟在南方呆的时...
    孝亲尊师阅读 369评论 0 0
  • 我们搬家了,我特别喜欢这个新家,妈妈还给我买了我最喜欢的小熊毛绒玩具,放在我的卧室里,每次睡觉我都会抱着它一起睡,...
    小弋竟雯阅读 201评论 0 0