springboot项目实现腾讯云的短信验证

时间:2023-01-21 21:55:09

前言:可以先去看下腾讯云开通短息服务需要哪些信息。我这里使用自己很久之前申请过的公众号,其他的比如网站,小程序啥的也没有,哈哈哈~。
腾讯云地址:

https://console.cloud.tencent.com/smsv2/csms-sign/create

接下来开始实现:
1申请短信服务->创建签名,签名类型选择公众号,因为我只有公众号的信息。大家可以自行选择,然后就是按照按照步骤提示上传相应的信息,接下来就是等到官方审核了。通过以后在签名管理这里就会有一个签名。
springboot项目实现腾讯云的短信验证

2进入正文模板管理,也是按照要求填写相关信息
springboot项目实现腾讯云的短信验证
都审核通过以后我们就会拿到发送短信时需要的参数。
代码如下:
1:pom中引入依赖

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

springboot项目实现腾讯云的短信验证
2:腾讯云短信服务的参数,我这里写在了yml文件中,然后读取yml文件

tencent:
  msm:
    # 应用列表中查看的,SDK AppID是短信应用的唯一标识,调用短信API接口时,需要提供该参数
    sdkAppId: 
    # App Key是用来校验短信发送合法性的密码,与SDKAppID对应
    appKey: 
    # 短信模板ID-正文模板管理中的ID
    templateId: ""
    # 签名内容
    sigeName: ""

第一个参数和第二个参数都可以在应用管理->应用列表中查看到
springboot项目实现腾讯云的短信验证
springboot项目实现腾讯云的短信验证

第三个参数就是模板id
springboot项目实现腾讯云的短信验证
第四个参数就是签名内容,是在签名管理中
springboot项目实现腾讯云的短信验证
3:创建签名参数工具类,目的是读取配置文件中的参数
MsmInfoUtils

package com.example.trade_back_code.utils;

import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * @Description: 发送短信字段映射
 * @Title: MsmInfoUtils
 * @Package com.example.trade_back_code.utils
 * @Author: ytsj
 * @CreateTime: 2023/1/19 12:08
 */
@Component
public class MsmInfoUtils implements InitializingBean {
    /**
     * sdkAppId
     */
    @Value("${tencent.msm.sdkAppId}")
    private String sdkAppId;
    /**
     * appKey
     */
    @Value("${tencent.msm.appKey}")
    private String appKey;
    /**
     * 模板id
     */
    @Value("${tencent.msm.templateId}")
    private String templateId;
    /**
     * 签名内容
     */
    @Value("${tencent.msm.sigeName}")
    private String sigeName;

    public static String SDK_APP_ID;
    public static String APP_KEY;
    public static String TEMPLATE_ID;
    public static String SING_NAME;

    @Override
    public void afterPropertiesSet() throws Exception {
        SDK_APP_ID = sdkAppId;
        APP_KEY = appKey;
        TEMPLATE_ID = templateId;
        SING_NAME = sigeName;
    }
}

4:调用方法
controller

/**
     * @param [phone]
     * @return com.example.ResultEntity
     * @description 发送短信
     * @methodName sendSMS
     * @date: 2023/1/19 14:35
     * @author ytsj
     */
    @GetMapping("/sendSMS")
    public ResultEntity sendSMS(String phone) {
        String send = msmService.send(phone);
        return  ResultEntity.success(send);
    }

service:

    /**
     * @description 发送短信
     * @methodName send
     * @param [phone]
     * @return int
     * @date: 2023/1/19 12:13
     * @author ytsj
     */
    public String send(String phone);

service实现类:

  /**
     * @param [phone]
     * @return int
     * @description 发送短信业务
     * @methodName send
     * @date: 2023/1/19 14:09
     * @author ytsj
     */
    @Override
    public String send(String phone) {
        // 生成随机数
        String code = createRandomCode();
        SmsSingleSenderResult result = null;
        try {
            // 模板需要的参数
            String[] params = {code, "5"};
            SmsSingleSender ssender = new SmsSingleSender(Integer.parseInt(MsmInfoUtils.SDK_APP_ID), MsmInfoUtils.APP_KEY);
            // 单发短信
            result = ssender.sendWithParam("86", phone, Integer.parseInt(MsmInfoUtils.TEMPLATE_ID), params, MsmInfoUtils.SING_NAME, "", "");
        } catch (JSONException e) {
            // json解析错误
            e.printStackTrace();
        } catch (IOException e) {
            // 网络IO错误
            e.printStackTrace();
        } catch (HTTPException e) {
            e.printStackTrace();
        }
        // 如果有需要这里写存入redis的逻辑就好
        if (!"OK".equals(result.errMsg)) {
            return result.errMsg;
        }
        return "OK";
    }

    /**
     * @param []
     * @return java.lang.String
     * @description 生成随机验证码
     * @methodName createRandomCode
     * @date: 2023/1/19 14:09
     * @author ytsj
     */
    public String createRandomCode() {
        String str = "4543243879806754623";
        StringBuilder st = new StringBuilder(6);
        for (int i = 0; i < 6; i++) {
            char ch = str.charAt(new Random().nextInt(str.length()));
            st.append(ch);
        }
        String randomCode = st.toString().toLowerCase();
        return randomCode;
    }

测试:
springboot项目实现腾讯云的短信验证
springboot项目实现腾讯云的短信验证