Flask接口签名sign原理与实例代码浅析
607
2022-12-31
java 实现发短信功能
前言
如今发短信功能已经成为互联网公司的标配,本篇文章将一步步实现java发送短信
考察了许多提供短信服务的三方,几乎所有都需要企业认证才可以使用,这对于个人学习非常不方便。多方比较之后,选择了腾讯云(此处并非做广告),原因有两点:
开发环境
请参照: 基于SpringBoot构建分模块项目
腾讯云 ---短信
找到短信服务
开通之后,点击添加应用
签名完成之后,创建短信模板
等待以上信息审核完成之后,便可以开始使用了,腾讯短信服务需要用到SDK AppID 和App Key ,在这里:
代码
pom.xml引入依赖
发送短信工具类
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~