开发过程遇到的几个难点:

1、 序列号的定义
2、 int转byte[]及字节序
3、 重复收到联通上行(MO)
4、 收到用户的定购命令但无法下行(MT)

1、序列号的定义

SGIP1.2 第7页 序列号的定义 写道
      序列号分成三部分,每部分为一个32位整数,第一部分表示命令源节点的编号,第二部分表示命令产生的日期和时间(网关系统中的任何命令的保存时间都不应该超过一年),格式为十进制的mmddhhmmss,比如11月20日20时32分25秒产生的命令,其第二部分为1120203225;第三部分由0开始,循环进位,直到进位满了之后再清零,重新开始计数。接收方在返回应答时,应答的序列号必须和相对应的命令的序列号相同。                                        
SGIP1.2 第7页 源节点编号规则 写道
   在整个网关系统中,所有的通信节点(SMG、GNS、SP和SMSC)都有一个唯一的数字编号,不同的SP或SMSC或SMG或GNS编号不能相同,编号由系统管理人员负责分配。编号规则如下:
 SMG的编号规则:1AAAAX
 SMSC的编号规则:2AAAAX
 SP的编号规则:3AAAAQQQQQ
 GNS的编号规则:4AAAAX
 其中,AAAA表示四位长途区号(不足四位的长途区号,左对齐,右补零),X表示1位序号,QQQQQ表示5位企业代码。

 由于java只有byte,short,int,long等数据类型,不像c/c++那样,有unsigned int,所以java语言中普通的int变量不能存储如此大的数据

比如说,我所在的城市济南,区号为0531,公司的企业代码为41211,按照源节点编码规则为3053141211,共10位,而int变量的范围为-2147483648~2147483647

int srcnode = 3053141211;显然不能通过编译因为已经超过int的表示范围。

还好,Java提供了超大整型类BigInteger

  int srcnode =new BigInteger("3053141211").intValue();    //源节点编号

  byte[] srcnodeBytes = IntToBytes4(srcnode);

用于Java采用补码srcnode的字节长度为5,不要使用toByteArray()方法获得字节数组,应单独编写一个方法用于int转byte[]的方法,注意必须以网络字节序的方式转换,即高位放在低地址,低位放在高地址

Java代码  
  1. /**
  2. * 将int转换为byte数组
  3. *@param i 待转换的int变量
  4. *@return byte[] 转换后的byte数组 */
  5. public static byte[] intToBytes4(int i) {
  6. byte[] tmpbytes = new byte[4];
  7. tmpbytes[3] = (byte) (0xFF & i);
  8. tmpbytes[2] = (byte) ((0xFF00 & i) >> 8);
  9. tmpbytes[1] = (byte) ((0xFF0000 & i) >> 16);
  10. tmpbytes[0] = (byte) ((0xFF000000 & i) >> 24);
  11. return tmpbytes;
  12. }
/**     * 将int转换为byte数组     *@param i 待转换的int变量    *@return byte[] 转换后的byte数组 */ public static byte[] intToBytes4(int i) {       byte[] tmpbytes = new byte[4];     tmpbytes[3] = (byte) (0xFF & i);       tmpbytes[2] = (byte) ((0xFF00 & i) >> 8);        tmpbytes[1] = (byte) ((0xFF0000 & i) >> 16);     tmpbytes[0] = (byte) ((0xFF000000 & i) >> 24);       return tmpbytes;    }

2、int转byte[]及字节序

  在将int转为byte[],须注意字节的顺序。字节顺序分网络字节序和本地字节序,网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解析。网络字节顺序采用big endian排序方式。sgip1.2规定数据传输采用网络字节顺序Big endian(将高字节存储在低地址处,将低字节存储在高地址处)。具体转换及移位操作的使用见http://blog.csdn.net/Mailbomb/archive/2008/05/30/2496168.aspx

3、重复收到联通上行(MO)

  重复收到联通上行困扰了我好几天,仔细检查命令的格式都没有错误,上网搜索在csdn看到一个遇到同样问题的帖子,加他QQ,问他这个问题时一直不肯告诉我原因,真的太小气了。想想也是,说不定他解决这个问题费了好多的时间和精力,怎么能让自己辛苦劳动的结果让别人拿去呢,真没有开源精神,鄙视下!

