SpringBoot2.x 集成腾讯云短信的详细流程

一、腾讯云短信简介

腾讯云短信(Short Message Service,SMS)沉淀腾讯十多年短信服务技术和经验,为QQ、微信等亿级平台和10万+客户提供快速灵活接入的高质量的国内短信与国际/港澳台短信服务。

  • 国内短信验证秒级触达,99%到达率。
  • 国际/港澳台短信覆盖全球200+国家/地区,稳定可靠。

单次短信的业务请求流程如下所示:

短信由签名和正文内容组成,发送短信前需要申请短信签名和正文内容模板。短信签名是位于短信正文前【】中的署名,用于标识公司或业务。短信签名需要审核通过后才可使用。短信模板即具体发送的短信正文内容,短信模板支持验证码模板、通知类短信模板和营销短信模板。短信内容可以通过模板参数实现个性化定制。短信模板申请前需要先申请短信签名,短信模板需要审核通过后才可使用。

二、准备工作

1.开通短信服务

如果没有腾讯云账号,需要注册腾讯云账号,并完成实名认证,可以个人认证和企业认证,不能进行企业认证的话也可以进行个人认证。然后进入腾讯云短信控制台,开通短信服务,开通短信和个人认证之后分别都会赠送包含100条短信的国内套餐包,用来测试足够:

2.创建签名

这里创建国内短信签名,创建完成后等到状态变为已通过就可以使用了:

创建签名时签名类型可以选网站、APP、公众号和小程序,可以根据需要创建:

3.创建正文模板

创建模板,创建完成之后状态变为已通过就可以使用了:

模板内容可以使用标准模板也可以自定义:

4.创建短信应用

在应用列表下可以创建短信应用,获取短信应用的SDKAppID:

点击应用可以查看应用信息:

5.腾讯云API密钥

在访问管理菜单的访问密钥下的API密钥管理中可以新建和查看API密钥,在请求腾讯云短信服务发送短信时需要传入该密钥:

三、集成腾讯云短信

通过Maven新建一个名为springboot-tencent-sms的项目。

1.引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 腾讯云 Java SDK 依赖 -->
<dependency>
    <groupId>com.tencentcloudapi</groupId>
    <artifactId>tencentcloud-sdk-java</artifactId>
    <version>3.1.297</version>
</dependency>
<!-- Spring Data Redis 起步依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- lombok插件 -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.8</version>
</dependency>

2.编写配置类

用于读取配置文件中的自定义腾讯云短信配置的配置类:

package com.rtxtitanv.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

/**
 * @author rtxtitanv
 * @version 1.0.0
 * @name com.rtxtitanv.config.SmsConfig
 * @description 腾讯云短信配置类
 * @date 2021/6/25 16:21
 */
@ConfigurationProperties(prefix = "tencent.sms")
@Configuration
@Data
public class SmsConfig {
    /**
     * 腾讯云API密钥的SecretId
     */
    private String secretId;
    /**
     * 腾讯云API密钥的SecretKey
     */
    private String secretKey;
    /**
     * 短信应用的SDKAppID
     */
    private String appId;
    /**
     * 签名内容
     */
    private String sign;
    /**
     * 模板ID
     */
    private String templateId;
    /**
     * 过期时间
     */
    private String expireTime;
    /**
     * redis存储的key的前缀
     */
    private String phonePrefix;
}

Redis配置类:

package com.rtxtitanv.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

import javax.annotation.Resource;

/**
 * @author rtxtitanv
 * @version 1.0.0
 * @name com.rtxtitanv.config.RedisConfig
 * @description Redis配置类
 * @date 2021/6/26 12:24
 */
@Configuration
public class RedisConfig {

    @Resource
    private RedisConnectionFactory redisConnectionFactory;

    /**
     * RedisTemplate实例
     *
     * @return RedisTemplate实例
     */
    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        initRedisTemplate(redisTemplate, redisConnectionFactory);
        return redisTemplate;
    }

    /**
     * 设置数据存入redis的序列化方式
     *
     * @param redisTemplate RedisTemplate对象
     * @param factory       RedisConnectionFactory对象
     */
    private void initRedisTemplate(RedisTemplate<String, Object> redisTemplate, RedisConnectionFactory factory) {
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new GenericJackson2JsonRedisSerializer());
        redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
        redisTemplate.setConnectionFactory(factory);
    }
}

