1、移动发送短信。项目用的是maven构建的springboot项目。
package controller;
import com.huawei.insa2.comm.cmpp30.message.CMPP30SubmitMessage;
import com.huawei.insa2.comm.cmpp30.message.CMPP30SubmitRepMessage;
import com.huawei.insa2.util.Args;
import com.huawei.insa2.util.Cfg;
import com.huawei.smproxy.SMProxy30;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.io.IOException;
/**
* 移动发送短信
*
* @author sunhl
* @date 2020/1/8 14:36
*/
@Component
@Slf4j
public class NewCmppService {
private final String path = System.getProperty("user.dir") + "/conf/cmpp.xml";
private SMProxy30 smProxy;
public NewCmppService() {
log.info("配置文件路径:{}", path);
try {
Args conf = new Cfg(path).getArgs("ismg");
smProxy = new SMProxy30(conf);
log.info("初始化成功");
} catch (IOException e) {
log.info("初始化失败:{}", e.getMessage());
}
}
public boolean sendV3(String[] phoneNum, String msg) throws IOException {
byte[] msg_Content = msg.getBytes("GB2312");
CMPP30SubmitMessage submitMsg = new CMPP30SubmitMessage(
0x01,//@pk_Total 相同msg_Id消息总条数,短短信这里是1
0x01,//@pk_Number 相同msg_Id的消息序号
0x01,//@registered_Delivery 是否要求返回状态报告
0x01,//@msg_Level 信息级别
"DFXK",// @service_Id 业务类型 用户自定义 用来分类查询
0x00,//@fee_UserType 0对目的终端计费;1对源终端计费;2对SP计费;
"13766669999",//@fee_Terminal_Id 被计费用户的号码 update
0x00, //fee_Terminal_Type add
0x00,//@tp_Pid GSM协议类型 一般文本的时候设0,铃声图片设1
0x00,//@tp_Udhi GSM协议类型 0不包含头部信息 1包含头部信息
0x00,//@msg_Fmt 消息格式 15 ,中文 要用8
"220378",//@msg_Src 消息内容来源 6位的企业代码,这里需修改
"01",// @fee_Type 资费类别 一般为02:按条计信息费
"0",//@fee_Code 资费代码(以分为单位)
null,//@valid_Time 存活有效期
null,//@at_Time 定时发送时间
"1064891111",//@src_Terminal_Id 移动所提供的服务代码 此处需修改 1064891111
phoneNum,//@dest_Terminal_Id 接收业务的MSISDN号码,就是接收短信的手机号,String数组
0x00, //dest_Terminal_Type 接收号码类型 add
msg_Content,//@msg_Content 消息内容 byte[],发送的消息内容,需要转化为byte[]
"" //预留
);
log.info("参数拼接成功了");
CMPP30SubmitRepMessage sub = (CMPP30SubmitRepMessage) smProxy.send(submitMsg);//这里的smProxy就是第2点中用单例创建的smProxy对象
log.info("正在发送。。");
if (sub.getResult() == 0) {
//发送成功
log.info("发送成功!");
}else {
log.info("发送失败!");
return false;
}
return true;
}
}
目录格式
cmpp.xml
<config>
<!--与InfoX建立连接所需参数-->
<ismg>
<!-- InfoX主机地址,与移动签合同时移动所提供的地址 需修改-->
<host>www.baidu.com</host>
<!-- InfoX主机端口号 cmpp2.0默认为7890,cmpp3.0为7891-->
<port>10086</port>
<!--(登录帐号SP…ID)与移动签合同时所提供的企业代码 6位 需修改-->
<source-addr>10086</source-addr>
<!--登录密码 默认为空 如有需修改-->
<shared-secret>10086</shared-secret>
<!-- 心跳信息发送间隔时间(单位:秒) -->
<heartbeat-interval>10</heartbeat-interval>
<!-- 连接中断时重连间隔时间(单位:秒)-->
<reconnect-interval>10</reconnect-interval>
<!-- 需要重连时,连续发出心跳而没有接收到响应的个数(单位:个)-->
<heartbeat-noresponseout>5</heartbeat-noresponseout>
<!-- 操作超时时间(单位:秒) -->
<transaction-timeout>10</transaction-timeout>
<!--双方协商的版本号(大于0,小于256)-->
<version>1</version>
<!--是否属于调试状态,true表示属于调试状态,所有的消息被打印输出到屏幕,false表示不属于调试状态,所有的消息不被输出-->
<debug>true</debug>
</ismg>
</config>
InputStream in = PropertiesUtil.class.getClassLoader().getResourceAsStream("cmpp.xml");//读取xml部分
使用上面获取地址时,在部署到正式环境上,会导致初始化不过。暂时使用代码中获取路径方式。稍后再改