云MAS中CMPP3.0协议封装与移动短信状态报告状态码说明

【1】几个术语

英文缩写英文全称说明
ISMGIntenet Short Message Gateway互联网短信网关
DSMPData Service Manage Platform数据业务管理平台
SMPPShort Message Peer to Peer短消息点对点协议
CMPPChina Mobile Peer to Peer中国移动点对点协议
SMSCShort Message Service Center短消息中心
GNSGateway Name Server网关名称服务器(汇接网关)
SPService 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_Length4Unsigned Integer消息总长度(含消息头及消息体)
Command_Id4Unsigned Integer命令或响应类型
Sequence_Id4Unsigned 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_Addr6Octet String源地址,此处为SP_Id,即SP的企业代码。
AuthenticatorSource16Octet String用于鉴别源地址。其值通过单向MD5 hash计算得出,表示如下:AuthenticatorSource =MD5(Source_Addr+9 字节的0 +shared secret+timestamp)
Shared secret 由中国移动与源地址实体事先商定,timestamp格式为:MMDDHHMMSS,即月日时分秒,10位。
Version1Unsigned Integer双方协商的版本号(高位4bit表示主版本号,低位4bit表示次版本号),对于3.0的版本,高4bit为3,低4位为0
Timestamp4Unsigned Integer时间戳的明文,由客户端产生,格式为MMDDHHMMSS,即月日时分秒,10位数字的整型,右对齐 。

3.2 CMPP_CONNECT_RESP消息定义(ISMG->SP)

字段名字节数属性描述
Status4Unsigned Integer状态 0:正确 1:消息结构错
2:非法源地址 3:认证错
4:版本太高 5~ :其他错误
AuthenticatorISMG16Octet StringISMG认证码,用于鉴别ISMG。
其值通过单向MD5 hash计算得出,表示如下:AuthenticatorISMG=MD5(Status+AuthenticatorSource+shared secret),
Shared secret 由中国移动与源地址实体事先商定,AuthenticatorSource为源地址实体发送给ISMG的对应消息CMPP_Connect中的值。 认证出错时,此项为空。
Version1Unsigned 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_Id8Unsigned Integer信息标识。
Pk_total1Unsigned Integer相同Msg_Id的信息总条数,从1开始。
Pk_number1Unsigned Integer相同Msg_Id的信息序号,从1开始。
Registered_Delivery1Unsigned Integer是否要求返回状态确认报告:
0:不需要;1:需要。
Msg_level1Unsigned Integer信息级别。
Service_Id10Octet String业务标识,是数字、字母和符号的组合。
Fee_UserType1Unsigned Integer计费用户类型字段:
0:对目的终端MSISDN计费;
1:对源终端MSISDN计费;
2:对SP计费;
3:表示本字段无效,对谁计费参见Fee_terminal_Id字段。
Fee_terminal_Id32Octet String被计费用户的号码,当Fee_UserType为3时该值有效,当Fee_UserType为0、1、2时该值无意义。
Fee_terminal_type1Unsigned Integer被计费用户的号码类型,
0:真实号码;1:伪码。
TP_pId1Unsigned IntegerGSM协议类型。详细是解释请参考GSM03.40中的9.2.3.9。
TP_udhi1Unsigned IntegerGSM协议类型。详细是解释请参考GSM03.40中的9.2.3.23,仅使用1位,右对齐。
Msg_Fmt1Unsigned Integer信息格式:0:ASCII串;3:短信写卡操作;4:二进制信息;8:UCS2编码;
15:含GB汉字。。。。。。
Msg_src6Octet String信息内容来源(SP_Id)。
FeeType2Octet String资费类别:01:对“计费用户号码”免费;
02:对“计费用户号码”按条计信息费;
03:对“计费用户号码”按包月收取信息费。
FeeCode6Octet String资费(以分为单位)。
ValId_Time17Octet String存活有效期,格式遵循SMPP3.3协议。
At_Time17Octet String定时发送时间,格式遵循SMPP3.3协议。
Src_Id21Octet String源号码。SP的服务代码或前缀为服务代码的长号码, 网关将该号码完整的填到SMPP协议Submit_SM消息相应的source_addr字段,该号码最终在用户手机上显示为短消息的主叫号码。
DestUsr_tl1Unsigned Integer接收信息的用户数量(小于100个用户)。
Dest_terminal_Id32*DestUsr_tlOctet String接收短信的MSISDN号码。
Dest_terminal_type1Unsigned Integer接收短信的用户的号码类型,
0:真实号码;1:伪码。
Msg_Length1Unsigned Integer信息长度(Msg_Fmt值为0时:<160个字节;其它<=140个字节),取值大于或等于0。
Msg_ContentMsg_lengthOctet String信息内容
LinkID20Octet String点播业务使用的LinkID,非点播类业务的MT流程不使用该字段。

