首页 > 编程语言 >腾讯云短信发送【java】

腾讯云短信发送【java】

时间:2023-08-24 10:55:17浏览次数:49  
标签:短信 String java param phone 腾讯 import com

先去官网申请secretId, secretKey,然后创建对应的模板

maven引入包

<dependency>
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java</artifactId>
<!-- go to https://search.maven.org/search?q=tencentcloud-sdk-java and get the latest version. -->
<!-- 请到https://search.maven.org/search?q=tencentcloud-sdk-java查询所有版本,最新版本如下 -->
<version>3.1.836</version>
</dependency>

工具类

package com.hwd.campus.security.biz.utils;


import com.alibaba.fastjson.JSON;
import com.hwd.campus.common.common.api.ResultCode;
import com.hwd.campus.common.common.exception.BusinessException;
import com.tencentcloudapi.common.AbstractModel;
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 lombok.extern.slf4j.Slf4j;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

@Slf4j
public class SmsUtil {


    private static final String SMS_SDK_APP_ID = "";


    /**
     * 发送手机短信验证码
     * <p>
     * 您的动态验证码为:{1},此验证码{2}秒内有效,如非本人操作,请忽略本短信!
     *
     * @param phone      手机号
     * @param verifyCode 验证码
     * @param validTime  有效时间
     */
    public static void sendPhoneVerifyCodeSecond(String phone, String verifyCode, long validTime) {
        List<String> templateParamSet = new ArrayList<>();
        templateParamSet.add(verifyCode);
        templateParamSet.add(String.valueOf(validTime));
        sendMsg(smsModel(phone, "", templateParamSet));
    }

    /**
     * 短信发送提醒
     *
     * @param phone         手机号
     * @param templateParam 参数
     * @param templateId    模板Id
     * @date 2023-08-23
     * @author hhs
     */
    public static void sendSmsRemind(String phone, List<String> templateParam, String templateId) {
        sendMsg(smsModel(phone, templateId, templateParam));
    }

    /**
     * 发送手机短信验证码
     * <p>
     * <p>
     * 您的动态验证码为:{1},此验证码{2}分钟内有效,如非本人操作,请忽略本短信!
     *
     * @param phone      手机号
     * @param verifyCode 验证码
     * @param validTime  校验内容
     */
    public static void sendPhoneVerifyCodeMinute(String phone, String verifyCode, long validTime) {
        List<String> templateParamSet = new ArrayList<>();
        templateParamSet.add(verifyCode);
        templateParamSet.add(String.valueOf(validTime));
        sendMsg(smsModel(phone, "", templateParamSet));
    }


    private static SmsModel smsModel(String phone, String templateId, List<String> templateParamSet) {
        return SmsModel.builder().PhoneNumberSet(Collections.singletonList("+86" + phone))
                .TemplateID(templateId).Sign("标头").TemplateParamSet(templateParamSet)
                .SmsSdkAppid(SMS_SDK_APP_ID).build();
    }


    /**
     * 发送短信
     *
     * @param model 模型
     */
    private static void sendMsg(SmsModel model) {
        try {
            log.info("发送短信:" + model);
            Credential cred = new Credential("secretId", "secretKey");
            HttpProfile httpProfile = new HttpProfile();
            httpProfile.setEndpoint("sms.tencentcloudapi.com");
            ClientProfile clientProfile = new ClientProfile();
            clientProfile.setHttpProfile(httpProfile);
            SmsClient client = new SmsClient(cred, "", clientProfile);
            //转换为String
            String params = JSON.toJSONString(model);
            SendSmsRequest req = AbstractModel.fromJsonString(params, SendSmsRequest.class);
            SendSmsResponse resp = client.SendSms(req);
            log.info("短信发送成功:" + AbstractModel.toJsonString(resp));
        } catch (TencentCloudSDKException e) {
            log.error("=========短信发送失败========" + e.getMessage());
            throw new BusinessException(ResultCode.OPERATION_FAILURE, "=========短信发送失败========" + e.getMessage());
        }
    }


    public static void main(String[] args) {
        //13512765559
        sendPhoneVerifyCodeSecond("phone", "验证码", 1);
    }
}

实体参数

package com.hwd.campus.security.biz.utils;

import com.alibaba.fastjson.annotation.JSONField;
import lombok.Builder;
import lombok.Data;

import java.util.List;

@Builder
@Data
public class SmsModel {

