基于华为CMPP2.0 API开发短信平台

短信平台快完工了,晚上把开发中遇到的一些问题整理了出来便于以后的参考和开发

短信下行(发送短信)

SMProxy myProxy= new SMProxy(this,args);

Args args = new Cfg("SMProxy.xml",false).getArgs("ismg");

args.set("source-addr",loginName.getText().trim());

args.set("shared-secret",loginPass.getText().trim());

args.set("shared-secret",loginPass.getText().trim());

CMPPSubmitMessage submitMsg =

         new CMPPSubmitMessage(

      int pk_Total,   //

      int pk_Number,   // pk_Number 相同msg_Id的消息序号

     int registered_Delivery,   // registered_Delivery 是否要求返回状态报告

     int msg_Level,   // msg_Level  信息级别

     String service_Id,   // service_Id 业务类型

    int fee_UserType,   // fee_UserType 计费用户类型字段

    String fee_Terminal_Id,   // fee_Terminal_Id 被计费用户的号码

    int tp_Pid,   // tp_Pid GSM协议类型

       int tp_Udhi,   // tp_Udhi GSM协议类型

     int msg_Fmt,   // msg_Fmt 消息格式

     String msg_Src,   // msg_Src 消息内容来源

     String fee_Type,   // fee_Type 资费类别

     String fee_Code,   // fee_Code 资费代码(以分为单位)

     Date valid_Time,   // valid_Time 存活有效期

     Date at_Time,   // at_Time 定时发送时间

     String src_Terminal_Id,   // src_Terminal_Id 源号码

     String[] dest_Terminal_Id,   // dest_Terminal_Id 接收短信的MSISDN号码

     byte[] msg_Content,   // msg_Content 消息内容

     String reserve   // LinkID    点播业务使用的LinkID

) ;

System.out.println("Send Msg=["+ submitMsg.toString()+"]/n");

CMPPSubmitRepMessage submitRepMsg = myProxy.send(submitMsg);

 

//查询SMProxy与ISMG的TCP连接状态

String stateDesc = myProxy.getConnState();

System.out.println("Rep Msg= ["+stateDesc.toString()+"]/n");

 

 

//退出

myProxy.close()

 

 

 

短信上行(接收短信)

//extends SMProxy   继承com.huawei.smproxy.SMProxy类 覆盖onDeliver方法

public CMPPMessage onDeliver(CMPPDeliverMessage msg) {

         byte msgId[] = msg.getMsgId();

         String revertMessage=null;

         try {

                   System.out.println("msg is " + new String(msg.getMsgContent(), "ISO-10646-UCS-2"));

         } catch (UnsupportedEncodingException e) {

                   e.printStackTrace();

         }

         //来源手机号

         msg.getSrcterminalId();

         ……

}

 

注意事项

CMPP2.0协议规定ICP与网关之间保持长连接,并且API可自动提供重连机制,所以在对接口函数的调用时应注意只需在程序启动时调用InitInterface()、及Login_R();无需在自己程序的其它线程中再次调用,而导致登陆多个接口。

CMPP协议中的目的地址最多可输入100个,在调用SubmitAExEx 时应注意sDestAddrs的定义为21*100字节的数组,每个号码固定的长度21个字节,不足21位的应赋空(十六进制0)。没有特殊情况,请尽量不要使用多目的地址发送。

短信长度应填写短信的实际字节长度,不应每次都填写短信的最大字节长度140。

调用SubmitAExEx后API会自动等待应答消息,并将应答消息的MsgID通过指针回传。MsgID应注意是一个22位的字符串。10位时间戳+7位的网关代码+5位的序列号。

通过调用GetDeliverExExEx可以将状态报告的MsgID解析出来,可通过此MsgID与调用SubmitAExEx得到的MsgID进行匹配。此API可同时支持SMPP协议、CMPP协议、SGMP协议、应注意其端口号的区别:这些端口号是在登录infoX信息平台的时的端口号。   登录短消息中心时端口号不同。         

                                                                                                                                           

协议类型dwCodeProtocol端口号
SMPP35018
CMPP57890
SMGP67118
   

如果利用华为的API,SP可以自动配置握手间隔时间,SP和infoX相连应采用长连接,但是infoX信息平台一般在50秒如果没有收到握手消息时就会断掉和SP的接口。建议SP在程序中对接口的断连写详细的日志,以便查看。

关于重发机制。如果SP开发的程序使用重发机制,建议重发的间隔最好设为5分钟之后, 

重发次数不要超过5次。具体需要重发的消息也要根据错误码来决定,对于特定的错误码

(比如接口断连,应答超时,SCP应答超时)才采用重发机制,而对于一些错误码(如

SCP鉴权失败,用户不存在)则不要重发,以免造成不必要的网络负担。

 

 

 

 

SMProxy.xml

<?xml version="1.0" encoding="GB2312"?>

<!-- SM Proxy 配置文件-->

<config>

  <!--与ISMG(Internet Short Message Gateway)建立连接所需参数-->

  <ismg>

 

    <!-- ISMG主机地址 -->

    <host>10.76.148.147</host>

 

    <!-- ISMG主机端口号 -->

    <port>7890</port>

 

    <!-- 心跳信息发送间隔时间(单位:秒) -->

    <heartbeat-interval>60</heartbeat-interval>

 

    <!-- 连接中断时重连间隔时间(单位:秒)-->

    <reconnect-interval>60</reconnect-interval>

 

    <!-- 需要重连时,连续发出心跳而没有接收到响应的个数(单位:个)-->

    <heartbeat-noresponseout>5</heartbeat-noresponseout>

 

    <!-- 操作超时时间(单位:秒) -->

    <transaction-timeout>10</transaction-timeout>

 

    <!--SP…ID(最大为六位字符)-->

    <source-addr></source-addr>

 

    <!--双方协商的版本号(大于0,小于256)-->

    <version>33</version>

 

    <!--shared-secret由中国移动与ICP事先商定-->

    <shared-secret></shared-secret>

 

    <!--是否属于调试状态,true表示属于调试状态,所有的消息被打印输出到屏幕,false表示不属于调试状态,所有的消息不被输出-->

    <debug>true</debug>

 

  </ismg>

</config>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值