CMPP3.0/2.0完成短信收发功能(引用华为smsproxy开发包)

配置文件:












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);
                }

以上还有自己建的类,如有不明白,可留下回复 一一解答;

你可能感兴趣的:(个人,java,cmpp3.0)