热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

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

如今发短信功能已经成为互联网公司的标配,接下来通过本文给大家介绍java实现发短信功能---腾讯云短信,需要的朋友可以参考下

前言

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

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

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

开发环境

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

腾讯云 ---短信

找到短信服务

开通之后,点击添加应用

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

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

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

代码

pom.xml引入依赖


 1.8
 
 1.0.6



 
 
 
 com.github.qcloudsms
 qcloudsms
 ${tencent.qcloudsms.version}
 

发送短信工具类

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 实现发短信功能---腾讯云短信,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!


推荐阅读
  • 微信小程序中实现位置获取的全面指南
    本文详细介绍了如何在微信小程序中实现地理位置的获取,包括通过微信官方API和腾讯地图API两种方式。文中不仅涵盖了必要的准备工作,如申请开发者密钥、下载并配置SDK等,还提供了处理用户授权及位置信息获取的具体代码示例。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • Android LED 数字字体的应用与实现
    本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 本文详细介绍了 Java 中 org.apache.xmlbeans.SchemaType 类的 getBaseEnumType() 方法,提供了多个代码示例,并解释了其在不同场景下的使用方法。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 本文探讨了在通过 API 端点调用时,使用猫鼬(Mongoose)的 findOne 方法总是返回 null 的问题,并提供了详细的解决方案和建议。 ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
  • 微信小程序:授权登录与手机号绑定
    本文详细介绍了微信小程序中用户授权登录及绑定手机号的流程,结合官方指引和实际开发经验,提供了一套完整的实现方案,帮助开发者更好地理解和应用。 ... [详细]
  • 使用JS、HTML5和C3创建自定义弹出窗口
    本文介绍如何结合JavaScript、HTML5和C3.js来实现一个功能丰富的自定义弹出窗口。通过具体的代码示例,详细讲解了实现过程中的关键步骤和技术要点。 ... [详细]
  • 程序员如何优雅应对35岁职业转型?这里有深度解析
    本文探讨了程序员在职业生涯中如何通过不断学习和技能提升,优雅地应对35岁左右的职业转型挑战。我们将深入分析当前热门技术趋势,并提供实用的学习路径。 ... [详细]
  • 本文档汇总了Python编程的基础与高级面试题目,涵盖语言特性、数据结构、算法以及Web开发等多个方面,旨在帮助开发者全面掌握Python核心知识。 ... [详细]
  • 本文探讨了在C语言编程中,如何有效避免多文件项目中的重定义问题,通过合理使用预处理器指令和extern关键字,确保代码的健壮性和可维护性。 ... [详细]
  • 区块链的兴起:恰逢其时,犹如1996年的互联网
    本文探讨了区块链技术的发展阶段,将其与1996年互联网的兴起进行对比,分析了当前区块链技术的现状及其未来潜力。 ... [详细]
author-avatar
zwjy2018
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有