栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot整合腾讯云短信服务

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot整合腾讯云短信服务

一、如何获取免费的短信服务,搭建好腾讯云短信服务

打开 腾讯云短信服务 ,你会看到免费试用。点进去

进入短信服务的控制台

1. 创建一个签名

点击这个创建模板,或者点击左侧的 国内短信》签名管理

这里需要一个已经备案好的网站,没有备案网站的可以在腾讯云买一个,然后在腾讯云备案

 

 2. 创建模板

 点击左侧 国内短信》正文模板管理,去创建一个

 3. 点击左侧的 应用管理》应用列表,创建一个应用,如果有默认应用,使用默认应用也可以,应用中的SDK AppID和App Key都是后面需要用到的 4. 创建一个访问密匙,也是后面springboot配置中需要的

 创建一个子用户,可以给子用户选择短信的权限,你也可以不分配权限,不分配默认应该就是全部权限,当然分不分随你自己

 创建好过后获取密钥

 SpringBoot测试 1.Pom.xml 
        
        
            com.tencentcloudapi
            tencentcloud-sdk-java
            4.0.11
        
2. application.properties或者yml
# 腾讯云账户 secrtId,secretKey
tencent.sms.secretId=
tencent.sms.keysecret=
# 短信应用ID:短信SdkAppId在 【短信控制台】添加应用后生成实际的SdkAppId
tencent.sms.smsSdkAppId=
# 短信签名内容:使用UTF-8编码,必须填写已审核通过的签名,签名内容是中文,推荐转换为Unicode编码,使用工具转化https://tools.ijkxs.com/tools/unicode
tencent.sms.signName=
# 模板ID:必须是已经审核通过的模板ID
tencent.sms.templateId=

 使用yml配置,就不用转unicode了

tencent:
  sms:
     # 腾讯云账户 secrtId,secretKey
    secretId:
    keysecret:
    # 短信应用ID:短信SdkAppId在 【短信控制台】添加应用后生成实际的SdkAppId  
    smsSdkAppId:
    # 短信签名内容:
    signName:
    # 模板ID:必须是已经审核通过的模板ID
    templateId: 

3.发送验证码的工具类MsmConstantUtils.java
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.v20190711.SmsClient;
import com.tencentcloudapi.sms.v20190711.models.SendSmsRequest;
import com.tencentcloudapi.sms.v20190711.models.SendSmsResponse;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

import java.util.Random;

@Component
public class MsmConstantUtils implements InitializingBean {

    
    @Value("${tencent.sms.secretId}")
    private String secretID ;
    
    @Value("${tencent.sms.keysecret}")
    private String secretKey ;
    @Value("${tencent.sms.smsSdkAppId}")
    private String smsSdkAppID ;
    @Value("${tencent.sms.signName}")
    private String signName ;
    @Value("${tencent.sms.templateId}")
    private String templateID ;

    public static String SECRET_ID;
    public static String SECRET_KEY;
    public static String SMSSDKAPP_ID;
    public static String SIGN_NAME;
    public static String TEMPLATE_ID;


    @Override
    public void afterPropertiesSet() throws Exception {
        SECRET_ID = secretID;
        SECRET_KEY = secretKey;
        SMSSDKAPP_ID = smsSdkAppID;
        SIGN_NAME = signName;
        TEMPLATE_ID = templateID;
    }


    
    public static boolean sendPhone(String sixBitRandom, String phone) {
        //判断手机号是否为空
        if (StringUtils.isEmpty(phone)) {
            return false;
        }
        try{
            // 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKey,此处还需注意密钥对的保密
            // 密钥可前往https://console.cloud.tencent.com/cam/capi网站进行获取
            Credential cred = new Credential(MsmConstantUtils.SECRET_ID, MsmConstantUtils.SECRET_KEY);
            // 实例化一个http选项,可选的,没有特殊需求可以跳过
            HttpProfile httpProfile = new HttpProfile();
            httpProfile.setEndpoint("sms.tencentcloudapi.com");
            // 实例化一个client选项,可选的,没有特殊需求可以跳过
            ClientProfile clientProfile = new ClientProfile();
            clientProfile.setHttpProfile(httpProfile);
            // 实例化要请求产品的client对象,clientProfile是可选的  第二个参数是地域信息
            SmsClient client = new SmsClient(cred, "ap-nanjing", clientProfile);
            // 实例化一个请求对象,每个接口都会对应一个request对象
            SendSmsRequest req = new SendSmsRequest();

            //设置发送相关的参数
            String[] phoneNumberSet1 = {"86"+phone};
            req.setPhoneNumberSet(phoneNumberSet1);//发送的手机号
            //设置固定的参数
            req.setSmsSdkAppid(MsmConstantUtils.SMSSDKAPP_ID);// 短信应用ID: 短信SdkAppId在 [短信控制台] 添加应用后生成的实际SdkAppId
            req.setSign(MsmConstantUtils.SIGN_NAME);//短信签名内容: 使用 UTF-8 编码,必须填写已审核通过的签名
            req.setTemplateID(MsmConstantUtils.TEMPLATE_ID);//模板 ID: 必须填写已审核通过的模板 ID
            //发送的验证码
            String[] templateParamSet1 = {sixBitRandom};//模板的参数 第一个是验证码,第二个是过期时间
            req.setTemplateParamSet(templateParamSet1);//发送验证码

            //发送短信
            // 返回的resp是一个SendSmsResponse的实例,与请求对象对应
            SendSmsResponse resp = client.SendSms(req);
            System.out.println("resp"+resp);
            // 输出json格式的字符串回包
            System.out.println(SendSmsResponse.toJsonString(resp));
            return true;
        } catch (TencentCloudSDKException e) {
            e.printStackTrace();
            return false;
        }
    }


    
    public static String generateValidateCode(int length){
        Integer code =null;
        if(length == 4){
            code = new Random().nextInt(9999);//生成随机数,最大为9999
            if(code < 1000){
                code = code + 1000;//保证随机数为4位数字
            }
        }else if(length == 6){
            code = new Random().nextInt(999999);//生成随机数,最大为999999
            if(code < 100000){
                code = code + 100000;//保证随机数为6位数字
            }
        }else{
            throw new RuntimeException("只能生成4位或6位数字验证码");
        }
        return code.toString();
    }


}
4. 然后去编写一个controller测试一下:
import com.example.utils.MsmConstantUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class testController {

    @GetMapping("/test")
    public String test(String phone){
        MsmConstantUtils.sendPhone(MsmConstantUtils.generateValidateCode(6),phone);
        return "success";
    }

}

在浏览器请求:http://localhost:8080/test?phone=自己的手机号  就了

如果遇到问题,请参考这位大佬的博客进行解决:Springboot整合腾讯云短信服务_火星包18163112的博客-CSDN博客

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1035163.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号