简介
短信通道是由中国移动、联通、电信等运营商直接提供的短信发送接口,实现与客户指定号码进行短信批量发送和自定义发送的目的
需要申请云梦网的测试账号 官方地址-新手指引:
[SDK接口文档:http://console.sms.monyun.cn:9963/developer_Center/index.html?htmlURL1=SDK&htmlURL2=SDKone)
依赖引入
梦网并没有提供线上的版本jar,需要下载下来引入
线上的版本有可能不是最新的,需要跟运营商获取最新版本的jar
<dependency>
<groupId>com.sms</groupId>
<artifactId>SmsSdk</artifactId>
<version>5.7</version>
</dependency>
<dependency>
<groupId>com.sms</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>com.sms</groupId>
<artifactId>gson</artifactId>
<version>2.7</version>
</dependency>
yml属性配置
#短信发送参数设定
#WBS接入版 生产账号
sms:
userid:
password:
#营销账号
shoppingUserid:
shoppingPassword:
# 运营商会给的 不同的确的通道不一样
ipAddress1: 175.25.21.202:8901
ipAddress2: 120.133.237.118:8901
#短信开关
enable: true
配置类
@Component
@ConfigurationProperties(prefix="sms")
public class SmsConfig {
/**
* 用户名
*/
public static String userid;
/**
* 账号
*/
public static String password;
/**
* 主IP地址
*/
public static String ipAddress1;
/**
* 备用IP地址
*/
public static String ipAddress2;
/**
* 失败重试次数
*/
public static int retryNum = 1;
/**
* 是否开启短信发送
*/
public static Boolean enable;
public void setUserid(String userid) {
SmsConfig.userid = userid;
}
public void setPassword(String password) {
SmsConfig.password = password;
}
public void setIpAddress1(String ipAddress1) {
SmsConfig.ipAddress1 = ipAddress1;
}
public void setIpAddress2(String ipAddress2) {
SmsConfig.ipAddress2 = ipAddress2;
}
public void setEnable(Boolean enable) {
SmsConfig.enable = enable;
}
}
工具类
@Component
public class SmsUtil {
private static final Logger log = LoggerFactory.getLogger(SmsUtil.class);
/**
* 设置全局变量
*/
static {
// 获取全局参数单例对象 启用默认值
GlobalParams globalParams = GlobalParams.getInstance();
//设置下行内容的编码类型
globalParams.setMsgMtEncode(ContentEncodeEnum.GBK);
}
/**
* @description 个性化群发
* @param message
*/
public static int mixedSend(Message message) {
//设置账号
setAccountInfo();
// 单操作 短链接
SmsSendConn smsSendConn = new SmsSendConn(false);
// 返回值
int result = -310099;
try {
// 返回的流水号
StringBuffer returnValue = new StringBuffer();
// 发送短信
result = smsSendConn.mixedSend(message, returnValue);
// result为0:成功
if (result == 0) {
log.info("个性化群发提交成功!");
}
// result为非0:失败
else {
log.info("个性化群发提交失败,错误码:{}",result);
}
} catch (Exception e) {
// 异常处理
e.printStackTrace();
}
return result;
}
/**
* 个性化群发
*
* @param mobile 手机号多个用,隔开
* @param content 短信内容
* @return int
*/
public static int mixedSend(String mobile, String content) {
Message message = buildMessage(mobile, content);
return mixedSend(message);
}
/**
* @description 相同内容群发
* @param message
* @return
*/
public static int batchSend(Message message) {
//设置账号
setAccountInfo();
// 单操作 短链接
SmsSendConn smsSendConn = new SmsSendConn(true);
// 返回值
int result = -310099;
try {
// 返回的流水号
StringBuffer returnValue = new StringBuffer();
// 发送短信
if(SmsConfig.enable){
result = smsSendConn.batchSend(message, returnValue);
}
// result为0:成功
if (result == 0) {
log.info("相同内容群发提交成功!");
System.out.println(returnValue);
}
// result为非0:失败
else {
log.info("相同内容群发提交失败,错误码:{}",result);
}
} catch (Exception e) {
// 异常处理
e.printStackTrace();
}
return result;
}
/**
* 相同内容群发
*
* @param mobile 手机号多个用,隔开
* @param content 短信内容
* @return int
*/
public static int batchSend(String mobile, String content) {
Message message = buildMessage(mobile, content);
return batchSend(message);
}
/**
* @description 单条信息的发送
* @param message
*/
public static int singleSend(Message message){
setAccountInfo();
// 单操作 短链接
SmsSendConn smsSendConn = new SmsSendConn(false);
// 返回的流水号
StringBuffer returnValue = new StringBuffer();
// 返回值
int result = -310099;
// 发送短信
if(SmsConfig.enable){
result = smsSendConn.singleSend(message, returnValue);
}
// result为0:成功
if (result == 0) {
log.info("单条发送提交成功!");
}
// result为非0:失败
else {
log.info("单条发送提交失败,错误码:{}", result);
}
return result;
}
/**
* 单条信息的发送
*
* @param mobile 手机号多个用,隔开
* @param content 短信内容
* @return int
*/
public static int singleSend(String mobile, String content) {
Message message = buildMessage(mobile, content);
return singleSend(message);
}
/**
* @description 设置用户账号信息
*/
public static void setAccountInfo() {
// 返回值
int result = -310007;
try {
// 设置用户账号信息
result = ConfigManager.setAccountInfo(SmsConfig.userid, SmsConfig.password, 1,
SmsConfig.ipAddress1, SmsConfig.ipAddress2, null, null);
// 判断返回结果,0设置成功,否则失败
if (result == 0) {
log.info("--->, 设置用户账号信息成功!");
} else {
log.info("设置用户账号信息失败,错误码:{}", result);
}
} catch (Exception e) {
// 异常处理
e.printStackTrace();
log.info("设置用户账号信息异常!" );
}
}
/**
* 构建消息体
*
* @param mobile 手机号码
* @param content 短信内容
* @return {@link Message}
*/
public static Message buildMessage(String mobile, String content) {
// 参数类
Message message = new Message();
// 设置用户账号 指定用户账号发送,需要填写用户账号,不指定用户账号发送,无需填写用户账号
message.setUserid(SmsConfig.userid);
// 设置手机号码
message.setMobile(mobile);
// 设置内容
message.setContent(content);
// 设置扩展号
message.setExno("");
// 用户自定义流水编号
message.setCustid("");
// 自定义扩展数据
message.setExdata("");
// 业务类型
message.setSvrtype("");
return message;
}