3.编写配置文件

spring:
  redis:
    host: 127.0.0.1
    port: 6379

# 自定义腾讯云短信配置
tencent:
  sms:
    # 配置腾讯云API密钥的SecretId
    secretId: 这里填腾讯云API密钥的SecretId
    # 配置腾讯云API密钥的SecretKey
    secretKey: 这里填腾讯云API密钥的SecretKey
    # 配置短信应用的SDKAppID
    appId: 这里填短信应用的SDKAppID
    # 配置签名内容
    sign: "这里填签名内容"
    # 配置模板ID
    templateId: 这里填模板ID
    # 配置过期时间
    expireTime: 5
    # 配置redis存储的key的前缀
    phonePrefix: REGIST

4.编写工具类

腾讯云短信工具类:

package com.rtxtitanv.util;

import com.rtxtitanv.config.SmsConfig;
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;
import com.tencentcloudapi.sms.v20210111.models.SendStatus;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @author rtxtitanv
 * @version 1.0.0
 * @name com.rtxtitanv.util.SmsUtil
 * @description 腾讯云短信工具类
 * @date 2021/6/25 16:21
 */
public class SmsUtil {

    private static final Logger LOGGER = LoggerFactory.getLogger(SmsUtil.class);

    /**
     * 发送短信
     *
     * @param smsConfig      腾讯云短信配置对象
     * @param templateParams 模板参数
     * @param phoneNumbers   手机号数组
     * @return SendStatus[],短信发送状态
     */
    public static SendStatus[] sendSms(SmsConfig smsConfig, String[] templateParams, String[] phoneNumbers) {
        try {
            // 实例化一个认证对象,入参需要传入腾讯云账户密钥对secretId,secretKey。
            Credential cred = new Credential(smsConfig.getSecretId(), smsConfig.getSecretKey());
            // 实例化一个http选项,可选,没有特殊需求可以跳过
            HttpProfile httpProfile = new HttpProfile();
            // SDK默认使用POST方法
            httpProfile.setReqMethod("POST");
            // SDK有默认的超时时间,非必要请不要进行调整
            httpProfile.setConnTimeout(60);
            // 非必要步骤:实例化一个客户端配置对象,可以指定超时时间等配置
            ClientProfile clientProfile = new ClientProfile();
            // SDK默认用TC3-HMAC-SHA256进行签名,非必要请不要修改这个字段
            clientProfile.setSignMethod("HmacSHA256");
            clientProfile.setHttpProfile(httpProfile);
            // 实例化要请求产品(以sms为例)的client对象,第二个参数是地域信息,可以直接填写字符串ap-guangzhou,或者引用预设的常量
            SmsClient smsClient = new SmsClient(cred, "ap-guangzhou", clientProfile);
            // 实例化一个请求对象
            SendSmsRequest req = new SendSmsRequest();
            // 设置短信应用ID:短信SdkAppId在[短信控制台]添加应用后生成的实际SdkAppId
            req.setSmsSdkAppId(smsConfig.getAppId());
            // 设置短信签名内容:使用UTF-8编码,必须填写已审核通过的签名,签名信息可登录[短信控制台]查看
            req.setSignName(smsConfig.getSign());
            // 设置国际/港澳台短信SenderId:国内短信填空,默认未开通
            req.setSenderId("");
            // 设置模板ID:必须填写已审核通过的模板ID。模板ID可登录[短信控制台]查看
            req.setTemplateId(smsConfig.getTemplateId());
            // 设置下发手机号码,采用E.164标准,+[国家或地区码][手机号]
            req.setPhoneNumberSet(phoneNumbers);
            // 设置模板参数:若无模板参数,则设置为空
            req.setTemplateParamSet(templateParams);
            // 通过client对象调用SendSms方法发起请求。注意请求方法名与请求对象是对应的,返回的res是一个SendSmsResponse类的实例,与请求对象对应
            SendSmsResponse res = smsClient.SendSms(req);
            // 控制台打印日志输出json格式的字符串回包
            LOGGER.info(SendSmsResponse.toJsonString(res));
            return res.getSendStatusSet();
        } catch (TencentCloudSDKException e) {
            e.printStackTrace();
            throw new RuntimeException(e.getMessage());
        }
    }
}