最后实在找不出原因,打电话请济南联通的张工在后台跟踪下,最终找出原因:

在SMG向SP递交上行时,SP收到上行必须给SMG一个deliver_resp应答,且应答的序列号必须和相对应的命令的序列号相同。 问题出在我返回了应答,但是返回的应答序列号和之前的上行的deliver命令的序列号不同,SMG认为SP没有收到上行,所以才会重复发送上行给SP.

4、收到用户的定购命令但无法下行(MT)

  实施SPMS系统后,凡是订购(定制)业务都需要SPMS给用户发送确认短信,得到用户确认后,才形成临时订购关系;当SP的订购成功欢迎短信通知成功下发后,才生成正式订购(定制)关系。

  根据“联通在信”SGIP1.2协议修改部分说明,在给用户下发短信时,必须附加linkID且SP下发时UserCount必须填写1,否则视为业务非法包处理。

Submit命令中Reserve字段说明:

该Reserve字段为8个字节的保留字段;现将该字段作为MO和MT之间一一对应的LinkID来用。该Reserve字段的值(LinkID)由SPMS业务鉴权平台生成,传给SMG。SPMS将对MO所引起的下发MT进行Reserve(LinkID)值的匹配校验。

SP收到SMG网关发送的MO包后,要将MO中的Reserve字段原封不动拷贝出,并赋到该MO所引起的MT(1个或多个)包的Reserve字段中。该操作适用于进行定制命令、退订命令、MO所引起的MT点播之间的对应关系。如果SP不填,SPMS将因为匹配关系不合法,进行过滤。没有成功下发的原因就是因为没将MO中的Reserve字段赋值到Submit的Reserve字段造成的。

