【Java/Springboot】腾讯云短信服务 | 手机验证码

511 阅读1分钟

一、前期准备

多方比较后,发现阿里云必须得公司注册sms服务

腾讯云个人可以采用微信公众号的方式,注册SMS服务,门槛比较低。

腾讯云

1.1 注册微信公众号

选择个人注册,只需要身份证和一个微信号。过程略...

微信公众号

1.2 创建签名

image-20220307084957470

image-20220307084628025

1.3 申请正文模板

选择任一模板进行申请即可。

注:必须在先完成1.2后再申请1.3,否则不通过。

image-20220307085110777

1.4 腾讯云秘钥

秘钥地址:应用列表 - 应用管理 - 短信 - 控制台 (tencent.com)

appid和appKey位置,应用管理 -> 应用列表 -> 系统默认应用 -> 点击后可以看到

二、代码编写

2.1 依赖添加

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

2.2 Sms.class:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Sms {
    String phoneNumber;
    String code;
    int min;
}

2.3 SmsController:

@PostMapping("/send")
public String sendSms(@RequestBody Sms sms) {
    // 下面的信息请改成自己的
    
    Integer appId = 14006xxx6;   // id 和 key , 应用管理 -> 应用列表 -> 系统默认应用 -> 点击后可以看到
    String appKey = "6d0378373xxxxe9687b2167c9";
    Integer templateId = 1316925; // 国内短信->正文模板管理->ID
    String signContent = "前端技能树";  // 国内短信->签名管理->签名内容

    
    // 验证码
    Integer code = RandomUtils.randInt(1000, 9999);

    try {
        String[] params = {code.toString(), Integer.toString(sms.getMin())};
        SmsSingleSender sender = new SmsSingleSender(
                appId, appKey
        );

        SmsSingleSenderResult result = sender.sendWithParam(
                "86",
                sms.getPhoneNumber(),
                templateId,
                params,
                signContent,
                "",
                ""
        );

        System.out.println(result);

        // 保存到redis中
        // redisTemplate.opsForValue().set(sms.getPhoneNumber(), code);

        // 设置过期时间
        // redisTemplate.expire(sms.getPhoneNumber(), sms.getMin(), TimeUnit.MINUTES);

        return result.toString();
    } catch (Exception e) {
        e.printStackTrace();
    }


    return "";
}

参考链接

[1] SpringBoot 开发案例之接入腾讯云短信 - 云+社区 - 腾讯云 (tencent.com)

[2] 短信 Java SDK - SDK 文档 - 文档中心 - 腾讯云 (tencent.com)