Redis工具类:

package com.rtxtitanv.util;

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.concurrent.TimeUnit;

/**
 * @author rtxtitanv
 * @version 1.0.0
 * @name com.rtxtitanv.util.RedisUtil
 * @description Redis工具类
 * @date 2021/6/26 12:24
 */
@Component
public class RedisUtil {

    @Resource
    private RedisTemplate<String, Object> redisTemplate;

    /**
     * 缓存基本对象
     *
     * @param key    键
     * @param value  值
     * @param expire 键的过期时间
     */
    public void setCacheObject(String key, Object value, long expire) {
        redisTemplate.opsForValue().set(key, value);
        if (expire > 0) {
            redisTemplate.expire(key, expire, TimeUnit.MINUTES);
        }
    }

    /**
     * 获取指定键的缓存对象
     *
     * @param key 键
     * @return 缓存对象
     */
    public Object getCacheObject(String key) {
        return redisTemplate.opsForValue().get(key);
    }

    /**
     * 判断键是否存在并且未过期
     *
     * @param key 键
     * @return true,键存在并且未过期;false,键不存在或存在但过期
     */
    public boolean hasKey(String key) {
        return redisTemplate.hasKey(key) && getExpire(key) > 0 ? true : false;
    }

    /**
     * 获取键的过期时间
     *
     * @param key 键
     * @return 过期时间
     */
    public long getExpire(String key) {
        return redisTemplate.getExpire(key, TimeUnit.MINUTES);
    }

    /**
     * 删除指定键的缓存
     *
     * @param key 键
     */
    public void delete(String key) {
        redisTemplate.delete(key);
    }

    /**
     * 创建缓存的键
     *
     * @param prefix      前缀
     * @param phoneNumber 手机号
     * @return 键
     */
    public static String createCacheKey(String prefix, String phoneNumber) {
        return prefix + phoneNumber;
    }
}

用于生成随机验证码的工具类:

package com.rtxtitanv.util;

import java.util.Random;

/**
 * @author rtxtitanv
 * @version 1.0.0
 * @name com.rtxtitanv.util.RandomUtil
 * @description Random工具类
 * @date 2021/6/26 11:39
 */
public class RandomUtil {

    private static final Random RANDOM = new Random();

    /**
     * 生成指定位数的随机数字字符串
     *
     * @param length 字符串长度
     * @return 随机数字字符串
     */
    public static String randomNumbers(int length) {
        StringBuilder randomNumbers = new StringBuilder();
        for (int i = 0; i < length; i++) {
            randomNumbers.append(RANDOM.nextInt(10));
        }
        return randomNumbers.toString();
    }
}

5.Controller层

package com.rtxtitanv.controller;

import com.rtxtitanv.service.SmsService;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * @author rtxtitanv
 * @version 1.0.0
 * @name com.rtxtitanv.controller.SmsController
 * @description SmsController
 * @date 2021/6/25 16:20
 */
@RequestMapping("/sms")
@RestController
public class SmsController {

    @Resource
    private SmsService smsService;

    @PostMapping("/send")
    public String sendSmsCode(@RequestParam(value = "phoneNumber") String phoneNumber) {
        return smsService.sendSmsCode(phoneNumber);
    }

    @PostMapping("/verify")
    public String verifySmsCode(@RequestParam(value = "phoneNumber") String phoneNumber,
        @RequestParam(value = "smsCode") String smsCode) {
        return smsService.verifySmsCode(phoneNumber, smsCode);
    }
}

6.Service层

package com.rtxtitanv.service;

/**
 * @author rtxtitanv
 * @version 1.0.0
 * @name com.rtxtitanv.service.SmsService
 * @description SmsService
 * @date 2021/6/25 16:20
 */
public interface SmsService {

    /**
     * 发送短信验证码
     *
     * @param phoneNumber 手机号
     * @return
     */
    String sendSmsCode(String phoneNumber);

    /**
     * 验证短信验证码
     *
     * @param phoneNumber 手机号
     * @param smsCode     短信验证码
     * @return
     */
    String verifySmsCode(String phoneNumber, String smsCode);
}
package com.rtxtitanv.service.impl;

