Java 腾讯云短信发送

首先引用sdk:

 <!-- 腾讯短信sdk -->
        <dependency>
            <groupId>com.tencentcloudapi</groupId>
            <artifactId>tencentcloud-sdk-java</artifactId>
            <version>3.1.270</version>
        </dependency>

短信发送工具类:

@Slf4j
public class SendSmsUtil {

    public static Boolean sendSms(SendSmsRequest request) {
        Credential cred = new Credential(request.getSecretId(), request.getSecretKey());

        SmsClient client = new SmsClient(cred, request.getRegion());

        final com.tencentcloudapi.sms.v20210111.models.SendSmsRequest req = new com.tencentcloudapi.sms.v20210111.models.SendSmsRequest();
        req.setPhoneNumberSet(new String[]{"+86" + request.getPhone()});
        req.setSmsSdkAppId(request.getSmsSdkAppId());
        req.setSignName(request.getSignName());
        req.setTemplateId(request.getTemplateId());
        req.setTemplateParamSet(request.getTemplateParamSet());

        SendSmsResponse res = null;
        try {
            res = client.SendSms(req);
        } catch (TencentCloudSDKException e) {
            log.error("发送短信出错:", e);
            return Boolean.FALSE;
        }
        log.error("发送短信结果:", SendSmsResponse.toJsonString(res));

        if (Objects.nonNull(res.getSendStatusSet()) && res.getSendStatusSet().length > 0 && "Ok".equals(res.getSendStatusSet()[0].getCode())){
            return Boolean.TRUE;
        }
        return Boolean.FALSE;
    }

    /**
     * 参数对象
     */
    @Data
    public static class SendSmsRequest {
        /**
         * 电话
         */
        private String phone;

        /**
         * 短信签名内容,必须填写已审核通过的签名
         */
        private String signName;

        /**
         * 模板 ID: 必须填写已审核通过的模板 ID
         */
        private String templateId;

        /**
         * 模板参数: 模板参数的个数需要与 TemplateId 对应模板的变量个数保持一致,若无模板参数,则设置为空
         */
        private String[] templateParamSet;

        /**
         * 应用id
         */
        private String smsSdkAppId;
        /**
         * 云api密钥中的 secretId
         */
        private String secretId;

        /**
         * 云api密钥中的 secretKey
         */
        private String secretKey;

        /**
         * 云api密钥中的 region
         */
        private String region;
    }
}

Controller调用:
 

@AnonymousAccess
    @ApiOperation("获取短信验证码")
    @GetMapping(value = "/smscode/{phone}")
    public ResponseEntity<Object> getCode(@PathVariable String phone){
        // 获取随机验证码
        String code = StringUtils.getRandomCode(6);
        // 保存验证码
        Boolean result = redisUtils.set(smsIdentity+phone, code, 10, TimeUnit.MINUTES);
        //发送短信
        SendSmsUtil.SendSmsRequest request = new SendSmsUtil.SendSmsRequest();
        request.setPhone(phone);
        request.setSmsSdkAppId(redisUtils.getY(SiteConstants.SMS_SDK_APPID));
        request.setSecretId(redisUtils.getY(SiteConstants.SMS_SECRETID));
        request.setSecretKey(redisUtils.getY(SiteConstants.SMS_SECRET_KEY));
        request.setRegion(redisUtils.getY(SiteConstants.SMS_REGION));
        request.setSignName(redisUtils.getY(SiteConstants.SMS_SIGN));
        request.setTemplateId(redisUtils.getY(SiteConstants.SMS_TEMPLATEID));
        // 这个值,要看你的模板中是否预留了占位符,如果没有则不需要设置
        request.setTemplateParamSet(new String[]{code});
        result = result && SendSmsUtil.sendSms(request);
        return ResponseEntity.ok(result);
    }

验证码生成方法
 

/**
     * 获取一个随机数字码
     */
    public static String getRandomCode(int length) {
        // 定义一个包含数字 0 到 9 的字符串
        String str = "0123456789";
        if(length<4){
            length = 4;
        }
        // 创建一个空的 StringBuilder 对象,用于存储生成的随机数
        StringBuilder st = new StringBuilder(length);
        // 使用 for 循环4次
        for (int i = 0; i < length; i++) {
            // 在 str 字符串中随机选择一个字符,并添加到 stringBuilder 对象中
            char ch = str.charAt(new Random().nextInt(str.length()));
            st.append(ch);
        }
        // 将 stringBuilder 对象转化为字符串,并转化为小写字母
        String findkey = st.toString().toLowerCase();
        // 返回生成的随机数
        return findkey;
    }

腾讯云参数配置:

前端的调用:
 

<el-form-item  label="验证码" prop="validateCode">
            <el-input v-model="value.validateCode" style="width: 70%" placeholder="请输入验证码"/>
            <div class="registe-code">
              <el-button :disabled="value.phone==='' || value.phone===null || countdown > 0" @click="getCode" :loading="codeLoading">
                {{ countdown > 0 ? `${countdown}秒后重新获取` : '获取验证码' }}
              </el-button>
            </div>
            注:验证码10分钟内有效,建议您填写完其他信息后再点击获取验证码
          </el-form-item>




getCode(){
      this.codeLoading = true
      if (!isvalidPhone(this.value.phone)) {
        this.$message.error('请输入正确的11位手机号码');
        return;
      }
      getCode(this.value.phone)
      .then((response) => {
        this.codeLoading = false;
        if(response && response==true){
          this.$message.success("短信已发送,10分钟内有效");
        }else{
          this.$message.info("短信发送失败,请联系管理人员");
        }
        // 设置倒计时的秒数,这里设置为60秒
        this.countdown = 60;
        
        // 设置一个计时器来更新倒计时
        this.timer = setInterval(() => {
          if (this.countdown > 0) {
            this.countdown -= 1;
          } else {
            clearInterval(this.timer);
          }
        }, 1000);
      })
      .catch((error) => {
        this.codeLoading = false;
        this.$message.error(
          error.response ? error.response.message : error.message
        );
      });
    },

上一篇:oracle配置


下一篇:【动手做】安装Miniconda和jupyter notebook环境实现线性回归