-1-SMPP协议3.1SMPP规范简介SMPP接口协议最初由ETSI收录在GSM03.39规范中,描述了短消息中心与短消息实体之间通信交互的协议关系及数据传输格式,本规范对SMPP接口协议的描述主要面向简单的通信交互,制定规范的厂家将其协议版本号定为V3.30;后由SMPP开发者论坛将协议版本向前演进为V3.40,SMPPV3.40协议规范完全兼容GSM03.39协议标准。本规范中,所采用的短消息中心设备与短消息股票交易业务处理平台之间的接口采用GSM03.39V3.30协议规范,如无特殊说明全部以此协议规范为准。SMPP协议可以以TCP/IP或X.25作为底层通讯承载。与SMPP协议规范相关的参考资料如下:1、《GSM03.39(Version5.0.0)》:Europeandigitalcellulartelecommunicationssystem(Phase2);InterfaceprotocolsfortheconnectionofShortMessageServiceCentres(SMSCs)toShortMessageEntities(SMEs);2、《GSM03.39(Version6.0.0)》:Europeandigitalcellulartelecommunicationssystem(Phase2+);InterfaceprotocolsfortheconnectionofShortMessageServiceCentres(SMSCs)toShortMessageEntities(SMEs);3、《GSM03.40(Version4.8.1):Europeandigitalcellulartelecommunicationssystem(Phase2);TechnicalrealizationoftheShortMessageServicePointtoPoint》4、《GSM03.38(Version5.2.0):Digitalcellulartelecommunicationssystem(Phase2+);Alphabetsandlanguage_specificinformation》5、《GSM03.47(Version5.0.0):Digitalcellulartelecommunicationssystem;Exampleprotocolstacksfor-2-interconnectingServiceCenter(SC)andMobile_servicesSwitchingCenter(s)(MSC)》6、《900/1800MHz数字蜂窝移动通信系统短消息中心设备规范(第一分册点对点短消息业务)》缩略语SME短消息实体SMPP短消息点对点协议SMSC短消息服务中心ESME扩展短消息实体3.2系统结构、功能概述通过SMPP,ESME(例如寻呼台、语音邮箱系统、股票交易业务处理平台等)能连接(Bind)或断连(UnBind)短消息中心,提交(Submit)短消息或从短消息中心下发(Deliver)。此协议包含以下两部分:*(协议)ESME到SMSC的消息*(协议)SMSC到扩展ESME的消息其中用户管理部分只适用于SMSC有用户数据库支持的情况SMSC和ESME之间的关系如下图所示:-3-图3-1:SMSC和ESME连接的短消息系统网络3.3消息协议按短消息信息的流向,可以将ESME与SMSC之间的短消息信息分为两类:1、从SMSC到ESME的消息;2、从ESME到SMSC的消息。对于所有请求消息,无论始发于ESME还是SMSC,都必须产生一个响应消息(acknowledge)。从ESME到SMSC所提交的消息,可能有两种响应:*SMSC收到消息的响应(ACK)*如果这条短消息设置了需要状态报告,那么当这条短消息到达目标地之后,SMSC会产生一个状态报告的消息给ESME。.1SMSC到ESME的消息以下消息是从SMSC到ESME的消息命令描述bind_receiver_respbind_receiver的响应,status表示连接成功与否bind_transmitter_respbind_transmitter的响应,status表示连接成功与否-4-unbind_respunbind的响应,status表示断开连接成功与否submit_sm_respsubmit_sm的响应,status表明提交短消息是否成功deliver_smSMSC下发短消息到ESMEenquire_link_respEnquire_link的响应generic_nak表示消息头有错误的响应.2ESME到SMSC的消息以下为ESME到SMSC的消息命令描述bind_receiver短消息实体(ESME/SME)作为服务器与短消息中心(SMSC)建立连接,本连接建立起来后,允许短消息实体接受短消息中心下发的短消。bind_transmitter短消息实体(ESME/SME)作为客户端与短消息中心(SMSC)建立连接,本连接建立起来后,允许短消息实体向短消息中心提交短消息。Unbind短消息实体(ESME/SME)与短消息中心系统(SMSC)断开会话连接。submit_smESME提交短消息到SMSC,以便SMSC下发此短消息到指定的移动台。deliver_sm_respdeliver_sm的响应。status表示此次下发是否成功。Enquire_link短消息实体向短消息中心发起的连路保持查询请求,以保证通讯链路的畅通。一般情况下约每5秒发送一次ENQUIRE_LINK消息。Generic_nak表示消息头有错误的响应3.4消息语法3.4.1语法定义规则在以下语法说明中,遵从以下规则:A.未使用的字段,依据类型必须设置为0或NULL。B.消息由消息头和消息体组成-5-C.状态(status)如在命令语法中未加说明0:表示成功非0:表示失败0x80000000:未定义值保留D.在类型中,可能用到以下定义integer:一定字节数所组成的整数,高位在前,低位在后。例如:1字节(BYTE),2字节(WORD),4字节(DWORD)。C_String:以NULL结束的ASCII字符串C_DecString:以NULL结束的ASCII字符串,它由一系列的10进制字符组成(‘0’---‘9’)。C_OctetString:由任意8位字节组成数据流串。C_HexString:以NULL结束的ASCII字符串,它由一系列的16进制字符组成(‘0’---‘9’,‘A’(‘a’)---‘F’(‘f’))C_StringTime:表示时间的字符串,它为以下格式“YYMMDDhhmmsstnnp,格式如下说明YY'年份的最后2位(00-99)MM月份(01-12)DD日(01-31)Hh小时(00-23)Mm分(00-59)Ss秒(00-59)T十分之一秒(0-9)Nn与UTC(UniversalTimeConstant)时间超前或落后的差距(00-48).‘+’(p)时间超前于UTCtime.‘-’(p)时间落后于UTCtime.C_UnicodeString:Unicode编码的字符串。3.4.2消息头语法字段长度(字节)类型CommandLength4IntegerCommandID4IntegerCommand_status4Integer-6-SequenceNo.4IntegerOptionalMessageBody可变混合具体字段描述说明:CommandLength:整个包的长度(包括该字段本身)。CommandID:这个字段表明该条短消息的类型,相当于标识符。例如ESME_SUB_SM表示此消息为ESME向SMSC提交短消息。当该标识符表示该条消息是请求消息(request)时,标识符的保留取值范围是0h到FFh。当该标识符表示该条消息是应答消息(response)时,标识符的保留取值范围是080000000h到0800000FFh。一般来说,应答消息的类型对应相应的请求消息的类型,所不同的是,应答消息的类型在第31位比特处是置位的。CommandID命令取值:CommandID编码CommandID描述CommandID取值ESME_BNDRCVbind_receiverESME要求以接收者身份连接到SMSC0X00000001ESME_BNDRCV_RESPbind_receiver_respbind_receiver的响应0X80000001ESME_BNDTRNbind_transmitterESME要求以发送者身份连接到SMSC0X00000002ESME_BNDTRN_RESPbind_transmitrer_respbind_transmitter的响应0X80000002ESME_UBDUnbindESME要求断开连接到SMSC0X00000006ESME_UBD_RESPUnbind_respUnbind的响应0X80000006ESME_SUB_SMSubmit_smESME提交短消息到SMSC0X00000004ESME_SUB_SM_RESPSubmit_sm_respsubmit_sm的响应0X80000004SMSC_DELIVER_SMDeliver_smSMSC下发短消息到ESME0X00000005SMSC_DELIVER_SM_RESPDeliver_sm_respdeliver_sm的响应0X80000005ESME_QRYLINKEnquire_linkESME询问与SMSC的连接情况0X00000015ESME_QRYLINK_RESPEnquire_link_respenquire_link的响应0X80000015ESME_NACKNack表示消息头有错误的0X80000000-7-响应CommandStatus:此字段表示一个请求消息的成功与失败,如失败,指示引起失败的错误类型等信息。该字段只用在应答消息中,在请求消息中,该字段必须为NULL。CommandStatus取值说明:错误代码错误值描述E_SUCCESS0X00000000成功E_OTHERERR0X00000001其他错误0X00000002–0X0000000F保留给SMSC厂商定义错误E_MSGLENERR0X00000010消息长度错误E_CMDLENERR0X00000011命令长度错误E_INVLDCMDID0X00000012消息ID无效E_NORIGHT(0X00000013)0X00000013没有执行此命令的权限0X00000014–0X0000001F保留E_INVLDSYSTEMID0X00000020无效的SYSTEMIDE_INVLDPASSWORD0X00000021无效的密码E_INVLDSYSTEMTYPE0X00000022无效的SYSTEMTYPE0X00000023–0X0000003F保留E_ADDRERR0X00000040地址错误E_MOEXCEED0X00000041超过最大提交数E_MTEXCEED0X00000042超过最大下发数E_INVLDUSER0X00000043无效的用户E_INVLDDATAFMT0X00000044无效的数据格式E_CREATEMSGFAILURE0X00000045创建消息失败E_INVLDMSGID0X00000046无效的短消息IDE_DATABASEFAILURE0X00000047数据库失败E_CANCELMSGFAILURE0X00000048取消消息失败E_MSGSTATEERR0X00000049短消息状态错误E_REPLACEMSGFAILURE0X0000004A替换消息失败E_INVLDRPLADDR0X0000004B替换消息源地址错误0X0000004C–0X0000005F保留E_INVLDORGTON0X00000060无效的源地址TONE_INVLDORGNPI