import com.rtxtitanv.config.SmsConfig;
import com.rtxtitanv.service.SmsService;
import com.rtxtitanv.util.RandomUtil;
import com.rtxtitanv.util.RedisUtil;
import com.rtxtitanv.util.SmsUtil;
import com.tencentcloudapi.sms.v20210111.models.SendStatus;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * @author rtxtitanv
 * @version 1.0.0
 * @name com.rtxtitanv.service.impl.SmsServiceImpl
 * @description SmsService实现类
 * @date 2021/6/25 16:20
 */
@Service
public class SmsServiceImpl implements SmsService {

    @Resource
    private SmsConfig smsConfig;
    @Resource
    private RedisUtil redisUtil;

    @Override
    public String sendSmsCode(String phoneNumber) {
        // 下发手机号码,采用e.164标准,+[国家或地区码][手机号]
        String[] phoneNumbers = {"+86" + phoneNumber};
        // 生成6位随机数字字符串
        String smsCode = RandomUtil.randomNumbers(6);
        // 模板参数:若无模板参数,则设置为空(参数1为随机验证码,参数2为有效时间)
        String[] templateParams = {smsCode, smsConfig.getExpireTime()};
        // 发送短信验证码
        SendStatus[] sendStatuses = SmsUtil.sendSms(smsConfig, templateParams, phoneNumbers);
        if ("Ok".equals(sendStatuses[0].getCode())) {
            // 创建缓存的key
            String key = RedisUtil.createCacheKey(smsConfig.getPhonePrefix(), phoneNumber);
            // 将验证码缓存到redis并设置过期时间
            redisUtil.setCacheObject(key, smsCode, Long.parseLong(smsConfig.getExpireTime()));
            return "验证码发送成功";
        } else {
            return "验证码发送失败:" + sendStatuses[0].getMessage();
        }
    }

    @Override
    public String verifySmsCode(String phoneNumber, String smsCode) {
        // 创建key
        String key = RedisUtil.createCacheKey(smsConfig.getPhonePrefix(), phoneNumber);
        // 判断指定key是否存在并且未过期
        if (redisUtil.hasKey(key)) {
            // 验证输入的验证码是否正确
            if (smsCode.equals(redisUtil.getCacheObject(key))) {
                // 验证成功后删除验证码缓存
                redisUtil.delete(key);
                return "验证成功";
            } else {
                return "验证码错误";
            }
        } else {
            return "验证码已失效";
        }
    }
}

四、腾讯云短信测试

运行项目,使用Postman进行接口测试。

1.发送短信验证码

发送如下POST请求以请求腾讯云短信服务向指定手机号发送短信验证码,请求地址为http://localhost:8080/sms/send

Redis客户端查看发现验证码已经存到了Redis中:

手机上也成功收到了验证码,说明发送短信成功:

2.验证短信验证码

发送如下POST请求验证短信验证码,请求地址为http://localhost:8080/sms/verify,这里将验证码参数smscode设为不同于之前发送到手机的验证码来模拟验证码输入错误:

再次发送如下POST请求验证短信验证码,这里输入正确的验证码:

Redis客户端刷新发现验证码缓存已经删除:

再次发送如下POST请求验证短信验证码,发现验证码已失效,满足短信验证码验证成功后就失效的业务需求:

代码示例

Github:https://github.com/RtxTitanV/springboot-learning/tree/master/springboot2.x-learning/springboot-tencent-sms
Gitee:https://gitee.com/RtxTitanV/springboot-learning/tree/master/springboot2.x-learning/springboot-tencent-sms

