`
xidajiancun
  • 浏览: 492379 次
文章分类
社区版块
存档分类
最新评论

基于华为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 端口号
SMPP 3 5018
CMPP 5 7890
SMGP 6 7118

如果利用华为的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>

分享到:
评论

相关推荐

    采用华为包开发JAVA移动短信CMPP2.0/CMPP3.0

    本人亲测可用采用华为包开发的JAVA移动短信CMPP2.0/CMPP3.0程序,希望能够帮到你

    cmpp2.0模拟短信网关

    CMPP2.0(China Mobile Peer-to-Peer Protocol Version 2.0)是中国移动通信集团设计的一种基于TCP/IP协议的通信协议,用于实现SP(Service Provider)与MC(Mobile Center)之间的数据传输,主要用于短信服务。...

    华为cmpp短信API

    在本篇文章中,我们将深入探讨华为CMPP短信API的关键概念、功能特性以及如何在不同平台上进行应用。 1. **CMPP协议基础** CMPP(China Mobile Peer to Peer)是中国移动通信集团制定的一种基于TCP/IP的通信协议,...

    CMPP2.0、3.0网关以及蓝杰网关代码

    总的来说,这个压缩包文件包含了CMPP2.0和CMPP3.0网关的实现,以及相关的Java代码和华为的短信代理库,为开发者提供了完整的CMPP开发环境和工具,方便进行短信服务的开发和调试。通过深入理解CMPP协议及其工作原理,...

    中国移动短信网关cmpp 3.0 华为java api

    1. **CMPP协议概述**:CMPP协议是基于TCP/IP的,主要由CMPP_SUBMIT(提交短信)、CMPP_DELIVER(接收短信)、CMPP_QUERY(查询短信状态)等多个命令组成,确保了短信服务的高效和稳定。CMPP3.0在2.0的基础上增加了更...

    cmpp3开发包(华为提供).rar_CMPP3_CMPP3 java_cmpp_java cmpp_华为

    CMPP3.0是该协议的一个版本,它在CMPP2.0的基础上进行了优化和增强,以满足更高的业务需求和性能要求。这个“cmpp3开发包(华为提供).rar”是华为公司为开发者提供的一个用于实现CMPP3.0协议的Java开发工具包。 ...

    华为 短信API 综合网关

    总的来说,华为短信API综合网关是一个全面的短信服务解决方案,它提供了丰富的协议选择和详细的开发支持,使得企业能够轻松集成短信服务,实现验证码发送、通知推送、营销信息分发等多种功能。对于需要短信服务的...

    CMPP API

    CMPP2.0是早期的版本,主要提供基本的短信发送和接收功能,而CMPP3.0在2.0的基础上增加了更多的特性,如更完善的错误处理机制、支持长短信、支持多连接等,提升了系统的稳定性和效率。 "支持亚信网关和华为网关"这...

    移动短信开发(华为软件包)

    本文将详细解析SMproxy网关及其在移动短信开发中的应用,以及如何结合CMPP2.0模拟网关进行上行和下行操作。 首先,SMproxy是华为提供的一个短信服务代理,它在短信业务系统中起着承上启下的作用。作为服务器端,...

    华为短信api的java源码

    华为短信API的Java源码是用于与华为短信服务进行交互的一种开发工具,它允许开发者通过编程方式发送、接收和管理短信。在这个压缩包中,可能包含的文件是`smproxy`,这通常是一个代理服务器或者中间件,用于处理与...

    短信开发文档及软件包(华为网关方式)

    总结来说,"短信开发文档及软件包(华为网关方式)"是一个针对华为CMPP2.0协议的开发资源包,它提供了必要的库和文档,帮助开发者构建能够与华为短信网关通信的应用程序,从而实现高效、可靠的短信服务。

    cmpp短信网关协议Java版

    总之,这个Java版的CMPP2.0实现为开发者提供了一个快速接入中国移动短信服务的平台,通过理解并运用此项目,开发者可以深入理解短信网关协议的工作原理,并能有效地集成到自己的应用系统中,实现短信的发送和接收...

    中国移动通信CMPP3.0短消息网关开发接口

    网关完全符合CMPP2.0协议标准。支持各省和全网的所有移动网关,同时兼容亚信,华为,东软,清华深讯,思特奇等所有网关厂商平台。 高度封装,开发效率高。二次开发人员只需要很少的开发工作就可以实现短信网关应用...

    华为短信API,中国移动

    中国移动作为中国的主要电信运营商,其网络被华为短信API所支持,这意味着开发者可以借助华为的平台,利用CMPP2.0协议与移动的网络进行高效、稳定的数据交互。 CMPP(China Mobile Short Message Peer-to-Peer ...

    华为短信开发包(Java)

    CMPP2.0和CMPP3.0是其两个版本,CMPP3.0在CMPP2.0基础上增加了更强大的功能和安全性,如支持长短信、多连接等。在Java开发中,实现CMPP协议通常涉及到Socket编程,数据打包和解包,以及线程管理等技术。 2. **CNGP...

    smproxy.rar

    1. CMPP2.0:这是中国移动为SP(Service Provider)提供的基于IP的接口标准,支持短信的提交、上行、查询、状态报告等多种业务。它的特点是消息传输快速、可靠,支持批量发送和长短信拆分,适用于大规模的短信服务...

Global site tag (gtag.js) - Google Analytics