5.2 CMPP_SUBMIT_RESP消息定义(ISMG ->SP)

字段名字节数属性描述
Msg_Id8Unsigned 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)
Result4Unsigned 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)

字段名字节数属性描述
Time8Octet String时间YYYYMMDD(精确至日)。
Query_Type1Unsigned Integer查询类别:0:总数查询;1:按业务类型查询。
Query_Code10Octet String查询码。当Query_Type为0时,此项无效;
当Query_Type为1时,此项填写业务类型Service_Id.。
Reserve8Octet String保留。

6.2 CMPP_QUERY_RESP消息的定义(ISMG->SP)

字段名字节数属性描述
Time8Octet String时间(精确至日)。
Query_Type1Unsigned Integer查询类别:0:总数查询;1:按业务类型查询。
Query_Code10Octet String查询码。
MT_TLMsg4Unsigned Integer从SP接收信息总数。
MT_Tlusr4Unsigned Integer从SP接收用户总数。
MT_Scs4Unsigned Integer成功转发数量。
MT_WT4Unsigned Integer待转发数量。
MT_FL4Unsigned Integer转发失败数量。
MO_Scs4Unsigned Integer向SP成功送达数量。
MO_WT4Unsigned Integer向SP待送达数量。
MO_FL4Unsigned Integer向SP送达失败数量。

⑦ ISMG向SP送交短信(CMPP_DELIVER)操作

CMPP_DELIVER操作的目的是ISMG把从短信中心(SMSC)或其它ISMG转发来的短信送交SP,SP以CMPP_DELIVER_RESP消息回应。

7.1 CMPP_DELIVER消息定义(ISMG->SP)

字段名字节数属性描述
Msg_Id8Unsigned 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_Id21Octet String目的号码。SP的服务代码,或者是前缀为服务代码的长号码;
该号码是手机用户短消息的被叫号码。
Service_Id10Octet String业务标识,是数字、字母和符号的组合。
TP_pid1Unsigned IntegerGSM协议类型。详细解释请参考GSM03.40中的9.2.3.9。
TP_udhi1Unsigned IntegerGSM协议类型。详细解释请参考GSM03.40中的9.2.3.23,仅使用1位,右对齐。
Msg_Fmt1Unsigned Integer信息格式:0:ASCII串;3:短信写卡操作;4:二进制信息;8:UCS2编码;15:含GB汉字。
Src_terminal_Id32Octet String源终端MSISDN号码(状态报告时填为CMPP_SUBMIT消息的目的终端号码)。
Src_terminal_type1Unsigned Integer源终端号码类型,0:真实号码;1:伪码。
Registered_Delivery1Unsigned Integer是否为状态报告:0:非状态报告;1:状态报告。
Msg_Length1Unsigned Integer消息长度,取值大于或等于0。
Msg_ContentMsg_lengthOctet String消息内容。
LinkID20Octet String点播业务使用的LinkID,非点播类业务的MT流程不使用该字段。