    /**
     * 模板 ID,必须填写已审核通过的模板 ID。
     * 模板ID可登录 [短信控制台](<a href="https://console.cloud.tencent.com/smsv2">...</a>) 查看,若向境外手机号发送短信,仅支持使用国际/港澳台短信模板。
     */
    @JSONField(name = "TemplateID")
    private String TemplateID;
    /**
     * 短信签名内容,使用 UTF-8 编码,必须填写已审核通过的签名,
     * 签名信息可登录 [短信控制台](<a href="https://console.cloud.tencent.com/smsv2">...</a>) 查看。注:国内短信为必填参数。
     */
    @JSONField(name = "Sign")
    private String Sign;
    /**
     * 短信SdkAppid在 [短信控制台](<a href="https://console.cloud.tencent.com/smsv2">...</a>) 添加应用后生成的实际SdkAppid,示例如1400006666。
     */
    @JSONField(name = "SmsSdkAppid")
    private String SmsSdkAppid;
    /**
     * 下发手机号码,采用 e.164 标准,格式为+[国家或地区码][手机号],单次请求最多支持200个手机号且要求全为境内手机号或全为境外手机号。
     * 例如:+8613711112222, 其中前面有一个+号 ,86为国家码,13711112222为手机号。
     */
    @JSONField(name = "PhoneNumberSet")
    private List<String> PhoneNumberSet;
    /**
     * 模板参数,若无模板参数,则设置为空。
     */
    @JSONField(name = "TemplateParamSet")
    private List<String> TemplateParamSet;
}

标签:短信,String,java,param,phone,腾讯,import,com
From: https://www.cnblogs.com/hhs-5120/p/17653623.html

相关文章

  • java实现大文件上传解决方案
    ​ 我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用。首先我们需要了解的是上传文件三要素:1.表单提交方式:post(get方式提交有大小限制,post没有)2.表单的enctype属性:必须设置为multipart/form-data.3.表单必须......
  • 20230710 java.lang.SuppressWarnings
    介绍java.lang.SuppressWarnings声明@Target({TYPE,FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE,MODULE})@Retention(RetentionPolicy.SOURCE)public@interfaceSuppressWarnings阻止某个给定类型的警告信息value的常见值all:忽略所有类型的警告。u......
  • 20230711 java.security.MessageDigest
    介绍java.security.MessageDigestpublicabstractclassMessageDigestextendsMessageDigestSpiAPIstaticgetInstanceMessageDigestgetInstance(Stringalgorithm)throwsNoSuchAlgorithmExceptionMessageDigestgetInstance(Stringalgorithm,Stringprovider)......
  • 20230823 java.io.FileWriter
    介绍java.io.FileWriterpublicclassFileWriterextendsOutputStreamWriter用于写出文件字符流可以指定编码API构造器FileWriter(StringfileName)throwsIOExceptionFileWriter(StringfileName,booleanappend)throwsIOExceptionFileWriter(Filefile)thro......
  • 20230823 java.io.FileReader
    介绍java.io.FileReaderpublicclassFileReaderextendsInputStreamReader用于读入文件字符流可以指定编码API构造器FileReader(StringfileName)throwsFileNotFoundExceptionFileReader(Filefile)throwsFileNotFoundExceptionFileReader(FileDescriptorfd)......
  • 20230629 javax.sql.DataSource
    介绍javax.sql.DataSourcepublicinterfaceDataSourceextendsCommonDataSource,WrapperAPIpublicgetConnectionConnectionsetLogWriter,getLogWritersetLoginTimeout,getLoginTimeoutcreateConnectionBuilder继承javax.sql.CommonDataSourcecre......
  • 20230629 javax.sql.rowset.CachedRowSet
    介绍javax.sql.rowset.CachedRowSetpublicinterfaceCachedRowSetextendsRowSet,JoinableAPIpublicpopulate将指定的结果集中的数据填充到被缓存的行集中execute通过执行使用setCommand方法设置的语句集来填充行集setTableName,getTableName数据库......
  • 20230629 javax.sql.RowSet
    介绍javax.sql.RowSetpublicinterfaceRowSetextendsResultSet行集和ResultSet不同,不需要始终保持与数据库的连接CachedRowSet允许在断开连接的状态下执行相关操作WebRowSet对象代表了一个被缓存的行集,该行集可以保存为XML文件。该文件可以移动到Web应用的其他......
  • JavaScript基础语法
    1.与HTML的区别HTML:标记语言JavaScript:编程语言(脚本)2.JavaScript代码的书写位置行内式JS代码<ahref="javascript:alert('我是行内js');">点击一下试试</a>......
  • java stream常用方法
    1、筛选数据单条Studentstudent=students.stream().filter(o->o.getStuNo.equals(1001)).findAny().orElse(null);.orElse(null) 表示如果没有符合条件的学生则返回null多条List<Integer>stuNoList=students.stream().map(Student::getStuNo).collect(Collectors.to......