java 实现发短信功能

网友投稿 607 2022-12-31


java 实现发短信功能

前言

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

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

开发环境

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

腾讯云 ---短信

找到短信服务

开通之后,点击添加应用

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

等待以上信息审核完成之后,便可以开始使用了,腾讯短信服务需要用到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")

pmVcsNqfrivate 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);

}

效果

二号短信模板

设置短信配置信息

总结


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:图书管理剔旧系统接口设计(图书管理剔旧系统接口设计方案)
下一篇:浏览器接口测试工具(接口测试的工具)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~