本文来自http://blog.csdn.net/lijun84 ,引用必须注明出处!
各运行商通讯协议总结
本人以前在公司为了工作方便,对各运营商的通讯协议(联通 SGIP 、移动 CMPP 、电信 SMGP 、网通 CNGP 、短消息中心与网关间协议 SMPP )进行整理,见《各运行商通讯协议整理》,现总结如下:
一、 由于 SMPP 不存在计费信息,所以我们的下行计费短消息必须通过四大运营商通讯协议下发给各运营商网关,可以暂时不用考虑 SMPP 同 SGIP 的转换 ;
二、 由于四大运营商通讯协议的命令 id 、错误代码、其他各命令等存在差异,所以决定 1919 通讯程序采用如下方法来实现与四大运营商网关的通讯:
1、 分别通过四大运营商各自的协议与它们的网关进行通讯(包括登陆、 submit 、 deliver 、 report 及它们的响应消息);
2、 对 SGIP 的消息直接处理,但是需要保存 submit 的消息头中的序列号字段,用于与 report 中的消息标志字段对应 ;
3、 对 CMPP 、 SMGP 、 CNGP 的登陆消息直接处理;
4、 对 CMPP 、 SMGP 、 CNGP 的 submit 、 deliver 、 report 消息执行协议转换 ;
5、 对 CMPP 、 SMGP 、 CNGP 的 Submit_Resp 、 Deliver_Resp 直接处理,但是需要保存消息标志字段,用于与 report 中的消息标志字段对应 ;
6、 业务程序生成 SGIP 的 Submit 消息,转换成其他三大运营商的 Submit 消息发给网关;
7、 把其他三大运营商的 Deliver 消息转换成 SGIP 的 Deliver 消息,交给业务程序处理,并且需要保存消息标志字段,用于发送 Deliver_Resp ;
8、 把其他三大运营商的 Report 消息转换成 SGIP 的 Report 消息,交给业务程序处理,并且需要保存消息标志字段,用于与 Submit_Resp 中的消息标志字段对应 ;
三、 消息头的区别:
1、 SGIP 的序列号长度为 12 ,其他各协议序列号长度为 4 ;
2、 SGIP 的 submit 的消息头中的序列号字段需要保存,用于对应 report 的 SubmitSequenceNumber 字段;
3、 CNGP 的 Submit_Resp 的消息头中的命令状态字段定义了发送成功标志,长度为 4 ;
4、 CNGP 的 Deliver_Resp 的消息头中的命令状态字段定义了接收成功标志,长度为 4 ;
5、 消息头由 1919 平台直接处理;
四、 Submit 消息的区别
1、 CMPP 、 SMGP 、 CNGP 中的 FeeType 字段,可以根据 SGIP 中的 FeeType 转换得到;
2、 CMPP 、 SMGP 、 CNGP 中的状态报告标志字段,可以根据 SGIP 中的 ReportFlag 转换得到;
3、 CNGP 不存在 linkid 字段;
4、 CMPP 有 Msg_Id 、 Pk_total 、 Pk_number 、 Dest_teminal_type 字段,由 1919 平台处理;
5、 CMPP 和 CNGP 都有计费用户类型字段,可以根据 SGIP 的 ChargeNumber 来填写;
6、 CMPP 有 Dest_teminal_type ,默认为 0 ,真实号码;
7、 SMGP 有 FixedFee 字段,可以根据 SGIP 的计费类型字段来填写;
8、 CNGP 有 Protocol_ID 字段,由 1919 平台处理;
五、 Submit_Resp 消息的区别
1、 SGIP 、 CMPP 、 SMGP 三个协议有发送成功标志字段,其中 SGIP 的长度为 1 , CMPP 、 SMGP 的长度为 4 ;
2、 CMPP 、 SMGP 、 CNGP 有长度为 8 、 10 、 10 的信息标志,它由网关生成,需要保存,用于与 report 消息中的消息标志对应;
六、 Deliver 消息的区别
1、 CNGP 不存在 linkid 字段;
2、 CMPP 、 SMGP 、 CNGP 都存在消息标志字段,需要保存,用于 Deliver_resp 的发送;
3、 CMPP 、 SMGP 、 CNGP 都存在状态报告标志字段,用来判断此消息是否为状态报告消息;
4、 CNGP 有 Protocol_ID 字段,可以忽略;
七、 Deliver_Resp 消息的区别
1、 SGIP 、 CMPP 、 SMGP 三个协议有接收成功标志字段,其中 SGIP 的长度为 1 , CMPP 、 SMGP 的长度为 4 ;
2、 CMPP 、 SMGP 、 CNGP 有长度分别为 8 、 10 、 10 的消息标志字段,它由网关生成,从 Delive 消息中取出来,需要保存,用于 Deliver_Resp 发送;
八、 Report 消息的区别
1、 CMPP 、 SMGP 、 CNGP 的状态报告都包含在 deliver 的短消息内容字段中;
2、 SGIP 的消息标志对应 submit 消息头的序列号字段 , CMPP 、 SMGP 、 CNGP 的消息标志对应 submit_resp 中消息标志字段