【1】几个术语
英文缩写 | 英文全称 | 说明 |
---|---|---|
ISMG | Intenet Short Message Gateway | 互联网短信网关 |
DSMP | Data Service Manage Platform | 数据业务管理平台 |
SMPP | Short Message Peer to Peer | 短消息点对点协议 |
CMPP | China Mobile Peer to Peer | 中国移动点对点协议 |
SMSC | Short Message Service Center | 短消息中心 |
GNS | Gateway Name Server | 网关名称服务器(汇接网关) |
SP | Service Provider | 业务提供者 |
ISMG_Id
网关代码:0XYZ01~0XYZ99,其中XYZ为省会区号,位数不足时左补零,如北京编号为1的网关代码为001001,江西编号为1的网关代码为079101,依此类推。
SP_Id
SP的企业代码:网络中SP地址和身份的标识、地址翻译、计费、结算等均以企业代码为依据。企业代码以数字表示,共6位,从“9XY000”至“9XY999”,其中“XY”为各移动公司代码。
SP_Code
SP的服务代码:服务代码是在使用短信方式的上行类业务中,提供给用户使用的服务提供商代码。服务代码以数字表示,全国业务服务代码长度为4位即“1000”-“9999”;本地业务服务代码长度统一为5位,即“01000”-“09999”。
信产部对新的SP的服务代码分配提出了新的要求,要求以“1061”-“1069”作为前缀,目前中国移动进行了如下分配:1062—用于省内SP服务代码,1066—用于全国SP服务代码,其它号段保留。
Service_Id
SP的业务类型,数字、字母和符号的组合,由SP自定,如图片传情可定为TPCQ,股票查询可定义为11。
数据类型定义
数据类型 | 说明 |
---|---|
Unsigned Integer | 无符号整数 |
Integer | 整数,可为正整数、负整数或零 |
Octet String | 定长字符串,位数不足时,如果左补0则补ASCII表示的零以填充, 如果右补0则补二进制的零以表示字符串的结束符 |
【2】网络结构拓扑
如下图所示:
互联网短信网关(ISMG)是业务提供商(SP)与移动网内短信中心之间的中介实体,互联网短信网关一方面负责接收SP发送给移动用户的信息和提交给短信中心。另一方面,移动用户点播SP业务的信息将由短信中心通过互联网短信网关发给SP。另外,为了减轻短信中心的信令负荷,互联网短信网关还应根据路由原则将SP提交的信息转发到相应的互联网短信网关。互联网短信网关通过向汇接网关(GNS)查询的方式获得网关间的转发路由信息。
另外,ISMG还必须与数据业务管理平台DSMP进行连接,在业务流程中对用户、业务以及定购关系等进行鉴权并对业务进行批价。
这里业务提供商可以理解为就是“我们”。
【3】CMPP协议
① CMPP协议主要提供以下两类业务操作
(1)短信发送(Short Message Mobile Originate,SM MO)
(2)短信接收(Short Message Mobile Terminated,SM MT)
② 协议栈
CMPP协议以TCP/IP作为底层通信承载,具体结构如图所示:
③ 通信方式
各网元之间共有两种连接方式:长连接和短连接。所谓长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发链路检测包以维持此连接。短连接是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接,即每次TCP连接只完成一对CMPP消息的发送。
现阶段,要求ISMG之间必须采用长连接的通信方式,建议SP与ISMG之间采用长连接的通信方式。
- 长连接
通信双方以客户-服务器方式建立TCP连接,用于双方信息的相互提交。当信道上没有数据传输时,通信双方应每隔时间C发送链路检测包以维持此连接,当链路检测包发出超过时间T后未收到响应,应立即再发送链路检测包,再连续发送N-1次后仍未得到响应则断开此连接。
参数C、T、N原则上应可配置,现阶段建议取值为:C=3分钟,T=60秒,N=3。
网关与SP之间、网关之间的消息发送后等待T秒后未收到响应,应立即重发,再连续发送N-1次后仍未得到响应则停发。现阶段建议取值为:T=60秒,N=3。
消息采用并发方式发送,加以滑动窗口流量控制,窗口大小参数W可配置,现阶段建议为16,即接收方在应答前一次收到的消息最多不超过16条。
长连接的操作流程举例如图所示:
- 短连接
通信双方以客户-服务器方式建立TCP连接,应答与请求在同一个连接中完成。系统采用客户/服务器模式,操作以客户端驱动方式发起连接请求,完成一次操作后关闭此连接。
网关与SP之间、网关之间的消息发送后等待T秒后未收到响应,应立即重发,再连续发送N-1次后仍未得到响应则停发。现阶段建议取值为:T=60秒,N=3。
短连接的操作流程举例如图所示:
④ 交互过程中的应答方式
在SP与ISMG之间、SMSC与ISMG之间及ISMG之间的交互过程中均采用异步方式,即任一个网元在收到请求消息后应立即回送响应消息。
如下图所示:
【4】CMPP Message
① 消息结构
项目 | 说明 |
---|---|
Message Header | 消息头(所有消息公共包头) |
Message Body | 消息体 |
这里需要注意,消息头是所有消息公共包头。也就是所有消息都是消息头+消息体。消息头结构在这里定义说明了,下面的消息定义皆为消息体结构定义。
② 消息头格式(Message Header)
字段名 | 字节数 | 类型 | 描述 |
---|---|---|---|
Total_Length | 4 | Unsigned Integer | 消息总长度(含消息头及消息体) |
Command_Id | 4 | Unsigned Integer | 命令或响应类型 |
Sequence_Id | 4 | Unsigned Integer | 消息流水号,顺序累加,步长为1,循环使用(一对请求和应答消息的流水号必须相同) |
以下为业务提供商(SP)与互联网短信网关(ISMG)间的消息定义。
③SP请求连接到ISMG(CMPP_CONNECT)操作
SP为客户端,向作为服务器端的ISMG发起连接请求,在通过身份验证之后SP与ISMG之间方可进行数据传输。
CMPP_CONNECT操作的目的是SP向ISMG注册作为一个合法SP身份,若注册成功后即建立了应用层的连接,此后SP可以通过此ISMG接收和发送短信。
ISMG以CMPP_CONNECT_RESP消息响应SP的请求。
3.1 CMPP_CONNECT消息定义(SP->ISMG)
字段名 | 字节数 | 属性 | 描述 |
---|---|---|---|
Source_Addr | 6 | Octet String | 源地址,此处为SP_Id,即SP的企业代码。 |
AuthenticatorSource | 16 | Octet String | 用于鉴别源地址。其值通过单向MD5 hash计算得出,表示如下:AuthenticatorSource =MD5(Source_Addr+9 字节的0 +shared secret+timestamp) Shared secret 由中国移动与源地址实体事先商定,timestamp格式为:MMDDHHMMSS,即月日时分秒,10位。 |
Version | 1 | Unsigned Integer | 双方协商的版本号(高位4bit表示主版本号,低位4bit表示次版本号),对于3.0的版本,高4bit为3,低4位为0 |
Timestamp | 4 | Unsigned Integer | 时间戳的明文,由客户端产生,格式为MMDDHHMMSS,即月日时分秒,10位数字的整型,右对齐 。 |
3.2 CMPP_CONNECT_RESP消息定义(ISMG->SP)
字段名 | 字节数 | 属性 | 描述 |
---|---|---|---|
Status | 4 | Unsigned Integer | 状态 0:正确 1:消息结构错 2:非法源地址 3:认证错 4:版本太高 5~ :其他错误 |
AuthenticatorISMG | 16 | Octet String | ISMG认证码,用于鉴别ISMG。 其值通过单向MD5 hash计算得出,表示如下:AuthenticatorISMG=MD5(Status+AuthenticatorSource+shared secret), Shared secret 由中国移动与源地址实体事先商定,AuthenticatorSource为源地址实体发送给ISMG的对应消息CMPP_Connect中的值。 认证出错时,此项为空。 |
Version | 1 | Unsigned Integer | 服务器支持的最高版本号,对于3.0的版本, 高4bit为3,低4位为0 |
④SP或ISMG请求拆除连接(CMPP_TERMINATE)操作
CMPP_TERMINATE操作的目的是SP或ISMG基于某些原因决定拆除当前的应用层连接而发起的操作。此操作完成后SP与ISMG之间的应用层连接被释放,此后SP若再要与ISMG通信时应发起CMPP_CONNECT操作。
ISMG或SP以CMPP_TERMINATE_RESP消息响应请求。
- CMPP_TERMINATE消息定义(SP->ISMG或ISMG -> SP)无消息体。
- CMPP_TERMINATE_RESP消息定义(SP->ISMG或ISMG -> SP)无消息体。
⑤ SP向ISMG提交短信(CMPP_SUBMIT)操作
CMPP_SUBMIT操作的目的是SP在与ISMG建立应用层连接后向ISMG提交短信。
ISMG以CMPP_SUBMIT_RESP消息响应。
5.1CMPP_SUBMIT消息定义(SP->ISMG)
字段名 | 字节数 | 属性 | 描述 |
---|---|---|---|
Msg_Id | 8 | Unsigned Integer | 信息标识。 |
Pk_total | 1 | Unsigned Integer | 相同Msg_Id的信息总条数,从1开始。 |
Pk_number | 1 | Unsigned Integer | 相同Msg_Id的信息序号,从1开始。 |
Registered_Delivery | 1 | Unsigned Integer | 是否要求返回状态确认报告: 0:不需要;1:需要。 |
Msg_level | 1 | Unsigned Integer | 信息级别。 |
Service_Id | 10 | Octet String | 业务标识,是数字、字母和符号的组合。 |
Fee_UserType | 1 | Unsigned Integer | 计费用户类型字段: 0:对目的终端MSISDN计费; 1:对源终端MSISDN计费; 2:对SP计费; 3:表示本字段无效,对谁计费参见Fee_terminal_Id字段。 |
Fee_terminal_Id | 32 | Octet String | 被计费用户的号码,当Fee_UserType为3时该值有效,当Fee_UserType为0、1、2时该值无意义。 |
Fee_terminal_type | 1 | Unsigned Integer | 被计费用户的号码类型, 0:真实号码;1:伪码。 |
TP_pId | 1 | Unsigned Integer | GSM协议类型。详细是解释请参考GSM03.40中的9.2.3.9。 |
TP_udhi | 1 | Unsigned Integer | GSM协议类型。详细是解释请参考GSM03.40中的9.2.3.23,仅使用1位,右对齐。 |
Msg_Fmt | 1 | Unsigned Integer | 信息格式:0:ASCII串;3:短信写卡操作;4:二进制信息;8:UCS2编码; 15:含GB汉字。。。。。。 |
Msg_src | 6 | Octet String | 信息内容来源(SP_Id)。 |
FeeType | 2 | Octet String | 资费类别:01:对“计费用户号码”免费; 02:对“计费用户号码”按条计信息费; 03:对“计费用户号码”按包月收取信息费。 |
FeeCode | 6 | Octet String | 资费(以分为单位)。 |
ValId_Time | 17 | Octet String | 存活有效期,格式遵循SMPP3.3协议。 |
At_Time | 17 | Octet String | 定时发送时间,格式遵循SMPP3.3协议。 |
Src_Id | 21 | Octet String | 源号码。SP的服务代码或前缀为服务代码的长号码, 网关将该号码完整的填到SMPP协议Submit_SM消息相应的source_addr字段,该号码最终在用户手机上显示为短消息的主叫号码。 |
DestUsr_tl | 1 | Unsigned Integer | 接收信息的用户数量(小于100个用户)。 |
Dest_terminal_Id | 32*DestUsr_tl | Octet String | 接收短信的MSISDN号码。 |
Dest_terminal_type | 1 | Unsigned Integer | 接收短信的用户的号码类型, 0:真实号码;1:伪码。 |
Msg_Length | 1 | Unsigned Integer | 信息长度(Msg_Fmt值为0时:<160个字节;其它<=140个字节),取值大于或等于0。 |
Msg_Content | Msg_length | Octet String | 信息内容 |
LinkID | 20 | Octet String | 点播业务使用的LinkID,非点播类业务的MT流程不使用该字段。 |
5.2 CMPP_SUBMIT_RESP消息定义(ISMG ->SP)
字段名 | 字节数 | 属性 | 描述 |
---|---|---|---|
Msg_Id | 8 | Unsigned Integer | 信息标识,生成算法如下:采用64位(8字节)的整数: (1)时间(格式为MMDDHHMMSS,即月日时分秒): bit64~bit39 ,其中 bit64~bit61 :月份的二进制表示;bit60~bit56 :日的二进制表示;bit55~bit51 :小时的二进制表示;bit50~bit45 :分的二进制表示;bit44~bit39 :秒的二进制表示;(2)短信网关代码: bit38~bit17 ,把短信网关的代码转换为整数填写到该字段中;(3)序列号: bit16~bit1 ,顺序增加,步长为1,循环使用。各部分如不能填满,左补零,右对齐。(SP根据请求和应答消息的Sequence_Id一致性就可得到CMPP_Submit消息的Msg_Id) |
Result | 4 | Unsigned Integer | 结果: 0:正确;1:消息结构错;2:命令字错; 3:消息序号重复;4:消息长度错;5:资费错; 6:超过最大信息长;7:业务代码错;8:流量控制错; 9:本网关不负责服务此计费号码;10:Src_Id错误; 11:Msg_src错误;12:Fee_terminal_Id错误; 13:Dest_terminal_Id错误 |
⑥ SP向ISMG查询发送短信状态(CMPP_QUERY)操作
CMPP_QUERY操作的目的是SP向ISMG查询某时间的业务统计情况,可以按总数或按业务代码查询。ISMG以CMPP_QUERY_RESP应答。
6.1 CMPP_QUERY消息的定义(SP->ISMG)
字段名 | 字节数 | 属性 | 描述 |
---|---|---|---|
Time | 8 | Octet String | 时间YYYYMMDD(精确至日)。 |
Query_Type | 1 | Unsigned Integer | 查询类别:0:总数查询;1:按业务类型查询。 |
Query_Code | 10 | Octet String | 查询码。当Query_Type为0时,此项无效; 当Query_Type为1时,此项填写业务类型Service_Id.。 |
Reserve | 8 | Octet String | 保留。 |
6.2 CMPP_QUERY_RESP消息的定义(ISMG->SP)
字段名 | 字节数 | 属性 | 描述 |
---|---|---|---|
Time | 8 | Octet String | 时间(精确至日)。 |
Query_Type | 1 | Unsigned Integer | 查询类别:0:总数查询;1:按业务类型查询。 |
Query_Code | 10 | Octet String | 查询码。 |
MT_TLMsg | 4 | Unsigned Integer | 从SP接收信息总数。 |
MT_Tlusr | 4 | Unsigned Integer | 从SP接收用户总数。 |
MT_Scs | 4 | Unsigned Integer | 成功转发数量。 |
MT_WT | 4 | Unsigned Integer | 待转发数量。 |
MT_FL | 4 | Unsigned Integer | 转发失败数量。 |
MO_Scs | 4 | Unsigned Integer | 向SP成功送达数量。 |
MO_WT | 4 | Unsigned Integer | 向SP待送达数量。 |
MO_FL | 4 | Unsigned Integer | 向SP送达失败数量。 |
⑦ ISMG向SP送交短信(CMPP_DELIVER)操作
CMPP_DELIVER操作的目的是ISMG把从短信中心(SMSC)或其它ISMG转发来的短信送交SP,SP以CMPP_DELIVER_RESP消息回应。
7.1 CMPP_DELIVER消息定义(ISMG->SP)
字段名 | 字节数 | 属性 | 描述 |
---|---|---|---|
Msg_Id | 8 | Unsigned Integer | 信息标识。生成算法如下:采用64位(8字节)的整数: (1)时间(格式为MMDDHHMMSS,即月日时分秒): bit64~bit39 ,其中bit64~bit61 :月份的二进制表示;bit60~bit56 :日的二进制表示;bit55~bit51 :小时的二进制表示bit50~bit45 :分的二进制表示;bit44~bit39 :秒的二进制表示;(2)短信网关代码: bit38~bit17 ,把短信网关的代码转换为整数填写到该字段中;(3)序列号 bit16~bit1 ,顺序增加,步长为1,循环使用。各部分如不能填满,左补零,右对齐。 |
Dest_Id | 21 | Octet String | 目的号码。SP的服务代码,或者是前缀为服务代码的长号码; 该号码是手机用户短消息的被叫号码。 |
Service_Id | 10 | Octet String | 业务标识,是数字、字母和符号的组合。 |
TP_pid | 1 | Unsigned Integer | GSM协议类型。详细解释请参考GSM03.40中的9.2.3.9。 |
TP_udhi | 1 | Unsigned Integer | GSM协议类型。详细解释请参考GSM03.40中的9.2.3.23,仅使用1位,右对齐。 |
Msg_Fmt | 1 | Unsigned Integer | 信息格式:0:ASCII串;3:短信写卡操作;4:二进制信息;8:UCS2编码;15:含GB汉字。 |
Src_terminal_Id | 32 | Octet String | 源终端MSISDN号码(状态报告时填为CMPP_SUBMIT消息的目的终端号码)。 |
Src_terminal_type | 1 | Unsigned Integer | 源终端号码类型,0:真实号码;1:伪码。 |
Registered_Delivery | 1 | Unsigned Integer | 是否为状态报告:0:非状态报告;1:状态报告。 |
Msg_Length | 1 | Unsigned Integer | 消息长度,取值大于或等于0。 |
Msg_Content | Msg_length | Octet String | 消息内容。 |
LinkID | 20 | Octet String | 点播业务使用的LinkID,非点播类业务的MT流程不使用该字段。 |
当ISMG向SP送交状态报告时,信息内容字段(Msg_Content)格式定义如下:
字段名 | 字节数 | 属性 | 描述 |
---|---|---|---|
Msg_Id | 8 | Unsigned Integer | 信息标识。SP提交短信(CMPP_SUBMIT)操作时, 与SP相连的ISMG产生的Msg_Id。 |
Stat | 7 | Octet String | 发送短信的应答结果,含义详见表一。 SP根据该字段确定CMPP_SUBMIT消息的处理状态。 |
Submit_time | 10 | Octet String | YYMMDDHHMM(YY为年的后两位00-99,MM:01-12,DD:01-31,HH:00-23,MM:00-59)。 |
Done_time | 10 | Octet String | YYMMDDHHMM。 |
Dest_terminal_Id | 32 | Octet String | 目的终端MSISDN号码(SP发送CMPP_SUBMIT消息的目标终端)。 |
SMSC_sequence | 4 | Unsigned Integer | 取自SMSC发送状态报告的消息体中的消息标识。 |
ISMG向SP送交状态报告中的STAT字段含义:发送短信的应答结果。SP根据该字段确定CMPP_SUBMIT消息的处理状态。
Stat字段含义如下表所示:
Message State | Final Message States | Description |
---|---|---|
DELIVERED | DELIVRD | Message is delivered to destination |
EXPIRED | EXPIRED | Message validity period has expired |
DELETED | DELETED | Message has been deleted. |
UNDELIVERABLE | UNDELIV | Message is undeliverable |
ACCEPTED | ACCEPTD | Message is in accepted state(i.e. has been manually read on behalf of the subscriber by customer service) |
UNKNOWN | UNKNOWN | Message is in invalid state |
REJECTED | REJECTD | Message is in a rejected state |
MA:xxxx | MA:xxxx | SMSC不返回响应消息时的状态报告 |
MB:xxxx | MB:xxxx | SMSC返回错误响应消息时的状态报告 |
MC:xxxx | MC:xxxx | 没有从SMSC处接收到状态报告时的状态报告 |
CA:xxxx | CA:xxxx | SCP不返回响应消息时的状态报告 |
CB:xxxx | CB:xxxx | SCP返回错误响应消息时的状态报告 |
DA:xxxx | DA:xxxx | DSMP不返回响应消息时的状态报告 |
DB:xxxx | DB:xxxx | DSMP返回错误响应消息时的状态报告 |
SA:xxxx | SA:xxxx | SP不返回响应消息时的状态报告 |
SB:xxxx | SB:xxxx | SP返回错误响应消息时的状态报告 |
IA:xxxx | IA:xxxx | 下一级ISMG不返回响应消息时的状态报告 |
IB:xxxx | IB:xxxx | 下一级ISMG返回错误响应消息时的状态报告 |
IC:xxxx | IC:xxxx | 没有从下一级ISMG处接收到状态报告时的状态报告 |
注意:
- 其中ACCEPTED为中间状态,网关若从短信中心收到后应丢弃,不做任何操作;
- Stat字段长度为7个字节,填写时应填上表中Final Message States中的缩写形式,如状态为DELIVERED时填写DELIVRD,依此类推;
- SP等待状态报告缺省时间为48小时。
7.2 CMPP_DELIVER_RESP消息定义(SP -> ISMG)
字段名 | 字节数 | 属性 | 描述 |
---|---|---|---|
Msg_Id | 8 | Unsigned Integer | 信息标识(CMPP_DELIVER中的Msg_Id字段)。 |
Result | 4 | Unsigned Integer | 结果: 0:正确;1:消息结构错; 2:命令字错; 3:消息序号重复; 4:消息长度错;5:资费错; 6:超过最大信息长;7:业务代码错; 8: 流量控制错;9~ :其他错误。 |
⑧ SP向ISMG发起删除短信(CMPP_CANCEL)操作
CMPP_CANCEL操作的目的是SP通过此操作可以将已经提交给ISMG的短信删除,ISMG将以CMPP_CANCEL_RESP回应删除操作的结果。
8.1 CMPP_CANCEL消息定义(SP->ISMG)
字段名 | 字节数 | 属性 | 描述 |
---|---|---|---|
Msg_Id | 8 | Unsigned Integer | 信息标识(SP想要删除的信息标识)。 |
8.2 CMPP_CANCEL_RESP消息定义(ISM->SP)
字段名 | 字节数 | 属性 | 描述 |
---|---|---|---|
Success_Id | 4 | Unsigned Integer | 成功标识。0:成功;1:失败。 |
⑨ 链路检测(CMPP_ACTIVE_TEST)操作
本操作仅适用于通信双方采用长连接通信方式时用于保持连接。
CMPP_ACTIVE_TEST定义(SP-> ISMG或ISMG->SP)无消息体。
CMPP_ACTIVE_TEST_RESP定义(SP ->ISMG或ISMG->SP)
字段名 | 字节数 | 属性 | 描述 |
---|---|---|---|
Reserved | 1 |
【5】状态码实例
① Stat状态码实例
状态码 | 说明 |
---|---|
DELIVRD | 消息发送成功 |
EXPIRED | 表示因为用户长时间关机或者不在服务区等导致的短信息超时没有递交到用户手机上 |
REJECTD | 消息因为某些原因被拒绝 |
UNDELIV | 表示全球通用户因为状态不正确如处于停机、挂起等状态而导致的用户无法享受服务 |
MC:xxxx | 系统未从短信中心接收到状态报告 |
MC:xxxx | 没有从SMSC处接收到状态报告时的状态报告 |
MI:xxxx | 同“EXPIRED” |
MN:xxxx | 同“REJECTD” |
MB:0066 | 短信中心回的,超作最大发送次数 可能是手机满了。 |
MK:0015 | 可能是手机满了。 |
MK:xxxx | 同“UNDELIV” |
② 管理平台DSMP返回的错误
状态码 | 说明 |
---|---|
DB:0100 | 手机号码不存在 |
DB:0101 | 手机号码错误 |
DB:0102 | 用户停机 用户冲值后,要主动上行一条信息到SP,才能激活用户的短信接收服务 |
DB:0103 | 用户欠费 |
DB:0104 | 用户没有使用该业务的权限 |
DB:0105 | 业务代码错误 |
DB:0106 | 服务代码错误 |
DB:0107 | 业务不存在 |
DB:0108 | 该业务暂停服务 |
DB:0109 | 该服务种类不存在 |
DB:0110 | 该服务种类尚未开通 |
DB:0111 | 该业务尚未开通 |
DB:0112 | SP代码错误 |
DB:0113 | SP不存在 |
DB:0114 | SP暂停服务 |
DB:0115 | 用户没有定购该业务 |
DB:0116 | 用户暂停定购该业务 |
DB:0117 | 该业务不能对该用户开放 |
DB:0118 | 用户已经订购了该业务 |
DB:0119 | 用户不能取消该业务 |
DB:0120 | 话单格式错误 |
DB:0121 | 没有该类业务 |
DB:0122 | 接收异常 |
DB:0123 | 业务价格为负 |
DB:0124 | 业务价格格式错误 |
DB:0125 | 业务价格超出范围 |
DB:0126 | 该用户不是神州行用户 |
DB:0127 | 该用户没有足够的余额 |
DB:0128 | 补款,冲正失败 |
DB:0129 | 用户已经是梦网用户 |
DB:0130 | 用户在BOSS中没有相关用户数据 |
DB:0131 | BOSS系统数据同步出错 |
DB:0132 | 相关信息不存在 |
DB:0133 | 用户数据同步出错 |
DB:0134 | SP数据同步出错 |
DB:0135 | 业务数据同步出错 |
DB:0136 | 用户密码错误 |
DB:0137 | 伪码信息错误 |
DB:0138 | 用户相关信息不存在 |
DB:0140 | 用户未点播该业务 |
DB:9001 | 网络异常 |
DB:9007 | 业务网关超过限制的流量 |
③ SCP返回的错误
状态码 | 说明 |
---|---|
CA:0051 | 尚未建立连接 移动内部错误 不处理 |
CA:0052 | 尚未成功登录 移动内部错误 不处理 |
CA:0054 | 超时未接收到响应消息 移动内部错误 不处理 |
CA:0111 | SCP厂家自定义的错误码 移动内部错误 不处理 |
CB:0001 | 非神州行预付费用户 号码无效或者空号 清除订购关系 |
CB:0002 | 数据库操作失败 |
CB:0005 | 移动用户帐户数据异常(包括未头次使用、储值卡被封锁、储值卡进入保留期、储值卡挂失) |
CB:0007 | 用户余额不足 不能扣费,影响包月话单 连续两个月扣费不成功,清除订购关系 |
CB:0016 | 参数错误 移动内部错误 不处理 |
CB:0018 | 重复发送消息序列号msgid相同的计费请求消息 移动内部错误 不处理 |
CB:0022 | SCP互联失败 移动内部错误 不处理 |
CB:0047 | 过期用户或者用户不支持梦网业务 清除订购关系 |
CB:0053 | 梦网用户不存在 号码无效或者空号 清除订购关系 |
④ 下一级短信网关ISMG返回的错误
状态码 | 说明 |
---|---|
IB:0008 | 流量控制错 移动内部错误 不处理 |
IB:0009 | 前转判断错误 移动内部错误 不处理 |
IB:0070 | 网络断连或者目的设备关闭端口 移动内部错误 不处理 |
IB:0100 | 移动内部错误 不处理 |
IB:0113 | 移动内部错误 不处理 |
IB:0255 | 移动内部错误 不处理 |
IC:0154 | 移动内部错误 不处理 |
⑤ 短信中心SMSC返回的错误
状态码 | 说明 |
---|---|
MA:0051 | 尚未建立连接 移动内部错误 不处理 |
MA:0054 | 超时未接收到响应消息 移动内部错误 不处理 |
MA:0191 | SMSC厂家自定义的错误码 移动内部错误 不处理 |
MB:0019 | 移动内部错误 不处理 |
MB:0020 | 无效的SYSTEMID 移动内部错误 不处理 |
MB:0065 | 目的地址错误 移动内部错误 不处理 |
MB:0066 | 无效的定时时间 移动内部错误 不处理 |
MB:0070 | 移动内部错误 不处理 |
MB:0077 | 移动内部错误 不处理 |
MB:0088 | 移动内部错误 不处理 |
MB:0145 | SMSC厂家自定义的错误码 移动内部错误 不处理 |
MB:0147 | SMSC厂家自定义的错误码 移动内部错误 不处理 |
MB:0192 | SMSC厂家自定义的错误码 移动内部错误 不处理 |
MB:0193 | SMSC厂家自定义的错误码 移动内部错误 不处理 |
MB:0241 | SMSC厂家自定义的错误码 移动内部错误 不处理 |
MB:0244 | SMSC厂家自定义的错误码 移动内部错误 不处理 |
MB:0250 | SMSC厂家自定义的错误码 移动内部错误 不处理 |
MB:4024 | 移动内部错误 不处理 |
MB:4025 | 移动内部错误 不处理 |
MC:0015 | 移动内部错误 不处理 |
MC:0021 | 移动内部错误 不处理 |
MC:0055 | 移动内部错误 不处理 |
MC:0151 | 移动内部错误 不处理 |
MC:0199 | 移动内部错误 不处理 |
MH:0000 | 移动内部错误 不处理 |
MI:0000 | 移动内部错误 不处理 |
MI:0008 | 移动内部错误 不处理 |
MI:0013 | 移动内部错误 不处理 |
MI:0022 | 移动内部错误 不处理 |
MI:0024 | 移动内部错误 不处理 |
MI:0029 | 移动内部错误 不处理 |
MI:0036 | 移动内部错误 不处理 |
MI:0045 | 移动内部错误 不处理 |
MI:0057 | 移动内部错误 不处理 |
MI:0255 | 移动内部错误 不处理 |
MJ:0000 | 移动内部错误 不处理 |
MK:0000 | 移动内部错误 不处理 |
MK:0001 | 移动内部错误 不处理 |
MK:0008 | 移动内部错误 不处理 |
MK:0009 | 移动内部错误 不处理 |
MK:0011 | 移动内部错误 不处理 |
MK:0013 | 移动内部错误 不处理 |
MK:0022 | 移动内部错误 不处理 |
MK:0029 | 移动内部错误 不处理 |
MK:0036 | 移动内部错误 不处理 |
MK:0053 | 移动内部错误 不处理 |
MK:0057 | 移动内部错误 不处理 |
MK:0255 | 移动内部错误 不处理 |
【6】Command_Id说明
消息 | Command_Id值 | 说明 |
---|---|---|
CMPP_CONNECT | 0x00000001 | 请求连接 |
CMPP_CONNECT_RESP | 0x80000001 | 请求连接应答 |
CMPP_TERMINATE | 0x00000002 | 终止连接 |
CMPP_TERMINATE_RESP | 0x80000002 | 终止连接应答 |
CMPP_SUBMIT | 0x00000004 | 提交短信 |
CMPP_SUBMIT_RESP | 0x80000004 | 提交短信应答 |
CMPP_DELIVER | 0x00000005 | 短信下发 |
CMPP_DELIVER_RESP | 0x80000005 | 下发短信应答 |
CMPP_QUERY | 0x00000006 | 发送短信状态查询 |
CMPP_QUERY_RESP | 0x80000006 | 发送短信状态查询应答 |
CMPP_CANCEL | 0x00000007 | 删除短信 |
CMPP_CANCEL_RESP | 0x80000007 | 删除短信应答 |
CMPP_ACTIVE_TEST | 0x00000008 | 激活测试 |
CMPP_ACTIVE_TEST_RESP | 0x80000008 | 激活测试应答 |
CMPP_FWD | 0x00000009 | 消息前转 |
CMPP_FWD_RESP | 0x80000009 | 消息前转应答 |
CMPP_MT_ROUTE | 0x00000010 | MT路由请求 |
CMPP_MT_ROUTE_RESP | 0x80000010 | MT路由请求应答 |
CMPP_MO_ROUTE | 0x00000011 | MO路由请求 |
CMPP_MO_ROUTE_RESP | 0x80000011 | MO路由请求应答 |
CMPP_GET_MT_ROUTE | 0x00000012 | 获取MT路由请求 |
CMPP_GET_MT_ROUTE_RESP | 0x80000012 | 获取MT路由请求应答 |
CMPP_MT_ROUTE_UPDATE | 0x00000013 | MT路由更新 |
CMPP_MT_ROUTE_UPDATE_RESP | 0x80000013 | MT路由更新应答 |
CMPP_MO_ROUTE_UPDATE | 0x00000014 | MO路由更新 |
CMPP_MO_ROUTE_UPDATE_RESP | 0x80000014 | MO路由更新应答 |
CMPP_PUSH_MT_ROUTE_UPDATE | 0x00000015 | MT路由更新 |
CMPP_PUSH_MT_ROUTE_UPDATE_RESP | 0x80000015 | MT路由更新应答 |
CMPP_PUSH_MO_ROUTE_UPDATE | 0x00000016 | MO路由更新 |
CMPP_PUSH_MO_ROUTE_UPDATE_RESP | 0x80000016 | MO路由更新应答 |
CMPP_GET_MO_ROUTE | 0x00000017 | 获取MO路由请求 |
CMPP_GET_MO_ROUTE_RESP | 0x80000017 | 获取MO路由请求应答 |
【7】封装CMPP3.0中遇到的一些实际问题
这里用的是移动的云mas,移动云mas首先要申请账号,移动政企申请后会把账号、密码和EC name(企业名称)发给你,然后你需要登录http://mas.10086.cn/login 页面后台,进行一系列操作。
CMPP3.0 移动云MAS接口地址:112.35.10.165:1991 这个分别对应ismgIp和ismgPort。就是短信网关的ip和端口。
然后,通常你需要在“管理”-“接口管理”中新建接口:
① CMPP_CONNECT参数
这里需要用到的参数有Source_Addr,Shared secret,Version和Timestamp。CMPP3.0中Version为0x30,Timestamp这个是时间戳,这两个不用再说。
那么Source_Addr,Shared secret究竟是什么?看接口文档给的文字定义并没有给实例,不免让人一头雾水。
如上面图中红字标注,此处的Source_Addr就是SP_Id,就是你申请接口时的用户名!Shared secret则是你申请接口时填写的密码!
② CMPP_SUBMIT中几个参数
Service_Id ,就是你的签名编码。
Msg_src,就是sp_id,就是你申请接口时候的用户名。
Src_Id,就是服务代码,这个和Service_Id同样可以在“管理”–“EC管理”里面看到。
至此,封装CMPP3.0时用到的几个核心参数就分析完了:
cmpp:
ismgIp: 短信网关IP
ismgPort: 短信网关端口
spId: 申请接口的用户名
sharedSecret: 申请接口的密码
spCode: 服务代码
version: 0x30--CMPP3.0是这个
serviceId: 签名
③ 长连接与短连接
如果你每次请求都创建新的客户端与远程连接,那么不用做CMPP_ACTIVE_TEST。否则的话 ,你需要进行CMPP_ACTIVE_TEST操作。
你应该以某个间隔,周期性的向短信网关发送CMPP_ACTIVE_TEST,短信网关会返回一个CMPP_ACTIVE_TEST_RESP。否则短信网关会自动断开连接。也就是说,你需要写一个定时器,固定间隔执行CMPP_ACTIVE_TEST操作。
④ 应用签名问题
如下所示:
应用签名就是免签名,就是需要手动在短信内容开头(结尾也可以,建议开头)拼接签名,如【河南社保】
。否则的话,回执状态中会提示签名为空导致短信发送失败。至于签名是什么,这个自己看云MAS管理后台就知道了,实在不知道问移动云MAS客户经理。
应用签名(免签名)需要客户经理走流程申请网关删除签名,本网签名也要删除。这样在发送短信的时候只需要在短信内容开头拼接短信签名就OK。
如下所示:
【河南社保】短信验证码:458932
业务场景:比如不同机构调用你的短信接口,不同机构使用不同的签名。
⑤ CMPP_DELIVER与短信发送状态
CMPP_DELIVER操作的目的是ISMG把从短信中心或其它ISMG转发来的短信送交SP,SP以CMPP_DELIVER_RESP消息回应。这是云MAS接口文档的原话,其实翻译成白话就是–短信发送状态!(而非短信提交状态,与CMPP_SUBMIT区别)。
也就是说,如果你要想监控短信发送状态,或者记录短信发送状态,就应该监控 CMPP_DELIVER!短信发送状态主要内容对应字段为Msg_Content,是一个对象,具体参考云mas cmpp3.0接口文档。