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

 更新时间:2019年08月12日 10:03:38   转载 作者:L_Wayne  
如今发短信功能已经成为互联网公司的标配,接下来通过本文给大家介绍java 实现发短信功能---腾讯云短信 ,需要的朋友可以参考下

前言

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

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

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

开发环境

请参照: Spring Boot实现模块化的几种方法

腾讯云 ---短信

找到短信服务

开通之后,点击添加应用

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

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

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

代码

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高级特性之反射机制,结合实例形式详细分析了Java反射机制原理、功能、使用方法及相关操作注意事项,需要的朋友可以参考下
    2018-08-08
  • Java 中引入内部类的意义?

    Java 中引入内部类的意义?

    这篇文章主要介绍了Java 中引入内部类的意义?文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,,需要的朋友可以参考下
    2019-06-06
  • Java多线程Callable接口实现代码示例

    Java多线程Callable接口实现代码示例

    相信大家对Java编程中如何创建线程已经不陌生了,这篇文章就向朋友们介绍实现callable接口,具体实例详见正文。
    2017-10-10
  • MyBatis框架迭代器模式实现原理解析

    MyBatis框架迭代器模式实现原理解析

    这篇文章主要介绍了MyBatis框架迭代器模式实现原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Spring Batch批处理框架使用解析

    Spring Batch批处理框架使用解析

    这篇文章主要介绍了Spring Batch批处理框架使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Java Scaner类详解_动力节点Java学院整理

    Java Scaner类详解_动力节点Java学院整理

    Java.util.Scanner是Java5.0的新特征,主要功能是简化文本扫描。下面通过本文给大家分享java scaner类相关知识,需要的朋友下吧
    2017-04-04
  • Spring mvc拦截器实现原理解析

    Spring mvc拦截器实现原理解析

    这篇文章主要介绍了Spring mvc拦截器实现原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • mybatis插入与批量插入返回ID的原理详解

    mybatis插入与批量插入返回ID的原理详解

    这篇文章主要给大家介绍了关于mybatis插入与批量插入返回ID的原理的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用mybatis具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • java 字符串的拼接的实现实例

    java 字符串的拼接的实现实例

    这篇文章主要介绍了java 字符串的拼接的实现实例的相关资料,希望通过本文大家能掌握字符拼接的实现,需要的朋友可以参考下
    2017-09-09
  • Java 多线程学习详细总结

    Java 多线程学习详细总结

    本文主要介绍 Java 多线程的知识资料,这里整理了详细的多线程内容,及简单实现代码,有需要的朋友可以参考下
    2016-09-09

最新评论