SMG返回的错误码及含义
1 消息结构错
2 命令字错误
3 消息序列号重复
4 消息长度错
5 资费代码错
6 超过最大信息长
7 业务代码错
8 流量控制错(user_phone单填写CDMA号码不在白名单中或charge_phone和user_phone填写的CDMA号码不在白名单)
9 本网关不负责此计费号码(如意通和外省号码)
10 Src_ID错(手机因关机或内存满消息超时删除返回的状态报告)
11 CorpID错(如是MT消息出现很多,可能是他的提交submit消息接口与回状态报告的接口冲突,建议SP不要使用手机上行接口来下发SUBMIT消息;还有一种情况是corp_id填写错误)
12 计费地址错(user_phone单填写GSM号码不在白名单中或charge_phone和user_phone填写的GSM号码不在白名单)
13 目的地址错
14~49 扩展
23(英斯克定义) 路由错误。路由不存在,指消息路由的节点在路由表中不存在
24(英斯克定义) 黑名单用户。计费号码无效,鉴权不成功时反馈的错误信息
40(英斯克定义) 网关对如意通用户进行拦截
50(英斯克定义) 短消息内容非法
51 尚未建立连接
52 尚未成功登录
53 发送消息失败
54 超时未接收到响应消息(一般是tp_udhi一项填写不对,应该填写0)
55 等待状态报告超时
56 用户鉴权时用户状态不正常(charge_phone不在白名单)
60 保留
61 有效时间已经过期(charge_phone和user_phone填写的GSM号码不在白名单)
62 定时发送时间已经过期
63 不能识别的FeeType
64 发送服务源地址鉴权失败
65 发送服务目的地址鉴权失败
66 接收服务源地址鉴权失败(手机内存满或关机等待下发已经到达10条后,SP再发就会出现此错误)
67 接收服务目的地址鉴权失败
68 用户鉴权失败
69 此用户为黑名单用户
70 网络断连或目的设备关闭接口
71 超过最大节点数
72 找不到路由
73 等待应答超时
74 送SCP失败
75 送SCP鉴权等待应答超时
76 信息安全鉴权失败
77 超过最大Submit提交数
78 SPID 为空
79 业务类型为空
80 CPCode错误
81 发送接收接口重复
82 循环路由
83 超过接收侧短消息MTU
84 送DSMP重发失败
85 DSMP系统忙重发
86 DSMP系统忙,且缓存满重发
87 DSMP流控重发
88 流控错误,流量超过最大限制
89
90 SGIP消息等待处理
91 SGIP协议状态报告请求标识错误
92 SGIP协议MT标识错
93 SGIP协议SP节点编号错
94 没有配置帐号
101 /* 定购业务失败 */
102 /* 退定业务失败 */
103 /* 非法SP */
104 /* 非法用户 */
105 /* 用户未定购此项业务,鉴权失败 */
106 /* 非法费用,鉴权失败 */
107 /* 重复包月话单 */
108 /* 非法指令*/
109 /* 非法业务代码*/
110 /* 已定购该业务 */
111 /*--需要用户回复的定制信息--*/
112 /*--需要用户回复的定制信息--*/
113 /*--需要用户回复的定制信息--*/
114 /*--用户回复的定制信息不存在--*/
115 /*--SP回复的定制信息不存在--*/
116 /* 用户未点播此项业务,鉴权失败 */
117 /* 等待用户作二次确认*/
118 /* 等待sp作定制确认*/
119 /* sp定制确认返回ERROR定制不成功要求复位*/
121 /* 下行对应多个目的号码*/
199 /* SPMS 修正了SUBMIT */
122 /* 非法SERVICE */
123 /* 非法SERVICE */
0 无错误,命令正确接收
1 非法登录,如登录名、口令出错、登录名与口令不符等。
2 重复登录,如在同一TCP/IP连接中连续两次以上请求登录。
3 连接过多,指单个节点要求同时建立的连接数过多。
4 登录类型错,指bind命令中的logintype字段出错。
5 参数格式错,指命令中参数值与参数类型不符或与协议规定的范围不符。
6 非法手机号码,协议中所有手机号码字段出现非86130号码或手机号码前未加“86”时都应报错。
7 消息ID错
8 信息长度错
9 非法序列号,包括序列号重复、序列号格式错误等
10 非法操作GNS (黑名单用户)
11 节点忙,指本节点存储队列满或其他原因,暂时不能提供服务的情况
21 目的地址不可达,指路由表存在路由且消息路由正确但被路由的节点暂时不能提供服务的情况
22 路由错,指路由表存在路由但消息路由出错的情况,如转错SMG等
23 路由不存在,指消息路由的节点在路由表中不存在
24 计费号码无效,鉴权不成功时反馈的错误信息
25 用户不能通信(如不在服务区、未开机等情况)
26 手机内存不足
27 手机不支持短消息
28 手机接收短消息出现错误
29 不知道的用户
30 不提供此功能
31 非法设备
32 系统失败
33 短信中心队列满
34 智能网平台扣费失败
35-99 其它错误码(待定义)

以下错误指SMG收到SPMS鉴权错误的原因
100 鉴权成功
101 SPNumber与SP企业代码匹配错
102 SPNumber未分配或不合法
103 业务代码未分配
104 业务资费类型填错
105 业务信息费率填写错误
106 用户未订制的SP非法下发
107 LinkID不匹配(MT与MO)
108 停机用户鉴权不通过,无法下发
109 计费号码无效
110 黑名单用户鉴权不通过,包括未启用状态、预开户状态及销户状态,即除正常通话状态、停机状态以外的所有其他状态
111 MT消息SPMS鉴权超时
112 包月话单SPMS鉴权超时
113 该包格式错误,MT话单的用户号码为空,或者CHARGENUMBER为空,或者SPNUMBER为空,或者CORPID为空,或者SERVICETYPE为空,或MT包里没有LINKID但根据业务代码判断却又不是订制类业务。
112 下发的MT超过最大条数,对点播类业务使用同一个LINKID下发的MT条数不能超过申报的数量
113 下发MT超过允许携带信息费的MT消息上限
114 USERCOUNT字段不为1,该字段必须填写1
115 SP不能将MOFLAG填为3,SP下发的MT包(除包月话单)中MOFLAG字段不能填3
116 将发NOTIUSER包,原流程需要终止。SPMS发通知信息给用户,MO不再上行发送给SP
117 WEB点播命令字不存在
118 包月话单被拦截
119 重复包月话单
120 订购业务失败
121 退订业务失败
123 重复订购
124 重复点播
125-255 其它错误码(待定义)

12为网关返回,说明SP NUMBER未分配或不合法

