短信平台快完工了,晚上把开发中遇到的一些问题整理了出来便于以后的参考和开发
短信下行(发送短信):
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程序,希望能够帮到你
CMPP2.0(China Mobile Peer-to-Peer Protocol Version 2.0)是中国移动通信集团设计的一种基于TCP/IP协议的通信协议,用于实现SP(Service Provider)与MC(Mobile Center)之间的数据传输,主要用于短信服务。...
在本篇文章中,我们将深入探讨华为CMPP短信API的关键概念、功能特性以及如何在不同平台上进行应用。 1. **CMPP协议基础** CMPP(China Mobile Peer to Peer)是中国移动通信集团制定的一种基于TCP/IP的通信协议,...
总的来说,这个压缩包文件包含了CMPP2.0和CMPP3.0网关的实现,以及相关的Java代码和华为的短信代理库,为开发者提供了完整的CMPP开发环境和工具,方便进行短信服务的开发和调试。通过深入理解CMPP协议及其工作原理,...
1. **CMPP协议概述**:CMPP协议是基于TCP/IP的,主要由CMPP_SUBMIT(提交短信)、CMPP_DELIVER(接收短信)、CMPP_QUERY(查询短信状态)等多个命令组成,确保了短信服务的高效和稳定。CMPP3.0在2.0的基础上增加了更...
CMPP3.0是该协议的一个版本,它在CMPP2.0的基础上进行了优化和增强,以满足更高的业务需求和性能要求。这个“cmpp3开发包(华为提供).rar”是华为公司为开发者提供的一个用于实现CMPP3.0协议的Java开发工具包。 ...
总的来说,华为短信API综合网关是一个全面的短信服务解决方案,它提供了丰富的协议选择和详细的开发支持,使得企业能够轻松集成短信服务,实现验证码发送、通知推送、营销信息分发等多种功能。对于需要短信服务的...
CMPP2.0是早期的版本,主要提供基本的短信发送和接收功能,而CMPP3.0在2.0的基础上增加了更多的特性,如更完善的错误处理机制、支持长短信、支持多连接等,提升了系统的稳定性和效率。 "支持亚信网关和华为网关"这...
本文将详细解析SMproxy网关及其在移动短信开发中的应用,以及如何结合CMPP2.0模拟网关进行上行和下行操作。 首先,SMproxy是华为提供的一个短信服务代理,它在短信业务系统中起着承上启下的作用。作为服务器端,...
华为短信API的Java源码是用于与华为短信服务进行交互的一种开发工具,它允许开发者通过编程方式发送、接收和管理短信。在这个压缩包中,可能包含的文件是`smproxy`,这通常是一个代理服务器或者中间件,用于处理与...
总结来说,"短信开发文档及软件包(华为网关方式)"是一个针对华为CMPP2.0协议的开发资源包,它提供了必要的库和文档,帮助开发者构建能够与华为短信网关通信的应用程序,从而实现高效、可靠的短信服务。
总之,这个Java版的CMPP2.0实现为开发者提供了一个快速接入中国移动短信服务的平台,通过理解并运用此项目,开发者可以深入理解短信网关协议的工作原理,并能有效地集成到自己的应用系统中,实现短信的发送和接收...
网关完全符合CMPP2.0协议标准。支持各省和全网的所有移动网关,同时兼容亚信,华为,东软,清华深讯,思特奇等所有网关厂商平台。 高度封装,开发效率高。二次开发人员只需要很少的开发工作就可以实现短信网关应用...
中国移动作为中国的主要电信运营商,其网络被华为短信API所支持,这意味着开发者可以借助华为的平台,利用CMPP2.0协议与移动的网络进行高效、稳定的数据交互。 CMPP(China Mobile Short Message Peer-to-Peer ...
CMPP2.0和CMPP3.0是其两个版本,CMPP3.0在CMPP2.0基础上增加了更强大的功能和安全性,如支持长短信、多连接等。在Java开发中,实现CMPP协议通常涉及到Socket编程,数据打包和解包,以及线程管理等技术。 2. **CNGP...
1. CMPP2.0:这是中国移动为SP(Service Provider)提供的基于IP的接口标准,支持短信的提交、上行、查询、状态报告等多种业务。它的特点是消息传输快速、可靠,支持批量发送和长短信拆分,适用于大规模的短信服务...