运维开发网

java 实现发短信功能---腾讯云短信

运维开发网 https://www.qedev.com 2020-08-01 18:27 出处:网络 作者: L_Wayne
前言 如今发短信功能已经成为互联网公司的标配,本篇文章将一步步实现java发送短信

前言

如今发短信功能已经成为互联网公司的标配,本篇文章将一步步实现java发送短信

考察了许多提供短信服务的三方,几乎所有都需要企业认证才可以使用,这对于个人学习非常不方便。多方比较之后,选择了腾讯云(此处并非做广告),原因有两点:

支持微信公众号认证(门槛低)每月赠送100条免费短信(适合个人学习)(这一点请矿家子弟自行忽略)

java 实现发短信功能---腾讯云短信

开发环境

请参照: 基于SpringBoot构建分模块项目

腾讯云 ---短信

找到短信服务

java 实现发短信功能---腾讯云短信

开通之后,点击添加应用

java 实现发短信功能---腾讯云短信

设置短信签名(以公众号为例),签名类型选择公众号或小程序,其余按照要求填写即可

java 实现发短信功能---腾讯云短信

签名完成之后,创建短信模板

java 实现发短信功能---腾讯云短信

等待以上信息审核完成之后,便可以开始使用了,腾讯短信服务需要用到SDK AppID 和App Key ,在这里:

java 实现发短信功能---腾讯云短信

代码

pom.xml引入依赖

<properties>
  <java.version>1.8</java.version>
  <!-- 你的其他依赖。。。 -->
  <tencent.qcloudsms.version>1.0.6</tencent.qcloudsms.version>
</properties>

<dependencies>
  <!-- 你的其他依赖。。。 -->
  <!-- 腾讯短信 -->
  <dependency>
    <groupId>com.github.qcloudsms</groupId>
    <artifactId>qcloudsms</artifactId>
    <version>${tencent.qcloudsms.version}</version>
  </dependency>
</dependencies>

发送短信工具类

package com.wayne.common.utils;
import com.github.qcloudsms.*;
import com.github.qcloudsms.httpclient.HTTPException;
import com.wayne.common.entity.CmsMessageConfig;
import com.wayne.common.exception.CustomException;
import com.wayne.common.form.MessageForm;
import org.json.JSONException;
import java.io.IOException;
/**
 * 发送短信工具类
 * @author Wayne
 * @date 2019/6/26
 */
public class MessageUtils {
  /**
   * 按模板发送短信 支持单发和群发
   * @param isSingle 是否单发 true: 单发,false: 群发
   * @param form 需要发送的短信内容及收信人手机号
   * @param config 短信配置
   * @throws CustomException 发送失败时捕获的异常信息
   */
  public static void sendMessage(Boolean isSingle, MessageForm form, CmsMessageConfig config) throws CustomException {
    validateMessage(form, config);
    String regex = ";";
    String[] params = {form.getCaptcha()};
    String[] phoneNumbers = form.getMobiles().split(regex);
    SmsResultBase result;
    try {
      // 是否单发
      if (isSingle) {
        SmsSingleSender ssender = new SmsSingleSender(config.getAppId(), config.getAppKey());
        result = ssender.sendWithParam("86", phoneNumbers[0], config.getTemplateId(), params, config.getSmsSign(), "", "");
      } else {
        SmsMultiSender msender = new SmsMultiSender(config.getAppId(), config.getAppKey());
        result = msender.sendWithParam("86", phoneNumbers, config.getTemplateId(), params, config.getSmsSign(), "", "");
      }
      System.out.println(result);
    } catch (HTTPException e) {
      e.printStackTrace();
      throw new CustomException("HTTP响应码错误");
    } catch (JSONException e) {
      e.printStackTrace();
      throw new CustomException("json解析错误");
    } catch (IOException e) {
      e.printStackTrace();
      throw new CustomException("网络IO错误");
    }
  }
  /**
   * 校验参数
   */
  private static void validateMessage(MessageForm messageForm, CmsMessageConfig messageConfig) throws CustomException {
    ValidatorUtils.validateEntity(messageForm);
    if (null == messageConfig) {
      throw new CustomException("系统参数异常");
    }
  }
}

CmsMessageConfig配置类

 package com.wayne.common.entity;
  import lombok.Data;
  import javax.persistence.*;
  @Data
  @Table(name = "cms_message_config")
  public class CmsMessageConfig {
    /**
    * 主键
    */
    @Id
    @Column(name = "ID")
    private Integer id;
    /**
    * AppID
    */
    @Column(name = "APP_ID")
    private Integer appId;
    /**
    * AppKey
    */
    @Column(name = "APP_KEY")
    private String appKey;
    /**
    * 短信模板ID
    */
    @Column(name = "TEMPLATE_ID")
    private Integer templateId;
    /**
    * 签名内容
    */
    @Column(name = "SMS_SIGN")
    private String smsSign;
    /**
    * 是否删除,0:否,1:是
    */
    @Column(name = "IS_DELETE")
    private String isDelete;
    /**
    * 状态,0:使用,1:未使用 (同一时间应最多只有一条数据处于使用状态)
    */
    @Column(name = "IS_USE")
    private String isUse;
    /**
    * 创建者ID
    */
    @Column(name = "CREATE_ADMIN_ID")
    private Integer createAdminId;
    @Column(name = "EXTEND1")
    private String extend1;
    @Column(name = "EXTEND2")
    private String extend2;
    @Column(name = "EXTEND3")
    private String extend3;
    @Column(name = "EXTEND4")
    private String extend4;
    @Column(name = "EXTEND5")
    private String extend5;
    @Column(name = "EXTEND6")
    private String extend6;
  }

Service

@Override
  public ResponseBean sendMessage(MessageForm messageForm) {
    ValidatorUtils.validateEntity(messageForm);
    // 获取正在使用的短信配置: 此处为 从数据库中查询
    CmsMessageConfig messageConfig = getCurrUseMessageConfig();
    try {
      // 发送短信
      MessageUtils.sendMessage(Boolean.FALSE, messageForm, messageConfig);
    } catch (CustomException e) {
      e.printStackTrace();
      return ResponseBean.createInstance(Boolean.FALSE, 401, e.getMessage());
    }
    return ResponseBean.createInstance();
  }

Controller

 @PostMapping("/message/sendMessage")
  public ResponseBean sendMessage(MessageForm messageForm) {
    return messageService.sendMessage(messageForm);
  }

效果

一号短信模板

java 实现发短信功能---腾讯云短信

二号短信模板

java 实现发短信功能---腾讯云短信

设置短信配置信息

java 实现发短信功能---腾讯云短信

总结

以上所述是小编给大家介绍的java 实现发短信功能---腾讯云短信,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

0

精彩评论

暂无评论...
验证码 换一张
取 消