当ISMG向SP送交状态报告时,信息内容字段(Msg_Content)格式定义如下:

字段名字节数属性描述
Msg_Id8Unsigned Integer信息标识。SP提交短信(CMPP_SUBMIT)操作时,
与SP相连的ISMG产生的Msg_Id。
Stat7Octet String发送短信的应答结果,含义详见表一。
SP根据该字段确定CMPP_SUBMIT消息的处理状态。
Submit_time10Octet StringYYMMDDHHMM(YY为年的后两位00-99,MM:01-12,DD:01-31,HH:00-23,MM:00-59)。
Done_time10Octet StringYYMMDDHHMM。
Dest_terminal_Id32Octet String目的终端MSISDN号码(SP发送CMPP_SUBMIT消息的目标终端)。
SMSC_sequence4Unsigned Integer取自SMSC发送状态报告的消息体中的消息标识。

ISMG向SP送交状态报告中的STAT字段含义:发送短信的应答结果。SP根据该字段确定CMPP_SUBMIT消息的处理状态。

Stat字段含义如下表所示:

Message StateFinal Message StatesDescription
DELIVEREDDELIVRDMessage is delivered to destination
EXPIREDEXPIREDMessage validity period has expired
DELETEDDELETEDMessage has been deleted.
UNDELIVERABLEUNDELIVMessage is undeliverable
ACCEPTEDACCEPTDMessage is in accepted state(i.e. has been manually read on behalf of the subscriber by customer service)
UNKNOWNUNKNOWNMessage is in invalid state
REJECTEDREJECTDMessage is in a rejected state
MA:xxxxMA:xxxxSMSC不返回响应消息时的状态报告
MB:xxxxMB:xxxxSMSC返回错误响应消息时的状态报告
MC:xxxxMC:xxxx没有从SMSC处接收到状态报告时的状态报告
CA:xxxxCA:xxxxSCP不返回响应消息时的状态报告
CB:xxxxCB:xxxxSCP返回错误响应消息时的状态报告
DA:xxxxDA:xxxxDSMP不返回响应消息时的状态报告
DB:xxxxDB:xxxxDSMP返回错误响应消息时的状态报告
SA:xxxxSA:xxxxSP不返回响应消息时的状态报告
SB:xxxxSB:xxxxSP返回错误响应消息时的状态报告
IA:xxxxIA:xxxx下一级ISMG不返回响应消息时的状态报告
IB:xxxxIB:xxxx下一级ISMG返回错误响应消息时的状态报告
IC:xxxxIC:xxxx没有从下一级ISMG处接收到状态报告时的状态报告

注意:

  • 其中ACCEPTED为中间状态,网关若从短信中心收到后应丢弃,不做任何操作;
  • Stat字段长度为7个字节,填写时应填上表中Final Message States中的缩写形式,如状态为DELIVERED时填写DELIVRD,依此类推;
  • SP等待状态报告缺省时间为48小时。

7.2 CMPP_DELIVER_RESP消息定义(SP -> ISMG)

字段名字节数属性描述
Msg_Id8Unsigned Integer信息标识(CMPP_DELIVER中的Msg_Id字段)。
Result4Unsigned 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_Id8Unsigned Integer信息标识(SP想要删除的信息标识)。

8.2 CMPP_CANCEL_RESP消息定义(ISM->SP)

字段名字节数属性描述
Success_Id4Unsigned Integer成功标识。0:成功;1:失败。

⑨ 链路检测(CMPP_ACTIVE_TEST)操作

本操作仅适用于通信双方采用长连接通信方式时用于保持连接。

CMPP_ACTIVE_TEST定义(SP-> ISMG或ISMG->SP)无消息体。

CMPP_ACTIVE_TEST_RESP定义(SP ->ISMG或ISMG->SP)

字段名字节数属性描述
Reserved1