到此这篇关于SpringBoot2.x 集成腾讯云短信的文章就介绍到这了,更多相关SpringBoot腾讯云短信内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringBoot实现短信验证码校验方法思路详解

    有关阿里云通信短信服务验证码的发送,请参考我的另一篇文章   Springboot实现阿里云通信短信服务有关短信验证码的发送功能 思路 用户输入手机号后,点击按钮获取验证码.并设置冷却时间,防止用户频繁点击. 后台生成验证码并发送到用户手机上,根据验证码.时间及一串自定义秘钥生成MD5值,并将时间也传回到前端. 用户输入验证码后,将验证码和时间传到后台.后台先用当前时间减去前台传过来的时间验证是否超时.如果没有超时,就用用户输入的验证码 + 时间 + 自定义秘钥生成MD5值与之前的MD5值比较,

  • springboot整合腾讯云短信开箱即用的示例代码

    引入腾讯云依赖 <!--腾讯云核心API--> <dependency> <groupId>com.tencentcloudapi</groupId> <artifactId>tencentcloud-sdk-java</artifactId> <version>3.1.111</version> </dependency> <dependency> <groupId>com

  • SpringBoot + SpringSecurity 短信验证码登录功能实现

    实现原理 在之前的文章中,我们介绍了普通的帐号密码登录的方式: SpringBoot + Spring Security 基本使用及个性化登录配置. 但是现在还有一种常见的方式,就是直接通过手机短信验证码登录,这里就需要自己来做一些额外的工作了. 对SpringSecurity认证流程详解有一定了解的都知道,在帐号密码认证的过程中,涉及到了以下几个类:UsernamePasswordAuthenticationFilter(用于请求参数获取),UsernamePasswordAuthentica

  • Springboot实现阿里云通信短信服务有关短信验证码的发送功能

    前言 短信验证码是通过发送验证码到手机的一种有效的验证码系统.主要用于验证用户手机的合法性及敏感操作的身份验证. 现在市面上的短信服务平台有很多.大家在选择的时候未免会有些不好抉择.本人建议选择短信服务商应遵循以下几点: 服务商知名度高,业务流量大.(这样的平台可信度高) 服务稳定,不能经常宕机.(保证自身业务的流畅运行) 文档全面详细.(没文档怎么玩?) 最近的一个项目中,注册和修改密码时需要用到短信验证码校验手机号的功能.本人也是对比几家后,直接选择阿里云通信的短信服务.(本身项目服务器也是

  • SpringBoot+Security 发送短信验证码的实现

    在core模块下properties包中创建SmsCodeProperties 在ValidateCodeProperties中new一个SmsCodeProperties对象,并实现getter.setter方法 在core模块下validate包中创建SmsCodeGenerator实现ValidateCodeGenerator接口 创建SmsCodeSender接口,定义发送短信的抽象方法 实现SmsCodeSender接口 在ValidateCodeBeanConfig中把SmsCode

  • SpringBoot实现发送短信的示例代码

    一.说明 在https://office.ucpaas.com/ 注册账号并且认证为个人开发者(需要身份证),这个不难,不多说了 短信的三方平台有许多,对于选择什么平台要根据个人业务场景选择,这里只是DEMO 二.创建平台项目 创建平台项目后可以获得短信基础配置,在调用短信接口时使用 三.创建短信模板 模板动态参数设置规则为{1}{2}{3}...{n} (注意:在调用时参数之间拼接用逗号作为间隔符,这个见代码描述) 四.使用RestTemplate调用短信接口 Spring Boot 版本:2

  • SpringBoot2.x 集成腾讯云短信的详细流程

    一.腾讯云短信简介 腾讯云短信(Short Message Service,SMS)沉淀腾讯十多年短信服务技术和经验,为QQ.微信等亿级平台和10万+客户提供快速灵活接入的高质量的国内短信与国际/港澳台短信服务. 国内短信验证秒级触达,99%到达率. 国际/港澳台短信覆盖全球200+国家/地区,稳定可靠. 单次短信的业务请求流程如下所示: 短信由签名和正文内容组成,发送短信前需要申请短信签名和正文内容模板.短信签名是位于短信正文前[]中的署名,用于标识公司或业务.短信签名需要审核通过后才可使用.

  • java 实现发短信功能---腾讯云短信

    前言 如今发短信功能已经成为互联网公司的标配,本篇文章将一步步实现java发送短信 考察了许多提供短信服务的三方,几乎所有都需要企业认证才可以使用,这对于个人学习非常不方便.多方比较之后,选择了腾讯云(此处并非做广告),原因有两点: 支持微信公众号认证(门槛低)每月赠送100条免费短信(适合个人学习)(这一点请矿家子弟自行忽略) 开发环境 请参照: Spring Boot实现模块化的几种方法 腾讯云 ---短信 找到短信服务 开通之后,点击添加应用 设置短信签名(以公众号为例),签名类型选择公众

  • Django之腾讯云短信的实现

    简介 由于项目在注册.登录.找回密码 时需要发送短信验证的功能,我们使用腾讯云短信做. 为什么要用腾讯云短信呢? 因为注册就送 100条免费短信 的额度. 实现 注册腾讯云 注册一个腾讯云账户,腾讯云中提供了很多功能:云服务器.云存储你.云直播.云短信等很多功能. 注册地址: https://cloud.tencent.com/ 注册并要实名认证 开通云短信 创建应用 创建应用并将应用中生成的 SDK AppID 和 App Key 复制下来,之后通过python发送短信时需要用到. 创建签名

  • Java调用腾讯云短信API接口的实现

    前言 有想使用短信API服务的朋友可以如果没有注册腾讯云的话可以注册一下,好像新用户可以免费领取100条短信服务(PS:绝对不是打广告) 一.登录腾讯云操作平台 登陆腾讯云的平台https://cloud.tencent.com/,登陆成功后搜索短信,进入短信产品的控制台,进入短信平台后,需要创建签名和创建正文模板. 1.创建签名模板 2.创建正文模板 这两步都需要审核,按照指引填写即可,一般时间会在2小时左右. 当你的签名审核通过后,在控制台可以看到签名的id和签名的内容,其中签名的内容在后续

  • Spring Boot腾讯云短信申请与使用示例

    1.在pom.xml文件中添加依赖 <dependency> <groupId>com.tencentcloudapi</groupId> <artifactId>tencentcloud-sdk-java</artifactId> <version>3.1.270</version> </dependency> 2.新建SmsConstant常量类保存需要用到的常量 public class SmsConst

  • Java整合腾讯云短信发送实例代码

    目录 1. 引入相关maven依赖 2. 编写短信发送工具类 3. 业务层 3. 相关工具类 1. 引入相关maven依赖 <dependency> <groupId>com.github.qcloudsms</groupId> <artifactId>qcloudsms</artifactId> <version>1.0.6</version> </dependency> <dependency>

  • Python调用腾讯云短信服务发送手机短信

    目录 1.准备工作 2.代码实现 3.拓展 4.闲聊 1.准备工作 pip install qcloudsms_py 1.注册腾讯云账号 2.在产品列表内找到短信,在短信内添加应用 3.获取对应的SDK AppID 和 App Key 4.配置短信内容 注:需先申请“短信签名”和“短信正文”,按照要求填写申请即可,腾讯云的审核效率还是很快的,一般在1-2个小时内就会有结果 注:腾讯云的短信服务现在好像也不免费了,之前每个月还会赠送100条免费短信额度.总结:准备工作准备内容:SDK AppID.

  • 关于springboot集成阿里云短信的问题

    目录 1.获取签名与模板 2.编写模板与签名的枚举类 3.配置类 4.测试类 ​ 1.获取签名与模板 进入阿里云平台,进入短信服务模块,在以下位置添加签名和模板(格式一定按照要求填写 审批的比较严格) 2.编写模板与签名的枚举类 在上文获取模板与签名成功后,并作为常量放在枚举类中. public enum DySmsEnum { /** * 本类此处需要修改(短信模板编码,签名,参数) */ LOGIN_TEMPLATE_CODE("SMS_187570276", "自定义软

  • SpringBoot实现阿里云短信接口对接的示例代码

    前言 公司最近项目需要一个手机验证码的功能,任务确定后,倍感亚历山大,以为和第三方对接的都好麻烦,查阿里的API.网上大神写的博客,各种查之后才发现,简单的一塌糊涂,这里想说个问题,不知道其他的攻城狮们是不是和我一样的心里,刚接触个没做过的任务时,会一脸懵里的着急,无从下手的感觉,后来会了,就觉得简单的一*,在这里我说一下自己的体会,遇到任何难点,先理思路.任务拆分.逐个查资料,其实一套下来,就不会那种一脸懵逼的干着急... 所需条件 1.阿里云账户 2.开通云通讯中的短信服务 3.申请短信签名

随机推荐