设为首页 收藏本站
查看: 1493|回复: 0

[经验分享] 基于华为CMPP2.0 API开发短信平台

[复制链接]

尚未签到

发表于 2016-6-7 03:38:20 | 显示全部楼层 |阅读模式
短信平台快完工了,晚上把开发中遇到的一些问题整理了出来便于以后的参考和开发
短信下行(发送短信)
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>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-227089-1-1.html 上篇帖子: 华为机试——含有通配符的字串匹配 下篇帖子: 哪位前辈去过华为面试java软件开发职位进来聊一聊!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表