【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:0112SP代码错误
DB:0113SP不存在
DB:0114SP暂停服务
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:0131BOSS系统数据同步出错
DB:0132相关信息不存在
DB:0133用户数据同步出错
DB:0134SP数据同步出错
DB:0135业务数据同步出错
DB:0136用户密码错误
DB:0137伪码信息错误
DB:0138用户相关信息不存在
DB:0140用户未点播该业务
DB:9001网络异常
DB:9007业务网关超过限制的流量

③ SCP返回的错误

状态码说明
CA:0051尚未建立连接 移动内部错误 不处理
CA:0052尚未成功登录 移动内部错误 不处理
CA:0054超时未接收到响应消息 移动内部错误 不处理
CA:0111SCP厂家自定义的错误码 移动内部错误 不处理
CB:0001非神州行预付费用户 号码无效或者空号 清除订购关系
CB:0002数据库操作失败
CB:0005移动用户帐户数据异常(包括未头次使用、储值卡被封锁、储值卡进入保留期、储值卡挂失)
CB:0007用户余额不足 不能扣费,影响包月话单 连续两个月扣费不成功,清除订购关系
CB:0016参数错误 移动内部错误 不处理
CB:0018重复发送消息序列号msgid相同的计费请求消息 移动内部错误 不处理
CB:0022SCP互联失败 移动内部错误 不处理
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:0191SMSC厂家自定义的错误码 移动内部错误 不处理
MB:0019移动内部错误 不处理
MB:0020无效的SYSTEMID 移动内部错误 不处理
MB:0065目的地址错误 移动内部错误 不处理
MB:0066无效的定时时间 移动内部错误 不处理
MB:0070移动内部错误 不处理
MB:0077移动内部错误 不处理
MB:0088移动内部错误 不处理
MB:0145SMSC厂家自定义的错误码 移动内部错误 不处理
MB:0147SMSC厂家自定义的错误码 移动内部错误 不处理
MB:0192SMSC厂家自定义的错误码 移动内部错误 不处理
MB:0193SMSC厂家自定义的错误码 移动内部错误 不处理
MB:0241SMSC厂家自定义的错误码 移动内部错误 不处理
MB:0244SMSC厂家自定义的错误码 移动内部错误 不处理
MB:0250SMSC厂家自定义的错误码 移动内部错误 不处理
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_CONNECT0x00000001请求连接
CMPP_CONNECT_RESP0x80000001请求连接应答
CMPP_TERMINATE0x00000002终止连接
CMPP_TERMINATE_RESP0x80000002终止连接应答
CMPP_SUBMIT0x00000004提交短信
CMPP_SUBMIT_RESP0x80000004提交短信应答
CMPP_DELIVER0x00000005短信下发
CMPP_DELIVER_RESP0x80000005下发短信应答
CMPP_QUERY0x00000006发送短信状态查询
CMPP_QUERY_RESP0x80000006发送短信状态查询应答
CMPP_CANCEL0x00000007删除短信
CMPP_CANCEL_RESP0x80000007删除短信应答
CMPP_ACTIVE_TEST0x00000008激活测试
CMPP_ACTIVE_TEST_RESP0x80000008激活测试应答
CMPP_FWD0x00000009消息前转
CMPP_FWD_RESP0x80000009消息前转应答
CMPP_MT_ROUTE0x00000010MT路由请求
CMPP_MT_ROUTE_RESP0x80000010MT路由请求应答
CMPP_MO_ROUTE0x00000011MO路由请求
CMPP_MO_ROUTE_RESP0x80000011MO路由请求应答
CMPP_GET_MT_ROUTE0x00000012获取MT路由请求
CMPP_GET_MT_ROUTE_RESP0x80000012获取MT路由请求应答
CMPP_MT_ROUTE_UPDATE0x00000013MT路由更新
CMPP_MT_ROUTE_UPDATE_RESP0x80000013MT路由更新应答
CMPP_MO_ROUTE_UPDATE0x00000014MO路由更新
CMPP_MO_ROUTE_UPDATE_RESP0x80000014MO路由更新应答
CMPP_PUSH_MT_ROUTE_UPDATE0x00000015MT路由更新
CMPP_PUSH_MT_ROUTE_UPDATE_RESP0x80000015MT路由更新应答
CMPP_PUSH_MO_ROUTE_UPDATE0x00000016MO路由更新
CMPP_PUSH_MO_ROUTE_UPDATE_RESP0x80000016MO路由更新应答
CMPP_GET_MO_ROUTE0x00000017获取MO路由请求
CMPP_GET_MO_ROUTE_RESP0x80000017获取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接口文档。

