配置文件:
10
10
5
10
1
true
java代码:
Args args1 = new Cfg(“classpath:cmpp.xml”).getArgs(“ismg”);
args1.set(“source-addr”,simSupplier.getSmsAccount());
args1.set(“shared-secret”,simSupplier.getSmsPwd());
SMProxy30 smProxy = new SMProxy30(args1){
@Override
public CMPPMessage onDeliver(CMPP30DeliverMessage msg) {
//复写方法 主要是用来做接收短信
int commandId = msg.getCommandId();
if (commandId==5){
String intoNo=msg.getSrcterminalId();
String content="";
if (msg.getRegisteredDeliver() == 0) {
try {
if (msg.getMsgFmt() == 8) {
LOGGER.info(String.valueOf(String.valueOf((new StringBuffer("接收消息: 主叫号码=")).append(msg.getSrcterminalId()).append(";内容=").append(new String(msg.getMsgContent(), "UTF-16BE")))));
content=new String(msg.getMsgContent(), "UTF-16BE");
} else {
LOGGER.info(String.valueOf(String.valueOf((new StringBuffer("接收消息: 主叫号码=")).append(msg.getSrcterminalId()).append(";内容=").append(new String(msg.getMsgContent())).append(";destterm=").append(new String(msg.getDestnationId())).append(";serviceid=").append(new String(msg.getServiceId())).append(";tppid=").append(msg.getTpPid()).append(";tpudhi=").append(msg.getTpUdhi()).append(";msgfmt").append(msg.getMsgFmt()).append(";srctermid=").append(new String(msg.getSrcterminalId())).append(";deliver=").append(msg.getRegisteredDeliver()).append(";msgcontent=").append(new String(msg.getMsgContent())).append(";LinkID=").append(new String(msg.getLinkID())))));
content=new String(msg.getMsgContent());
}
TradeSmsMsg smsMsg = new TradeSmsMsg();
smsMsg.setId(IdCreateUtil.getId());
smsMsg.setSendIntoNo(intoNo);
smsMsg.setSendState(2);
smsMsg.setMsg(content);
smsMsg.setCreateTime(new Date());
smsMsg.setReceiveIntoNo(intoNo);
smsMsg.setRemark("接收成功");
//插入记录
smsMsgMapper.insertSelective(smsMsg);
} catch (Exception var4) {
var4.printStackTrace();
}
} else {
// LOGGER.info(String.valueOf(String.valueOf((new StringBuffer("收到状态报告消息: stat=")).append(new String(msg.getStat())).append("dest_termID=").append(new String(msg.getDestTerminalId())).append(";destterm=").append(new String(msg.getDestnationId())).append(";serviceid=").append(new String(msg.getServiceId())).append(";tppid=").append(msg.getTpPid()).append(";tpudhi=").append(msg.getTpUdhi()).append(";msgfmt").append(msg.getMsgFmt()).append(";srctermid=").append(new String(msg.getSrcterminalId())).append(";deliver=").append(msg.getRegisteredDeliver()).append(";LinkID=").append(new String(msg.getLinkID())))));
}
}
LOGGER.info("接收到网关消息:{}",new String(msg.getMsgContent()));
return super.onDeliver(msg);
}
};
//此处为发送短信
String[] dest_Terminal_Id ={innoNo};
byte[] msg_Content = dto.getMsg().getBytes("gb2312");
CMPP30SubmitMessage submitMsg = new CMPP30SubmitMessage(
0x01,//@pk_Total 相同msg_Id消息总条数,短短信这里是1
0x01,//@pk_Number 相同msg_Id的消息序号
0x01,//@registered_Delivery 是否要求返回状态报告
0x01,//@msg_Level 信息级别
simSupplier.getSmsServiceId(),// @service_Id 业务类型 用户自定义 用来分类查询
0x00,//@fee_UserType 0对目的终端计费;1对源终端计费;2对SP计费;
innoNo,//@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
simSupplier.getSmsMsgSrc(),//@msg_Src 消息内容来源 6位的企业代码,这里需修改
"01",// @fee_Type 资费类别 一般为02:按条计信息费
"0",//@fee_Code 资费代码(以分为单位)
null,//@valid_Time 存活有效期
null,//@at_Time 定时发送时间
simSupplier.getSmsSrcTerminalId(),//@src_Terminal_Id 移动所提供的服务代码 此处需修改 1064899168477
dest_Terminal_Id,//@dest_Terminal_Id 接收业务的MSISDN号码,就是接收短信的手机号,String数组
0x00, //dest_Terminal_Type 接收号码类型 add
msg_Content,//@msg_Content 消息内容 byte[],发送的消息内容,需要转化为byte[]
"" //预留
);
CMPP30SubmitRepMessage sub = (CMPP30SubmitRepMessage)smProxy.send(submitMsg);//这里的smProxy就是第2点中用单例创建的smProxy对象
LOGGER.info("CMPP返回信息为{}",sub);
LOGGER.info("CMPP返回信息为{}",sub.toString());
System.out.println(sub);
if(sub.getResult() == 0){//表示发送成功
tradeSmsMsg.setSendState(1);
tradeSmsMsg.setRemark("发送成功");
}else {
tradeSmsMsg.setRemark("发送失败!");
tradeSmsMsg.setSendState(1);
}
以上还有自己建的类,如有不明白,可留下回复 一一解答;