快速集成腾讯云短信实现短信发送(Spring Boot)

前言

在这里插入图片描述

腾讯云活动白嫖

1、地址

地址:https://cloud.tencent.com/act/free?from=14600
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

在这里插入图片描述

2.创建签名(根据实际情况选择)

我的是网站
在这里插入图片描述
在这里插入图片描述

3.创建模板

在这里插入图片描述
选择模板内容:
在这里插入图片描述

在这里插入图片描述

选完后等待审核!!如果没问题,回是这样的!

审核完成

在这里插入图片描述
在这里插入图片描述
系统会在应用列表自动创建 SDK ID
在这里插入图片描述

测试

创建群发
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

二、SpringBoot集成

集成前准备

  • 刚刚创建的模板id:
    在这里插入图片描述
  • 应用列表的SDK ID:

在这里插入图片描述

  • 账号密钥 Secretid、SecretKey

地址:https://console.cloud.tencent.com/cam/capi在这里插入图片描述

依赖

        <dependency>
            <groupId>com.tencentcloudapi</groupId>
            <artifactId>tencentcloud-sdk-java</artifactId>
            <version>4.0.11</version>
        </dependency>

application.yml

lanys:
  txunyun:
    #腾讯云API密钥管理 id
    secret_id: AKIDPcZFemeFZcPwCBtL*********WkhNmu
    #腾讯云API密钥管理 key
    secret_key: sTnqd8MJ8gx***********lMfhOo
    #短信应用SDK AppID
    app_id: 140*******6448
    #短信模板ID,需要在短信应用中申请
    template_id: 1102*****969
    #签名,使用是签名内容,而不是签名ID
    sms_sign: 知识记忆

TenxunyunSmsConfig

/**
 * @author lanys
 * @Description: 腾讯云短信配置
 * @date 2/9/2021 上午10:20
 */
@Configuration
public class TenxunyunSmsConfig {

    @Value("${lanys.txunyun.secret_id}")
    private String secretId;

    @Value("${lanys.txunyun.secret_key}")
    private String secretKey;

    private String endpoint = "sms.tencentcloudapi.com";

    @Bean
    public SmsClient smsClient() {
        /* 必要步骤:
         * 实例化一个认证对象,入参需要传入腾讯云账户密钥对 secretId 和 secretKey
         * 本示例采用从环境变量读取的方式,需要预先在环境变量中设置这两个值
         * 您也可以直接在代码中写入密钥对,但需谨防泄露,不要将代码复制、上传或者分享给他人
         * CAM 密钥查询:https://console.cloud.tencent.com/cam/capi
         */
        Credential credential = new Credential(secretId, secretKey);
        // 实例化一个 http 选项,可选,无特殊需求时可以跳过
        HttpProfile httpProfile = new HttpProfile();
        //SDK 默认使用 POST 方法。
        httpProfile.setReqMethod("POST");
        //SDK 有默认的超时时间,非必要请不要进行调整
        httpProfile.setConnTimeout(60);
        //SDK 会自动指定的域名
        httpProfile.setEndpoint(endpoint);
        //实例化一个客户端配置对象,可以指定超时时间等配置
        ClientProfile clientProfile = new ClientProfile();
        clientProfile.setSignMethod("HmacSHA256");
        clientProfile.setHttpProfile(httpProfile);
        //实例化 SMS 的 client 对象
        return new SmsClient(credential, "ap-guangzhou", clientProfile);
    }

}

ISmsService

/**
 * @author lanys
 * @Description:
 * @date 1/9/2021 上午11:48
 */

public interface ISmsService {

    /**
     * 发送手机验短信证码
     *
     * @param phone 电话号码
     * @return 返回数据
     */
    String sendLoginSms(String phone);

    /**
     * 验证验证码
     *
     * @param code 验证码
     * @param phone 手机号
     * @return  Boolean
     */
    Boolean validationCode(String phone,String code);
}

SmsServiceImpl

/**
 * @author lanys
 * @Description:
 * @date 1/9/2021 上午11:49
 */
@Service
@Slf4j
public class SmsServiceImpl implements ISmsService {


    @Autowired
    private SmsClient smsClient;

    @Value("${lanys.txunyun.app_id}")
    private String appId;

    @Value("${lanys.txunyun.template_id}")
    private String templateId;

    @Value("${lanys.txunyun.sms_sign}")
    private String smsSign;

    /**
     * 短信验证码长度
     */
    private final Integer LENGTH = 6;

    /**
     * redis 缓存
     */
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    /**
     * 发送手机验短信证码
     *
     * @param phone 电话号码
     * @return 返回数据
     */
    @Override
    public String sendLoginSms(String phone) {
        String[] phoneNumbers = {"+86" + phone};
        //生成随机验证码
        final String code = generateCode();
        //加入数组
        String[] templateParams = {code};
        //实例请求
        SendSmsRequest sendSmsRequest = new SendSmsRequest();
        //设置[短信控制台] 添加应用后生成的实际 SDKAppID
        sendSmsRequest.setSmsSdkAppid(appId);
        //短信签名内容
        sendSmsRequest.setSign(smsSign);
        //模板 ID
        sendSmsRequest.setTemplateID(templateId);
        //电话
        sendSmsRequest.setPhoneNumberSet(phoneNumbers);
        //验证码
        sendSmsRequest.setTemplateParamSet(templateParams);
        try {
            //发送
            final SendSmsResponse sendSmsResponse = smsClient.SendSms(sendSmsRequest);
            log.info("短信发送成功:{}",sendSmsResponse.toString());
            //加入缓存
            redisTemplate.opsForValue().set(phone,code,1, TimeUnit.MINUTES);
            return "ok";
        } catch (TencentCloudSDKException e) {
            log.error("发送失败,或者剩余短信数量不足",e);
        }
        return "发送失败,或者剩余短信数量不足";
    }

    /**
     * 验证验证码
     *
     * @param code 验证码
     * @param phone 手机号
     * @return Boolean
     */
    @Override
    public Boolean validationCode(String phone,String code) {
        final String data = (String) redisTemplate.opsForValue().get(phone);
        if (code.equals(data)){
            return true;
        }
        return false;
    }

    /**
     * 生成随机的验证码
     *
     * @return
     */
    public String generateCode() {
        return RandomStringUtils.randomNumeric(LENGTH);
    }
}

controller

    @ApiOperation(value = "发送短信和验证")
    @ResponseBody
    @GetMapping("/send")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "phone", value = "手机号", required = true, example = "18376662071", paramType = "query", dataTypeClass = Integer.class),
            @ApiImplicitParam(name = "code",value = "验证码验证",required = false,example = "1234",paramType = "query")
    })
    public Result sendLoginSms(@NotEmpty(message = "非法的手机号") @Pattern(regexp = "^1[0-9]{10}$", message = "非法的手机号") String phone,String code) throws IOException {
        if (StringUtils.isNotBlank(code)){
            if (smsService.validationCode(phone,code)){
                return Result.success("验证码正确");
            }
            return Result.success("验证码错误");
        }
        String result = smsService.sendLoginSms(phone);
        return Result.success(result);
    }

测试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

年轻人,什么都想去尝试,加油。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值