.Net/C# 实现 移动 CMPP v3.0 ISMG SP 收发短信的 SP 客户端 (第2版)(CMPP SP Client) 增加了 CMPP Client 类本程序严格按 《移动通信企业标准》之《移动通信互联网短信网关接口协议(China Mobile Point to Point)》(版本号: 3.0.0) 即: CMPP v3.0.0 http://www.spzone.net/protocol/CMPPV3.0.rar 文档,实现了下面消息的定义及其相关协议级交互: 8.4 业务提供商 (SP) 与互联网短信网关 (ISMG) 间的消息定义 8 8.4.1 SP 请求连接到 ISMG(CMPP_CONNECT) 操作 8 8.4.1.1 CMPP_CONNECT 消息定义 (SP -> ISMG) 8 8.4.1.2 CMPP_CONNECT_RESP消息定义 (ISMG -> SP) 9 8.4.2 SP 或 ISMG 请求拆除连接 (CMPP_TERMINATE)操作 9 8.4.2.1 CMPP_TERMINATE 消息定义 (SP -> ISMG 或 ISMG -> SP) 9 8.4.2.2 CMPP_TERMINATE_RESP 消息定义 (SP -> ISMG 或 ISMG -> SP) 10 8.4.3 SP 向 ISMG提交短信 (CMPP_SUBMIT) 操作 10 8.4.3.1 CMPP_SUBMIT 消息定义 (SP -> ISMG) 10 8.4.3.2 CMPP_SUBMIT_RESP 消息定义 (ISMG -> SP) 11 8.4.5 ISMG 向 SP 送交短信 (CMPP_DELIVER) 操作 13 8.4.5.1 CMPP_DELIVER 消息定义 (ISMG -> SP) 13 8.4.5.2 CMPP_DELIVER_RESP 消息定义 (SP -> ISMG) 16 8.4.7 链路检测 (CMPP_ACTIVE_TEST) 操作 17 8.4.7.1 CMPP_ACTIVE_TEST定义 (SP -> ISMG 或 ISMG <- SP) 17 8.4.7.2 CMPP_ACTIVE_TEST_RESP定义 (SP -> ISMG 或 ISMG <- SP) 17 可采用《移动通信 CMPP v3.0 短消息网关模拟器 v1.10》进行测试: 下载于: 《北京风起水流软件工作室》 http://www.zealware.com/download/cmpp3smg.rar本程序以熟悉理解 CMPP 3.0 协议为主要目的,只将 "消息定义" 对象化,其相关协议级交互并未作更深层次的 OO! 也暂无任何错误处理程序! 消息定义的所有字段名称及其数据类型均与上述之 CMPP v3.0.0 文档完全一致! 其间参阅过 shanhe@CSDN or yexiong@cnBlogs 大作(在此鸣谢): http://blog.csdn.net/shanhe/archive/2004/07/19/45383.aspx http://cnblogs.com/yexiong/articles/115330.aspx 但其有些消息定义字节错位,因此不能正常交互?!且对象化层次较高,不利于理解协议本身! 遂自己动手,丰衣足食,实现部分主要协议(SP 收发短信):
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流烟默

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值