附各种常见错误码:
状态报告中常见错误码:
106:订购关系不存在,sp与vac订购关系不同步造成,建议sp进行全量同步;sp开通与vac每天ftp文件增量订购关系同步接口,以弥补vac通过sgip协议通知sp落订购关系的误差。
108:用户状态不正确,即用户处于非正常状态,不允许下发消息
10:短信中心下发失败,短信超过有效期
12:短信中心下发失败,被删除(超流量)

应答常见错误码:
SGIP协议登录网关错误码说明:
1:无权限(登录帐号或密码错误)
57:登录ip错误,sp连接网关的ip与sp申请资料中配置的ip不一样
93:SGIP协议SP节点编号错误,主要是节点编号中企业代码错误SGIP协议提交消息,网关应答错误码说明:
64:消息发送的源地址错误
93:SGIP协议SP节点编号错误,提交消息中的企业代码错误

联通最新更新定义

100 鉴权成功
102 SPNumber未分配
103 产品代码不存在
106 用户未订制的SP非法下发,即没有订购关系,或临时点播关系
107 LinkID不匹配(MT与MO)
108 用户状态不正常
109 计费号码不存在
110 黑名单用户鉴权不通过
115 SP不能将MOFLAG填为3,SP下发的MT包(除包月话单)中MOFLAG字段不能填3
117 WEB点播命令字不存在
118 包月话单被拦截
120 订购业务失败
121 退订业务失败
123 重复订购,订购关系已存在
162 超出用户消费限额
163 未发现用户归属地信息,用于按地市惩罚SP。
170 用户二次确认回复提示语出错
171 订购关系不存在,退订时用
172 订购关系不存在,SP不能主动HELP
173 订购关系处于中间状态(如待生效),业务不能用
175 QX分项退订之前没有查询
176 订购关系处于暂停状态
177 Sp下发的计费用户和VASP中定购关系的计费用户不一致,用于sp下包月话单。
179 Sp同步定购关系的产品代码和临时定购关系不一致
180 定购二次确认成功返回码; 0000,qxn,00000 发送到平台号码的返回码;0000,qxn,00000 发送到sp号码的返回码。 这些情况,网关不计上行通讯费。业务相关
181 超出业务发送时间段
182 超出业务当日下发次数
183 点播类业务不支持主动下行
185 不支持第三方订购
186 业务处于测试状态,非测试用户使用测试业务
187 业务处于异常状态
188 低信用度业务
190 用户点播的不是SP下行的业务,即SP点播下行业务代码与点播上行不一致SP相关
211 SP处于异常状态
212 SP的企业代码不存在
213 SP没有权限下发包月扣费消息
214 Sp没有被授权在该用户所在地市开展业务
215 Sp在该用户所在地市被暂停端口
216 Sp在该用户所在地市被暂停业务代收费
221 SP的IP地址不合法(仅用于HTTP接口反向操作)
222 SP的密钥无效(仅用于HTTP接口反向操作)
225 SP模拟mo定购未发现定购指令系统或数据配置错误
231 东软同步订购字段非法
248 系统不支持该服务,没有该系统指令
249 系统不支持帮助下发
251 (东软)捆绑业务不能退订
254 系统错误
255

