@TOC
簡(jiǎn)介
短信通道是由中國移動(dòng)哟沫、聯(lián)通崭放、電信等運(yùn)營(yíng)商直接提供的短信發(fā)送接口雅潭,實(shí)現(xiàn)與客戶指定號(hào)碼進(jìn)行短信批量發(fā)送和自定義發(fā)送的目的
需要申請(qǐng)?jiān)茐?mèng)網(wǎng)的測(cè)試賬號(hào) 官方地址-新手指引:
[SDK接口文檔:http://console.sms.monyun.cn:9963/developer_Center/index.html?htmlURL1=SDK&htmlURL2=SDKone)
依賴引入
夢(mèng)網(wǎng)并沒有提供線上的版本jar,需要下載下來引入
線上的版本有可能不是最新的李剖,需要跟運(yùn)營(yíng)商獲取最新版本的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屬性配置
#短信發(fā)送參數(shù)設(shè)定
#WBS接入版 生產(chǎn)賬號(hào)
sms:
userid:
password:
#營(yíng)銷賬號(hào)
shoppingUserid:
shoppingPassword:
# 運(yùn)營(yíng)商會(huì)給的 不同的確的通道不一樣
ipAddress1: 175.25.21.202:8901
ipAddress2: 120.133.237.118:8901
#短信開關(guān)
enable: true
配置類
@Component
@ConfigurationProperties(prefix="sms")
public class SmsConfig {
/**
* 用戶名
*/
public static String userid;
/**
* 賬號(hào)
*/
public static String password;
/**
* 主IP地址
*/
public static String ipAddress1;
/**
* 備用IP地址
*/
public static String ipAddress2;
/**
* 失敗重試次數(shù)
*/
public static int retryNum = 1;
/**
* 是否開啟短信發(fā)送
*/
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);
/**
* 設(shè)置全局變量
*/
static {
// 獲取全局參數(shù)單例對(duì)象 啟用默認(rèn)值
GlobalParams globalParams = GlobalParams.getInstance();
//設(shè)置下行內(nèi)容的編碼類型
globalParams.setMsgMtEncode(ContentEncodeEnum.GBK);
}
/**
* @description 個(gè)性化群發(fā)
* @param message
*/
public static int mixedSend(Message message) {
//設(shè)置賬號(hào)
setAccountInfo();
// 單操作 短鏈接
SmsSendConn smsSendConn = new SmsSendConn(false);
// 返回值
int result = -310099;
try {
// 返回的流水號(hào)
StringBuffer returnValue = new StringBuffer();
// 發(fā)送短信
result = smsSendConn.mixedSend(message, returnValue);
// result為0:成功
if (result == 0) {
log.info("個(gè)性化群發(fā)提交成功!");
}
// result為非0:失敗
else {
log.info("個(gè)性化群發(fā)提交失敗,錯(cuò)誤碼:{}",result);
}
} catch (Exception e) {
// 異常處理
e.printStackTrace();
}
return result;
}
/**
* 個(gè)性化群發(fā)
*
* @param mobile 手機(jī)號(hào)多個(gè)用,隔開
* @param content 短信內(nèi)容
* @return int
*/
public static int mixedSend(String mobile, String content) {
Message message = buildMessage(mobile, content);
return mixedSend(message);
}
/**
* @description 相同內(nèi)容群發(fā)
* @param message
* @return
*/
public static int batchSend(Message message) {
//設(shè)置賬號(hào)
setAccountInfo();
// 單操作 短鏈接
SmsSendConn smsSendConn = new SmsSendConn(true);
// 返回值
int result = -310099;
try {
// 返回的流水號(hào)
StringBuffer returnValue = new StringBuffer();
// 發(fā)送短信
if(SmsConfig.enable){
result = smsSendConn.batchSend(message, returnValue);
}
// result為0:成功
if (result == 0) {
log.info("相同內(nèi)容群發(fā)提交成功囤耳!");
System.out.println(returnValue);
}
// result為非0:失敗
else {
log.info("相同內(nèi)容群發(fā)提交失敗,錯(cuò)誤碼:{}",result);
}
} catch (Exception e) {
// 異常處理
e.printStackTrace();
}
return result;
}
/**
* 相同內(nèi)容群發(fā)
*
* @param mobile 手機(jī)號(hào)多個(gè)用,隔開
* @param content 短信內(nèi)容
* @return int
*/
public static int batchSend(String mobile, String content) {
Message message = buildMessage(mobile, content);
return batchSend(message);
}
/**
* @description 單條信息的發(fā)送
* @param message
*/
public static int singleSend(Message message){
setAccountInfo();
// 單操作 短鏈接
SmsSendConn smsSendConn = new SmsSendConn(false);
// 返回的流水號(hào)
StringBuffer returnValue = new StringBuffer();
// 返回值
int result = -310099;
// 發(fā)送短信
if(SmsConfig.enable){
result = smsSendConn.singleSend(message, returnValue);
}
// result為0:成功
if (result == 0) {
log.info("單條發(fā)送提交成功篙顺!");
}
// result為非0:失敗
else {
log.info("單條發(fā)送提交失敗,錯(cuò)誤碼:{}", result);
}
return result;
}
/**
* 單條信息的發(fā)送
*
* @param mobile 手機(jī)號(hào)多個(gè)用,隔開
* @param content 短信內(nèi)容
* @return int
*/
public static int singleSend(String mobile, String content) {
Message message = buildMessage(mobile, content);
return singleSend(message);
}
/**
* @description 設(shè)置用戶賬號(hào)信息
*/
public static void setAccountInfo() {
// 返回值
int result = -310007;
try {
// 設(shè)置用戶賬號(hào)信息
result = ConfigManager.setAccountInfo(SmsConfig.userid, SmsConfig.password, 1,
SmsConfig.ipAddress1, SmsConfig.ipAddress2, null, null);
// 判斷返回結(jié)果,0設(shè)置成功充择,否則失敗
if (result == 0) {
log.info("--->, 設(shè)置用戶賬號(hào)信息成功德玫!");
} else {
log.info("設(shè)置用戶賬號(hào)信息失敗,錯(cuò)誤碼:{}", result);
}
} catch (Exception e) {
// 異常處理
e.printStackTrace();
log.info("設(shè)置用戶賬號(hào)信息異常椎麦!" );
}
}
/**
* 構(gòu)建消息體
*
* @param mobile 手機(jī)號(hào)碼
* @param content 短信內(nèi)容
* @return {@link Message}
*/
public static Message buildMessage(String mobile, String content) {
// 參數(shù)類
Message message = new Message();
// 設(shè)置用戶賬號(hào) 指定用戶賬號(hào)發(fā)送宰僧,需要填寫用戶賬號(hào),不指定用戶賬號(hào)發(fā)送观挎,無需填寫用戶賬號(hào)
message.setUserid(SmsConfig.userid);
// 設(shè)置手機(jī)號(hào)碼
message.setMobile(mobile);
// 設(shè)置內(nèi)容
message.setContent(content);
// 設(shè)置擴(kuò)展號(hào)
message.setExno("");
// 用戶自定義流水編號(hào)
message.setCustid("");
// 自定義擴(kuò)展數(shù)據(jù)
message.setExdata("");
// 業(yè)務(wù)類型
message.setSvrtype("");
return message;
}