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

作者:L_Wayne 时间:2023-11-29 11:03:49 

前言

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

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

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

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

开发环境

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

腾讯云 ---短信

找到短信服务

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 实现发短信功能---腾讯云短信,网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

来源:https://www.cnblogs.com/L-Wirepuller/archive/2019/08/11/11337086.html

标签:腾讯云,java,发短信
0
投稿

猜你喜欢

  • springBoot service层事务控制的操作

    2022-02-01 12:39:40
  • Android用 Mob 实现发送短信验证码实例

    2021-10-17 03:53:16
  • Android使用AsyncQueryHandler实现获取手机联系人功能

    2021-07-30 20:12:00
  • SpringCloud @FeignClient参数的用法解析

    2022-11-25 06:31:37
  • 使用java反射将结果集封装成为对象和对象集合操作

    2022-03-11 18:30:26
  • Android使用animator实现fragment的3D翻转效果

    2021-10-12 06:20:42
  • Java中对话框的弹出方法

    2022-04-24 14:35:52
  • Java实现单链表反转的多种方法总结

    2023-11-11 02:28:08
  • android判断手机是否安装地图应用实现跳转到该地图应用

    2022-11-30 11:01:45
  • SprinBoot整合Quart实现定时调度的示例代码

    2021-12-07 21:30:59
  • SpringCloud远程服务调用三种方式及原理

    2023-10-16 07:21:19
  • Android采用双缓冲技术实现画板

    2022-05-28 15:55:58
  • Spring中@Scheduled和HttpClient的连环坑

    2023-10-19 23:06:00
  • C语言实现贪吃蛇游戏演示

    2023-07-03 14:16:43
  • Android手势识别功能

    2022-07-23 22:04:26
  • 详解C++ bitset用法

    2022-10-30 08:57:16
  • C#先判断是否存在再创建文件夹或文件与递归计算文件夹大小

    2023-07-29 00:04:58
  • Spring MVC中使用Controller如何进行重定向

    2022-05-12 04:09:35
  • 全局记录Feign的请求和响应日志方式

    2021-08-19 18:48:02
  • Java 改造ayui表格组件实现多重排序

    2022-05-15 07:34:15
  • asp之家 软件编程 m.aspxhome.com