中国联通SP业务接入开发总结SGIP1.2 协议相关推荐

  1. 中国联通SP业务接入开发总结(SGIP1.2 协议)

    当短信成功下发到手机终端时,一个多星期的联通业务接入程序终于完成,由于以前没有类似的开发经验,中间走了不少弯路,浪费了很多时间.总结下开发经验为下一步开发移动的业务接入打下一个基础. 开发过程遇到的几 ...

  2. 中国联通短信网关接入程序源代码(SGIP1.2协议)

    http://sunnylocus.iteye.com/blog/567374#bc2382420 自从我发了博文"中国联通SP业务开发总结"后有很多的朋友问我开发上一些问题,开发 ...

  3. SP 短信开发-基础知识篇

    SP 短信开发-基础知识篇 很土的话题,但是最近帮朋友做这个东西,所以写点东西出来给初学者参考. 一.准备资料 SP开发资料网站上有很多,但是主要是以下几个文档: 1.MISC1.6 SP订购通知接口 ...

  4. 移动梦网SP业务入门

      1.SP资质要求   2.SP应准备的申请资料   3.商业计划评估   4.初步确认本地业务合作意向   5.短信息费用和定价原则   6.信息费定价原则   7.申请SP测试流程   8.SP ...

  5. 支付接入开发的陷阱有多深?

    支付接入开发的陷阱有多深? 发表于2015-10-27 15:04| 3975次阅读| 来源CSDN| 10 条评论| 作者蒲婧 CTO俱乐部CTOCTO讲堂移动支付BeeCloud width=&q ...

  6. 【CTO讲堂】支付接入开发的陷阱有多深? 京东支付

    [CTO讲堂]支付接入开发的陷阱有多深? 发表于2015-10-27 15:04| 3926次阅读| 来源CSDN| 0 条评论| 作者蒲婧 CTO俱乐部CTOCTO讲堂移动支付BeeCloud al ...

  7. 面向多领域交通监测业务快速开发部署的交通综合运行协调指挥系统(TOCC)关键技术研究与实践...

    面向多领域交通监测业务快速开发部署的交通综合运行协调指挥成果的研究,主要从数据层.技术层.应用层和综合监测层进行技术研究,实现"三屏联动监测"."四层结构设计" ...

  8. 《2G LTE IoT云端接入开发技术》全国巡回技术沙龙——杭州站

    <2G & LTE IoT云端接入开发技术>全国巡回技术沙龙--杭州站 背景介绍:        截止2017年底,全球存在庞大的2G存量物联设备,并且还在快速增长,而国内主要运营 ...

  9. [原创].NET 业务框架开发实战之十 第一阶段总结,深入浅出,水到渠成(前篇)...

    .NET 业务框架开发实战之十 第一阶段总结,深入浅出,水到渠成(前篇) 前言:这个系列有段时间没有动了.主要是针对大家的反馈在修改代码.在修改的过程中,也有了一些新的体会,这里和大家分享一下,同时也 ...

最新文章

  1. Hibernate与 MyBatis的比较
  2. 数据加密和数据签名的本质区别 解释
  3. centos .php 源码,CentOS 源码安装PHP
  4. java基础提升篇:深入浅出Java多线程
  5. GDCM:gdcm::SurfaceReader的测试程序
  6. 手写自己的MyBatis框架-语句执行处理
  7. mvc ajax给control传值问题
  8. 如何使用命令行拿到SAP Kyma的Lambda Function明细
  9. 论文浅尝 | 中科院百度微软等学者最新综述论文40+最新方法阐述知识图谱提升推荐系统准确性与可解释性...
  10. echarts中toolbox位置_echarts toolbox 扩展
  11. linux mint 设置分辨率,Vmware中装Linux Mint 15 添加 1600x900分辨率
  12. 数组的连续子数组最大和(首尾相连)
  13. 【ASP.NET Web API教程】3.4 HttpClient消息处理器
  14. PYTHON博客记录0602
  15. Windows 10下使用Xshell5连接虚拟机的ubuntu18系统
  16. 谷歌大神 Jeff Dean 的那些“惊人真相”
  17. 1867最短路径问题(SPFA)
  18. Incorrect string value '\xF0\xA0\x9D\xB9\xE5\x82...' for column 'CONTENT' at row 1
  19. python远程聊天_Python实现多人在线匿名聊天的小程序
  20. win10家庭版调出组策略_正版Win10免费送!这绝对是全网最低价的正版Win10系统

热门文章

  1. [Windows] 【PC】京东2021炸年兽活动一键做任务 全民自动炸年兽1.21
  2. 【前端】text/javascript与application/javascript的区别
  3. 2023计算机毕业设计选题一定要注意这几点-计算机专业毕业设计题目参考推荐
  4. 对话王田苗:亚马逊谷歌入局 服务机器人何时爆发?
  5. stm32f103+FFT+OLED的音乐频谱制作(只需三步即可)
  6. 老友记第一季-第5集背诵句
  7. wordpress elementor background overlay层 inert headr and footer动态切换透明度
  8. 如何向开源项目提交issue以及为什么开源社区不推荐使用 fastjson库
  9. “清理僵尸粉”惊天骗局:微信被黑客控制,聊天记录被黑客监视
  10. Arduino-光控灯的实现