手机短信服务接口合作协议原理与分析

 

1 短信协议
1.1 分发中心接口
分发中心接口分为TCP接口和HTTP接口协议,都用的是文本指令方式,也就是说每条指令都是以回程换行结束的,服务端只有接收到回程换行才会进入指令处理。
 为了安全,无论TCP或HTTP协议,都要求合作方给出接入的IP地址,没有固定IP地址的合作方需向业务申明。
指令规则:
1、 每条指令分为指令名和指令体,指令名和指令体之间以空格分隔,格式如下:
指令名 (空格) 指令体
2、 每个指令体又由很多个参数赋值语句构成,各参数赋值语句间以&符号分隔,格式如下:
参数赋值语句1&参数赋值语句2&参数赋值语句3 ••• •••
3、 每个参数赋值语句由一个参数名和一个参数值组成,中间用=或:=分隔,用:=分隔表示该参数的值是经过加码处理的,格式如下:
参数名=值 或 参数名:=加码后的值
4、 加码解码的规则如下:
加码时将字符串中的所有字符转换成其对应的ASCII值的16进制值,例如:“A”的ASCII码值为65,以16进制值表示为41,故应发送两个字符“41”以代表字符“A”。示例:msg:=41代表msg=A
对于汉字则以其内码的16进制值来表示,如“测试”应为:B2E2CAD4。示例:msg:= B2E2CAD4表示的是msg=测试
参数中只要参数标识与内容之间用“:=”连接的都需要解码后方可使用,解码时将每两位当成其ASCII值的16进制值将其还原。
1.1.1 TCP接口协议
服务端地址1:211.154.164.235 端口号:8020
服务端地址2:211.154.164.236 端口号:8020

Tcp协议适合发送量大,发送和接收比较及时,对于Tcp客户端由于某些原因一段时间内不能连接到分发中心服务器,所有的发向该客户端的MO短信和报告都会被缓存起来,等该客户端一旦连接,便会很快补发。
建议合作方建立一个发送一个接收2个连接,如果业务量很大,可以申请多于2个的连接,但须向业务申请后方可加连接,系统对于连接数是有限制的,每个合作方没有特殊声明时连接数是3,一般可以建2个连接,一个连接用于缓冲在某些情况下断开不能很好识别的情况。还有,对于每条连接,我们目前的速度限制是10条/ 秒,如果你的业务超过每连接每秒10条的限制,可以向业务申请调高每条连接的最高限速。
服务器端要求每连接每分钟都要能从客户端接收到至少一条指令数据,如果超过一分钟没有收到,服务器会向客户端发送一个测试指令,只要合作方回应该指令,那么就认为连接是处于激活状态,如果3分钟内服务端都无法接收到客户端的测试回应,将主动断开连接。客户端程序也应该设置3分钟内不能收到服务器端任何指令将主动断开连接并重新连接。
为了防止分发中心连接负载太重,我们要求任何一个连接因任何原因在断开后20秒内不得连接,20秒后再尝试连接,否则如果在1分钟内超过我们设定的连接次数,我们将限制其在后续10分钟之内不能连接,并向系统管理员告警,由系统管理员根据情况停止该用户的合作帐户。

1.1.1.1 连接登陆指令
连接登陆指令是在客户端成功连接后首先应当而且只能在此时发送的指令:
格式:
Login Name=【注册名】&Pwd=【注册密码】&Type=【注册类型,0:接收和发送;1:接收;2:发送;3:稳定接收;4:稳定发送;默认为0】(回车换行)
如果所有服务注册成功,服务器返回给客户端字符串:
Pass(回车换行)
否则将断开连接。对于一次未连接成功,应至少在20秒以后再重试连接,禁止连续的重试连接。
稳定接收和稳定发送的模式是为了更好的收发而新加协议,在这2个模式下,要求发送一方方保存发送的commandid,并根据回馈的commandid确定哪些接收到了,如果未回馈指令超过一定数目(分发中心的默认数目为该登陆设定的每秒下发数),将暂停发送,等待回馈。这样可以减少网络故障时丢失数据,减少连接缓存溢出导致的单向阻塞。各合作方可以根据情况选择使用。
1.1.1.2 连接测试指令
  分发中心为了测试服务方是否连接,会在等待1分钟未收到任何数据发送测试指令(该指令也可由服务方主动发起,但没有必要,因为分发中心会定时测试的):
 
 分发中心或服务方==>ActiveTest CommandId=【命令标识,4字节整型,循环使用】(回车换行)
 
 回应:Received CommandId=【对应于发送时的命令标识】(回车换行)
1.1.1.3 接收用户上行指令
  该指令是由分发中心向服务方发送用户的短信请求,格式如下:
 
 分发中心==>Deliver (空格)
 CommandId=【命令标识,4字节整型,循环使用】
 &GateName=【源网关名】
 &ItemId=【节目标识,由服务方申请,业务分配】
 &UserNumber:=【用户号码】
 &UserNumberType=【0:用户号码为真实号码,1:用户号码为伪码】
 &SpNumber=【服务号码,必须以9160开头】
   &TP_pId=【GSM协议类型。详细解释请参考GSM03.40中的9.2.3.9】
   &TP_udhi=【GSM协议类型。详细解释请参考GSM03.40中的9.2.3.23,仅使用1位,右对齐】
 &MsgCode=【短信编码,0:ASCII串;3:短信写卡操作;4:二进制信息;8:UCS2编码;15:含GB汉字;24:UCS2编码闪电短信(Msg<=69个汉字),124:GBK编码闪电短信(Msg<=69个汉字)】
   &Msg:=【短信内容,经加码处理,需解码】
   &LinkID=【要求对于该MO引起的MT下发时附带该参数】
 &AreaCode=【手机所在地区,格式为:(区号,类型,省份,城市)】
 (回车换行)
 
 回应:Received CommandId=【对应于发送时的命令标识】(回车换行)
1.1.1.4 下发短信给用户
  服务方向分发中心提交发送的短信内容,格式如下:
 
  服务方==>Submit (空格)
 CommandId=【命令标识,4字节整型,循环使用】
 &GateName=【目的网关名,该参数为空时默认由分发中心根据手机号码决定目的网关名】
   &ItemId=【节目标识,由服务方申请,业务分配】
   &SpNumber=【服务号码,以9160开头】
   &UserNumber:=【目的用户号码,如果是群发将个号码之间用“,”隔开,注意最多只能有255个群发号码,联通禁止群发】
 &UserNumberType=【0:用户号码为真实号码,1:用户号码为伪码】
   &FeeNumber:=【计费号码,短信产生的费用由该号码承担,不填时默认向目的用户号码收费】
 &FeeNumberType=【0:计费号码为真实号码,1:计费号码为伪码】
   &FeeType=【计费类型,1:免费,2:按条计费,3:定制包月计费(FeeType=3目前只针对联通有效)。默认:2】
   &ScheduleTime=【定时发送时间,默认立即发送,格式举例:2002年09月10日20:08:00为:020910200800】。
   &ExpireTime=【短信寿命中止时间,格式举例:021201090508,默认为移动或联通(24小时后)中止时间】
   &MtFlag=【*引起MT消息的原因,仅当向联通用户发短信时需要该参数,0-MO点播引起的第一条MT消息;1-MO点播引起的非第一条MT消息; 2-非MO点播引起的MT消息。默认为0】
   &ReportFlag=【状态报告标志,0:不需要状态报告;1:无论成功与否都返回状态报告;2:联通或小灵通包月收费(当FeeType=3时,要求该字段值必须是2);3:只有最后出错时要返回状态报告(联通有效,移动同1),默认:0】
   &MsgCode=【短信编码,0:ASCII串;3:短信写卡操作;524:二进制信息;8:UCS2编码;15:含GB汉字;24:UCS2编码闪电短信(Msg<=69个汉字),124:GBK编码闪电短信(Msg<=69个汉字)
   &MsgId=【用户自定义消息标识,推荐格式:月日时分秒+6位自递增码,例如:9月23日10:00:03发出的序号为1记录可定义为 923100003000001。自定义格式最大不超过20个字符且不能有需加码解码的特殊字符】,如果不需要回馈报告可以不写该参数和ExtData参数。
   &ExtData:=【短信扩展数据,服务方短信发送的附加信息,在有报告反馈时会连带该扩展数据反馈给服务方,需加码处理,但加码后不能超过120个字节长度。默认为空串】
   &OverIp=【从网页定制时用户的IP地址,要求在初次包月或点播定制时带有该字段,点播一定在初次收费下发时带有该字段】
   &TP_pId=【GSM协议类型。详细解释请参考GSM03.40中的9.2.3.9】
   &TP_udhi=【GSM协议类型。详细解释请参考GSM03.40中的9.2.3.23,仅使用1位,右对齐】
   &Msg:=【短信内容,需加码处理】
   &LinkID=【短信匹配码,附带引起该MT的MO的匹配码,如果是网上点播,引用网上的匹配码,如果是用户定制信息免费下发,可以不用匹配码】
   &ItemType=【指令类别,0:点播类指令,1:定制类指令(只要是定制节目,无论是下发包月还是下发免费信息,都要求选择值1),2:取消定制指令(只真对联通),3:失败指令(只真对联通,例如定制失败和退订失败),4:联通、小灵通首次点播包月指令(只在首次建立定制关系时使用,之后按值1发送即可),默认为0】
 &MsgCount=【信息发送条目,最终的发送条目为该计数和实际发送条目(Msg和MsgId下脚编号+1)的最小值,例如,实际发送条目是5,而该计数是3,则只会发送前3条,如果实际发送条目是2,而该计数是4,则只会发送2条,对于只有一条发送,可以不写后面这些参数,另外,如果下发超过系统限定的计数,该值也会被系统调整】
   &MsgId1=【用户自定义消息标识,推荐格式:月日时分秒+6位自递增码,例如:9月23日10:00:03发出的序号为1记录可定义为 923100003000001。自定义格式最大不超过20个字符且不能有需加码解码的特殊字符】,如果不需要回馈报告可以不写该参数和ExtData参数。
   &Msg1:=【短信内容,需加码处理】
... ...
   &MsgIdn=【用户自定义消息标识,推荐格式:月日时分秒+6位自递增码,例如:9月23日10:00:03发出的序号为1记录可定义为 923100003000001。自定义格式最大不超过20个字符且不能有需加码解码的特殊字符,最后的n为数字计数】,如果不需要回馈报告可以不写该参数和ExtData参数。
   &Msgn:=【短信内容,需加码处理,最后的n为数字计数】,注意,Msg1~n必须连续,不能中间跳过某个数字。
 
   (回车换行)
   
 回应:Received CommandId=【对应于发送时的命令标识】(回车换行)

关于最新版本《协议3》的submit指令的变更说明:
  以往如果对一个用户一次下发多条收费,只能采用下发多条submit指令的方式,而每一个submit指令系统都要做一次键权,例如发10条,将经过10 次键权,导致下发速度收到限制,为了提高下发速度,现在可以一条submit指令带[msgid,msg],[msgid1,msg1], [msgid2,msg2]...[msgidn,msgn]多条msgid和msg指令对,两两对应,例如msg2的报告将以msgid2来标识并反馈,这样大家也可以分别收到各内容的报告反馈。这样下发的指令在管理网站上看到的将是n+1(n为msg下角标)条记录,移动的收费也是n+1条。也就是说只是在键权时是一次键权,键权完成后就又分成n+1条短信下发了,和大家原来下发n+1条短信是一样的,但这样下发可以提高效率。
1.1.1.5 接收发送报告
指令在发送过程中出现各种成功、错误等状态变化,以及移动在短信提交给用户后的状态反馈都以报告方式发送给源发送方。分发中心向服务方发送报告,格式如下:
 
   分发中心==>Report (空格)
 CommandId=【命令标识,4字节整型,循环使用】
 &GateName=【源网关名】
   &MsgId=【服务方在Submit时写在MsgId参数中的值】
 &ExtData:=【服务方在Submit时写在ExtData参数中的值】
 & State=【发送状态,0:向网关提交成功(中间状态,后续还会有报告反馈),1:向网关提交失败,2:发送成功,3:等待发送(中间状态,后续还会有报告反馈),4:发送失败,5:Submit参数错误,6:定制被拒绝[该用户已经订制了该费率的服务,或当月已收取该用户的费用,不能再下发包月收费,故被拒绝。],7:黑名单用户,8:该手机单日流量超限,9:限制发送】
 &StateMsg=【附加状态信息,对于State的解释文字】
   &UserNumber:=【目的用户号码】
 &UserNumberType=【0:用户号码为真实号码,1:用户号码为伪码】
 &FeeNumber:=【该包月对应的计费号码,对于移动的报告反馈可能会没有该字段,只有UserNumber】
 &FeeNumberType=【0:计费号码为真实号码,1:计费号码为伪码】
 &FeeType=【报告对应指令的计费类型,1:免费,2:按条计费,3:定制包月计费】
 &ItemId= 【报告对应指令节目标识】
 (回车换行)

 回应:Received CommandId=【对应于发送时的命令标识】(回车换行)

 注:只要是报告发送失败请先找原因,不要再重发,只要有错无论重发多少次都是失败。
1.1.1.6 接收定制状态变更
分发中心向服务方通报定制状态变化,格式如下:
   分发中心==>Orderchg (空格)
 CommandId=【命令标识,4字节整型,循环使用】
   &ItemId=【节目标识】
   &UserNumber:=【取消定制的手机号码】
 &UserNumberType=【0:用户号码为真实号码,1:用户号码为伪码】
   &OrderState=【变更状态,0:用户取消定制,1:用户定制节目,2:暂停节目,3:激活节目,默认:0】
 &Reason:=【原因,最多40个字节】
 &Msg:=【表示当移动用户通过MO方式建立定制时所发送的定制指令的内容】
 &AreaCode=【手机所在地区,格式为:(区号,类型,省份,城市)】
 (回车换行)

 回应:Received CommandId=【对应于发送时的命令标识】(回车换行)
1.1.1.7 主动变更定制状态
服务方主动建立或取消定制关系
   服务方==>Ordersub (空格)
 CommandId=【命令标识,4字节整型,循环使用】
 &GateName=【取消手机所属网关名】,默认由分发中心根据手机号码决定目的网关名】
   &ItemId=【节目标识】
   &UserNumber:=【取消定制的手机号码】
 &UserNumberType=【0:用户号码为真实号码,1:用户号码为伪码,默认:0】
 &OrderType=【提交类型,0:仅执行变更操作,1:执行变更操作向其他节目通知(需要特定权限2),2:不执行变更操作仅向其他节目通知(需要特定权限2),默认:0】
   &OrderState=【变更状态,0:用户取消定制,1:用户建立定制,2:取消其他节目的定制(需要特定权限2),3:已建立其他节目的定制(需要特定权限3),4:暂停其他节目的定制(需要特定权限2),5:激活其他节目的定制(需要特定权限3),默认:0】
    &OrderSure=【变更确认(该参数对合作方没有意义,如果置位将被忽略,是系统服务用的,在特定权限2或3时有效),0:服务状态变更,1:仅业务状态变更】
   &MonthType=【建立定制时的包月类型,0:定制包月,1:点播包月,默认:0】
   &OverIp=【从网页定制时用户的IP地址,要求在初次包月或点播定制时带有该字段,点播一定在初次收费下发时带有该字段】
 &Reason:=【状态变更原因,最多40个字节】
 &Msg:=【移动用户在发送定制时发送的定制指令内容】
   &MsgId=【用户自定义消息标识,推荐格式:月日时分秒+6位自递增码,例如:9月23日10:00:03发出的序号为1记录可定义为 923100003000001。自定义格式最大不超过20个字符且不能有需加码解码的特殊字符】,如果不需要回馈报告可以不写该参数。
   &ExtData:=【短信扩展数据,服务方短信发送的附加信息,在有报告反馈时会连带该扩展数据反馈给服务方,需加码处理,但加码后不能超过120个字节长度。默认为空串】
 (回车换行)

 回应:Received CommandId=【对应于发送时的命令标识】(回车换行)

注意:参数中注明需要特定权限的参数值是为系统的特殊需要建立的,合作方是不能发送这些参数的,如果发送,会立即报错的。

1.1.1.8 上报可疑手机
游戏代收费服务方上报可疑手机,分发中心将限制该手机针对游戏代收费节目的服务
   服务方==>BkPhoneSub (空格)
 CommandId=【命令标识,4字节整型,循环使用】
 &GateName=【取消手机所属网关名】,默认由分发中心根据手机号码决定目的网关名】
   &ItemId=【对应的游戏节目的标识】
   &UserNumber:=【可疑手机号码】
 (回车换行)

 回应:Received CommandId=【对应于发送时的命令标识】(回车换行)
1.1.2 TCP接口协议流程示例
下面示例中的一些参数要根据实际情况做变化的,例如commandid、msgid等要根据协议的生成方式生成。
1.1.2.1 点播流程
假如业务给合作方分配的长号码是9160123,节目itemid为66601,那么用户(假定为13999999999),发送“测试”到 9160123,那么合作方将收到下述指令(部分参数在实际中的值有可能不同,例如如果是130~133开头的手机号码,gatename= unicom):
deliver  gatename=mobile&usernumber=13999999999&usernumbertype=0&msgcode=15&tp_pid=0&tp_udhi=0&linkid=15462
421398357240097&spnumber=9160123&itemid=66601&commandid=3b3de5&msg:= B2E2CAD4
 合作方接收到该指令后如果想给用户下发信息为“测试成功”,则如下:
 submit gatename=mobile&itemid=66601&spnumber=9160123&usernumber=13999999999&msgcode=15&feetype=2&linkid
=15462421398357240097&itemtype=0&msg:=B2E2CAD4B3C9B9A6&msgid=092215544200724
 注意:Submit指令中的linkid必须和Deliver指令中的linkid的值一样,目前小灵通的协议中没有linkid,发送小灵通短信可以不带linkid
1.1.2.2 移动定制取消流程
(1)由用户主动发送定制指令短信为主动定制,假如用户发送DE到9160123是定制某新闻节目的指令,合作方真对该节目的itemid=66602,那么当用户发送DEXW到9160123时,移动提示用户定制新闻成功,并通过下述指令通知服务方:
Orderchg CommandId=12345678&ItemId=66602&UserNumber=13999999999&UserNumberType=0&OrderState=1&Reason:= D6F7B6AFB6A8D6C6&Msg:= 44455857
(2)由服务方主动发起的定制叫反向定制, 移动的反向定制需要向移动申请后方可实现,如果该节目的itemid=66602已经申请了反向定制,那么合作方可以发送下述指令:
Ordersub CommandId=1234567&GateName=mobile&ItemId=66602&UserNumber=13999999999&OrderType=0&OrderState=1
&MonthT
ype=0&msgid=092215544200724
注意,如果申请的反向定制是点播定制时,需要&MonthType=1。
如果反向定制成功,系统会通过下述指令通知合作方(和1中指令一样,只是没有了msg):
Orderchg CommandId=12345678&ItemId=66602&UserNumber=13999999999&UserNumberType=0&OrderState=1&Reason:= D6F7B6AFB6A8D6C6
(3)用户主动取消定制、移动收费失败要求暂停用户、移动多次尝试收费都失败要求取消定制都以下列方式下发:
Orderchg CommandId=12345678&ItemId=66602&UserNumber=13999999999&UserNumberType=0&OrderState=0&Reason:= D3C3BBA7C8A1CFFB
注意,OrderState和Reason会因为状态不同而变化。
(4)合作方主动取消定制,指令如下例:
Ordersub CommandId=1234567&GateName=mobile&ItemId=66602&UserNumber=13999999999&OrderType=0&OrderState=
0&MonthType=0&msgid=092215544200724
注意,如果是点播定制时,需要&MonthType=1。

1.1.2.3 联通定制取消流程
(1)联通由用户主动发起的定制短信都会首先被联通拦截,并向用户二次确认用户是否要定制该节目,确认方式是再次发该定制指令到该节目,用户的二次确认指令会以Deliver指令方式送达合作方,如下例,用户发送TPBY到9160实现图片包月:
deliver  gatename=unicom&usernumber=13099999999&msgcode=15&tp_pid=0&tp_udhi=0&linkid= 32200004&spnumber=9160&itemid=66602&commandid=3b3de5&msg:= 54504259
注意,联通无法实现长号码定制,因此如果以用户主动定制方式,我们都需要向联通专门申请
合作方接收到该条MO指令后下发:
submit gatename=unicom&itemid=66602&spnumber=9160123&usernumber=13099999999&msgcode=15&feetype=1&linkid=
32200004&itemtype=1&msg:=B6A8D6C6B3C9B9A6&msgid=092215544200724
注意,Submit指令的Linkid必须和接收到的Deliver指令的Usernumber 和Linkid一致,另外,该条下发短信只是通知联通定制成功,是不会下发给用户的。该条下发后,联通会反馈一个报告:
Report CommandId=1234&GateName=unicom&MsgId=092215544200724&State=4&StateMsg=44&UserNumber=13099999999
&FeeType=1&ItemId=66602
只要反馈报告中&StateMsg=44表示定制成功,否则表示失败。
在成功收到&StateMsg=44后就可以认为用户已经定制成功了,并可以给用户下发信息,如下例:
submit gatename=unicom&itemid=66602&spnumber=9160123&usernumber=13099999999&msgcode=15&feetype=1&itemtype
=1&msg:= C4FAB5C4C3D8C3DCCEAAA3BA31323334&msgid=092215544200725
注意,定制成功后给用户下发信息不用带Linkid,包月定制下发信息用FeeType=1(即免费)方式下发,点播包月下发信息用FeeType=2(按条)方式。
在向用户下发上条定制成功的通知信息的同时,可以下发首次包月收费包,如下例:
submit gatename=mobile&itemid=66602&spnumber=9160123&usernumber=13099999999&msgcode=15&feetype=3 &ReportFlag=2&itemtype=1&msg:= B0FCD4C2&msgid=092215544200726
对于首次收费,收费包会在分发中心滞留72小时后向联通网关发起收费,以后合作方定时下发包月收费包以收取用户费用,也可以向业务申请除首次收费后的后续收费由分发中心自动完成。

(2)由服务方主动发起的定制叫反向定制,联通的反向定制无需申请,如果该节目的itemid=66602,那么合作方可以发送下述指令:
Ordersub CommandId=1234567&GateName=mobile&ItemId=66602&UserNumber=13099999999&OrderType=0&OrderState=1&
MonthType=0&msgid=092215544200724
注意,如果申请的反向定制是点播定制时,需要&MonthType=1。
联通反向定制是由联通的中心系统向用户发一条短信,内容大概是告诉用户如果需要定制某节目,例如发TPBY到9160定制图片包月节目,然后如果用户发送TPBY到9160,那么将同(1)的步骤一样,收到一条Deliver指令,下面的步骤请查阅(1)。
(3)用户主动取消定制、收费失败要求取消定制都以下列方式下发:
Orderchg CommandId=12345678&ItemId=66602&UserNumber=13099999999&OrderState=0&Reason:= D3C3BBA7C8A1CFFB
注意,OrderState和Reason会因为状态不同而变化。
(4)合作方主动取消定制,指令如下例:
Ordersub CommandId=1234567&GateName=mobile&ItemId=66602&UserNumber=13099999999&OrderType=0&OrderState=0
&MonthType=0&msgid=092215544200726
注意,如果是点播定制时,需要&MonthType=1。

1.1.2.4 小灵通定制取消流程
(1)小灵通由用户主动发起的定制短信会以MO方式提交给合作方,小灵通目前没有限定具体的定制指令,哪些是定制指令由合作方自己指定:
deliver  gatename=xlt&usernumber=02266666666&msgcode=15&spnumber=91600&itemid=66602&commandid=3b3de5&msg:
= 54504259
合作方接收到该MO后可下发一条包月收费话单进行收费和一条免费短信告诉用户定制成功。
收费短信,以后每月合作方必须发送一次才能收取用户费用,如果要求我们在每月自动代发需向业务说明:
submit gatename=mobile&itemid=66602&spnumber=91600123&usernumber=02266666666&msgcode=15&feetype=
3 &ReportFlag=2&itemtype=1&msg:= B0FCD4C2&msgid=092215544200727
通知用户定制成功的短信,以后给用户发信息的免费短信也同此格式:
submit gatename=mobile&itemid=66602&spnumber=91600123&usernumber=02266666666&msgcode=15&feetype=1&itemtype=
1&msg:= [具体内容根据节目制定]&msgid=092215544200728
小灵通目前没有72小时问题,应该是及时收费。

(2)用户主动取消定制、收费失败要求取消定制都以下列方式下发:
Orderchg CommandId=12345678&ItemId=66602&UserNumber=02266666666&OrderState=0&Reason:= D3C3BBA7C8A1CFFB
注意,OrderState和Reason会因为状态不同而变化。
(3)合作方主动取消定制,指令如下例:
Ordersub CommandId=1234567&GateName=mobile&ItemId=66602&UserNumber=02266666666&OrderType=0&OrderState=
0&MonthType=0&msgid=092215544200726
注意,如果是点播定制时,需要&MonthType=1。
(4)小灵通点播定制的节目,要求在第一次下发时itemtype=4先建立定制关系,否则我们将限制后续下发,例如:
submit gatename=mobile&itemid=66602&spnumber=91600123&usernumber=02266666666&msgcode=15&feetype=2&itemtype
=4&msg:= B0FCD4C2&msgid=092215544200727
此处,如果第一条暂不收用户费用,feetype=1&itemtype=4也可以建立定制关系。

1.1.3 HTTP接口协议
服务端地址:211.154.164.235 端口号:8030
服务端地址:211.154.164.236  端口号:8030

Http协议适合发送量不大但开发相对简单。使用Http协议还想接收MO和报告的合作方,需要向业务申明自己的接收地址,我们会向合作方制定链接网页发送MO和报告,而参数格式参照我们给的协议说明。
Http协议和Tcp协议的区别除了端口不一样、多了“&Name=【注册名】&Pwd=【注册密码】”外,其他都是一致的,所以解释和内容如果出现与Tcp协议的某些不一致,以Tcp协议为准。
1.1.3.1 接收用户上行指令
该指令是由分发中心向服务方发送用户的短信请求,格式如下:
 
 分发中心==>【服务方HTTP链接地址】?
 Command=deliver【该指令表示接收到用户短信】 
&CommandId=【命令标识,4字节整型,循环使用】
 &GateName=【源网关名】
 &ItemId=【节目标识,由服务方申请,业务分配】
 &UserNumber:=【用户号码】
 &UserNumberType=【0:用户号码为真实号码,1:用户号码为伪码】
 &SpNumber=【服务号码,必须以9160开头】
   &TP_pId=【GSM协议类型。详细解释请参考GSM03.40中的9.2.3.9】
   &TP_udhi=【GSM协议类型。详细解释请参考GSM03.40中的9.2.3.23,仅使用1位,右对齐】
 &MsgCode=【短信编码,0:ASCII串;3:短信写卡操作;4:二进制信息;8:UCS2编码;15:含GB汉字;24:UCS2编码闪电短信(Msg<=69个汉字),124:GBK编码闪电短信(Msg<=69个汉字)】
   &Msg:=【短信内容,经加码处理,需解码】
   &LinkID=【要求对于该MO引起的MT下发时附带该参数】
 (回车换行)
 
 回应:Received CommandId=【对应于发送时的命令标识】(回车换行)

1.1.3.2 下发短信给用户
 服务方==>http://211.154.164.235:8030/Submit (空格)
 CommandId=【命令标识,4字节整型,循环使用】
 &Name=【注册名】
 &Pwd=【注册密码】
 &GateName=【目的网关名,该参数为空时默认由分发中心根据手机号码决定目的网关名】
   &ItemId=【节目标识,由服务方申请,业务分配】
   &SpNumber=【服务号码,以9160开头】
   &UserNumber:=【目的用户号码,如果是群发将个号码之间用“,”隔开,注意最多只能有255个群发号码,联通禁止群发】
 &UserNumberType=【0:用户号码为真实号码,1:用户号码为伪码】
   &FeeNumber:=【计费号码,短信产生的费用由该号码承担,不填时默认向目的用户号码收费】
 &FeeNumberType=【0:计费号码为真实号码,1:计费号码为伪码】
   &FeeType=【计费类型,1:免费,2:按条计费,3:定制包月计费(FeeType=3目前只针对联通有效)。默认:2】
   &ScheduleTime=【定时发送时间,默认立即发送,格式举例:2002年09月10日20:08:00为:020910200800】。
   &ExpireTime=【短信寿命中止时间,格式举例:021201090508,默认为移动或联通(24小时后)中止时间】
   &MtFlag=【*引起MT消息的原因,仅当向联通用户发短信时需要该参数,0-MO点播引起的第一条MT消息;1-MO点播引起的非第一条MT消息; 2-非MO点播引起的MT消息。默认为0】
   &ReportFlag=【状态报告标志,0:不需要状态报告;1:无论成功与否都返回状态报告;3:只有最后出错时要返回状态报告(联通有效,移动同1),默认:0】
   &MsgCode=【短信编码,0:ASCII串;3:短信写卡操作;524:二进制信息;8:UCS2编码;15:含GB汉字;24:UCS2编码闪电短信(Msg<=69个汉字),124:GBK编码闪电短信(Msg<=69个汉字)
   &MsgId=【用户自定义消息标识,推荐格式:月日时分秒+6位自递增码,例如:9月23日10:00:03发出的序号为1记录可定义为 923100003000001。自定义格式最大不超过20个字符且不能有需加码解码的特殊字符】,如果不需要回馈报告可以不写该参数和ExtData参数。
   &ExtData:=【短信扩展数据,服务方短信发送的附加信息,在有报告反馈时会连带该扩展数据反馈给服务方,需加码处理,但加码后不能超过120个字节长度。默认为空串】
   &OverIp=【从网页定制时用户的IP地址,要求在初次包月或点播定制时带有该字段,点播一定在初次收费下发时带有该字段】
   &TP_pId=【GSM协议类型。详细解释请参考GSM03.40中的9.2.3.9】
   &TP_udhi=【GSM协议类型。详细解释请参考GSM03.40中的9.2.3.23,仅使用1位,右对齐】
   &Msg:=【短信内容,需加码处理】
   &LinkID=【短信匹配码,附带引起该MT的MO的匹配码,如果是网上点播,引用网上的匹配码,如果是用户定制信息免费下发,可以不用匹配码】
   &ItemType=【指令类别,0:点播类指令,1:定制类指令(只要是定制节目,无论是下发包月还是下发免费信息,都要求选择值1),2:取消定制指令(只真对联通),3:失败指令(只真对联通,例如定制失败和退订失败),4:联通或小灵通首次点播包月指令(只在首次建立定制关系时使用,之后按值1发送即可),默认为0】
&MsgCount=【信息发送条目,最终的发送条目为该计数和实际发送条目(Msg和MsgId下脚编号+1)的最小值,例如,实际发送条目是5,而该计数是3,则只会发送前3条,如果实际发送条目是2,而该计数是4,则只会发送2条,对于只有一条发送,可以不写后面这些参数,另外,如果下发超过系统限定的计数,该值也会被系统调整】
   &MsgId1=【用户自定义消息标识,推荐格式:月日时分秒+6位自递增码,例如:9月23日10:00:03发出的序号为1记录可定义为 923100003000001。自定义格式最大不超过20个字符且不能有需加码解码的特殊字符】,如果不需要回馈报告可以不写该参数和ExtData参数。
   &Msg1:=【短信内容,需加码处理】
... ...
   &MsgIdn=【用户自定义消息标识,推荐格式:月日时分秒+6位自递增码,例如:9月23日10:00:03发出的序号为1记录可定义为 923100003000001。自定义格式最大不超过20个字符且不能有需加码解码的特殊字符,最后的n为数字计数】,如果不需要回馈报告可以不写该参数和ExtData参数。
   &Msgn:=【短信内容,需加码处理,最后的n为数字计数】,注意,Msg1~n必须连续,不能中间跳过某个数字。
   (回车换行)
   
 回应:Received CommandId=【对应于发送时的命令标识】(回车换行)

1.1.3.3 接收发送报告
 分发中心==>【服务方HTTP链接地址】?
 Command=report
 &CommandId=【命令标识,4字节整型,循环使用】
 &GateName=【源网关名】
   &MsgId=【服务方在Submit时写在MsgId参数中的值】
 &ExtData:=【服务方在Submit时写在ExtData参数中的值】
 & State=【发送状态,0:向网关提交成功(中间状态,后续还会有报告反馈),1:向网关提交失败,2:发送成功,3:等待发送(中间状态,后续还会有报告反馈),4:发送失败,5:Submit参数错误,6:定制被拒绝[该用户已经订制了该费率的服务,或当月已收取该用户的费用,不能再下发包月收费,故被拒绝。],7:黑名单用户,8:该手机单日流量超限,9:限制发送】
 &StateMsg=【附加状态信息,对于State的解释文字】
   &UserNumber:=【目的用户号码】
 &UserNumberType=【0:用户号码为真实号码,1:用户号码为伪码】
 &FeeNumber:=【该包月对应的计费号码,对于移动的报告反馈可能会没有该字段,只有UserNumber】
 &FeeNumberType=【0:计费号码为真实号码,1:计费号码为伪码】
 &FeeType=【报告对应指令的计费类型,1:免费,2:按条计费,3:定制包月计费】
 &ItemId= 【报告对应指令节目标识】
 (回车换行)

 回应:Received CommandId=【对应于发送时的命令标识】(回车换行)

 注:只要是报告发送失败请先找原因,不要再重发,只要有错无论重发多少次都是失败。

1.1.3.4 接收定制状态变更
 分发中心==>【服务方HTTP链接地址】?
 Command=Orderchg
 &CommandId=【命令标识,4字节整型,循环使用】
   &ItemId=【节目标识】
   &UserNumber:=【取消定制的手机号码】
 &UserNumberType=【0:用户号码为真实号码,1:用户号码为伪码】
   &OrderState=【变更状态,0:用户取消定制,1:用户定制节目,2:暂停节目,3:激活节目,默认:0】
 &Reason:=【原因,最多40个字节】
 &Msg:=【表示当移动用户通过MO方式建立定制时所发送的定制指令的内容】
 &AreaCode=【手机所在地区,格式为:(区号,类型,省份,城市)】
 (回车换行)

 回应:Received CommandId=【对应于发送时的命令标识】(回车换行)

 
1.1.3.5 主动变更定制状态
 服务方==>http://211.154.164.235:8030/Ordersub (空格)
 CommandId=【命令标识,4字节整型,循环使用】
 &Name=【注册名】
 &Pwd=【注册密码】
 &GateName=【取消手机所属网关名】,默认由分发中心根据手机号码决定目的网关名】
   &ItemId=【节目标识】
   &UserNumber:=【取消定制的手机号码】
 &UserNumberType=【0:用户号码为真实号码,1:用户号码为伪码,默认:0】
 &OrderType=【提交类型,0:仅执行变更操作,1:执行变更操作向其他节目通知(需要特定权限2),2:不执行变更操作仅向其他节目通知(需要特定权限2),默认:0】
   &OrderState=【变更状态,0:用户取消定制,1:用户建立定制,2:取消其他节目的定制(需要特定权限2),3:已建立其他节目的定制(需要特定权限3),4:暂停其他节目的定制(需要特定权限2),5:激活其他节目的定制(需要特定权限3),默认:0】
    &OrderSure=【变更确认(该参数对合作方没有意义,如果置位将被忽略,是系统服务用的,在特定权限2或3时有效),0:服务状态变更,1:仅业务状态变更】
   &MonthType=【建立定制时的包月类型,0:定制包月,1:点播包月,默认:0】
   &OverIp=【从网页定制时用户的IP地址,要求在初次包月或点播定制时带有该字段,点播一定在初次收费下发时带有该字段】
 &Reason:=【状态变更原因,最多40个字节】
 &Msg:=【移动用户在发送定制时发送的定制指令内容】
   &MsgId=【用户自定义消息标识,推荐格式:月日时分秒+6位自递增码,例如:9月23日10:00:03发出的序号为1记录可定义为 923100003000001。自定义格式最大不超过20个字符且不能有需加码解码的特殊字符】,如果不需要回馈报告可以不写该参数。
   &ExtData:=【短信扩展数据,服务方短信发送的附加信息,在有报告反馈时会连带该扩展数据反馈给服务方,需加码处理,但加码后不能超过120个字节长度。默认为空串】
 (回车换行)

 回应:Received CommandId=【对应于发送时的命令标识】(回车换行)

注意:参数中注明需要特定权限的参数值是为系统的特殊需要建立的,合作方是不能发送这些参数的,如果发送,会立即报错的。
1.1.3.6 查询用户是否在开机状态
  服务方==> http://211.154.164.235:8030/QueryUserinfo(空格)
 CommandId=【命令标识,4字节整型,循环使用】
&Name=【注册名】
 &Pwd=【注册密码】
   &ItemId=【节目标识,必须为免费业务】
   &UserNumber:=【需要查询的手机号码】
   &MsgId=【用户自定义消息标识,推荐格式:月日时分秒+6位自递增码,例如:9月23日10:00:03发出的序号为1记录可定义为 923100003000001。自定义格式最大不超过20个字符且不能有需加码解码的特殊字符】,必需,系统返回查询结果(ReturnUserinfo)将带入此参数
&ExpireTime=【查询过期时间,格式举例:021201090508,范围:发送后1~24小时之间,默认为(24小时后)】

(回车换行)

 回应:Received CommandId=【对应于发送时的命令标识】(回车换行)
    注意:仅支持移动用户
1.1.3.7 返回用户开关机状态
分发中心==>【服务方HTTP链接地址】?
    Command= ReturnUserinfo
 &CommandId=【命令标识,4字节整型,循环使用】
   &ItemId=【节目标识】
   &UserNumber:=【查询的手机号码】
&MsgId=【服务方在QueryUserinfo时写在MsgId参数中的值】
   &State=【开关机状态,2:表示查询到结果为开机,此次查询中止;1:表示查询到结果为已关机,查询未中止,如果在过期时间之前用户开机,返回2,如果在过期时间之前用户没有开机,则中止此次查询,不再返回结果;5:无效参数itemid;4:用户号码问题,详情查看参数 StateMsg】
 &StateMsg:=【查询结果的中文说明,最多40个字节】
 (回车换行)

 回应:Received CommandId=【对应于发送时的命令标识】(回车换行)
1.1.3.8 上报可疑手机
游戏代收费服务方上报可疑手机,分发中心将限制该手机针对游戏代收费节目的服务
  服务方==> http://211.154.164.235:8030/ BkPhoneSub(空格)
 CommandId=【命令标识,4字节整型,循环使用】
&Name=【注册名】
 &Pwd=【注册密码】
 &GateName=【取消手机所属网关名】,默认由分发中心根据手机号码决定目的网关名】
   &ItemId=【对应的游戏节目的标识】
   &UserNumber:=【可疑手机号码】
 (回车换行)

 回应:Received CommandId=【对应于发送时的命令标识】(回车换行)

1.1.4 Http接口协议流程示例
Http协议的点播、定制的流程和Tcp协议是一致的,参数只是每条语句多了用户名和密码,我们举一个点播的示例,其他例子参照Tcp协议示例(假定合作方申请的接收地址为:http://202.202.202.202/rec.asp?):
假如业务给合作方分配的长号码是9160123,节目itemid为66601,那么用户(假定为13999999999),发送“测试”到 9160123,那么合作方将收到下述指令(部分参数在实际中的值有可能不同,例如如果是130~133开头的手机号码,gatename= unicom):
http://202.202.202.202/rec.asp?Command=deliver  gatename=mobile&usernumber=13999999999&usernumbertype=0&msgcode=15&tp_pid=0&tp_udhi=0&linkid=
15462421398357240097&spnumber=9160123&itemid=66601&commandid=3b3de5&msg:= B2E2CAD4
 合作方接收到该指令后如果想给用户下发信息为“测试成功”,则如下:
 http://211.154.164.235:8030/Submit  CommandId=1234&Name=test&Pwd=test123&gatename=mobile&itemid=66601&spnumber=9160123&usernumber=
13999999999&msgcode=15&feetype=2&linkid=15462421398357240097&itemtype=0&msg:=B2E2CAD4B3C9B9A6&msgid=
092215544200724
 注意:Submit指令中的linkid必须和Deliver指令中的linkid的值一样,Http指令中必须每条指令都带“&Name=用户名&Pwd=密码”,以识别合作方身份。
1.1.5 接口API
下载地址:
http://211.148.189.137/tcpface3.exe   
1.1.6 移动SSO接口
服务端地址:211.148.189.137 端口号:8070
移动SSO接口适合网上定制、点播,不需要用户上行的合作方。本接口通过Http转接到移动梦网中心,通过移动梦网机制对用户进行相关点播和定制,然后根据点播及定制关系通过Tcp/Http 接口协议对用户进行按条收费或下发信息。

本SSO接口的使用可采用<a>标签连接 或Get/Post 传递。遵守Http网络传送协议
1.1.6.1 连接指令
服务方主动建立==>Http://211.148.189.137:8070/order ?
CommandId  = 【服务产生的业务处理标识】
CPKeys: = 【注册名 需要做 ASCII 十六进制加码】
&Itemid = 【 分配的节目标识】
&FeeNumber = 【计费号码,短信产生的费用由该号码承担】
&Feetype =【收费操作类型 2 点播 (按条) 类 3 定制类 包括包月定制,按条定制】
&CTtag  = 【点播的节目名称标签 区分所点播的内容,在点播DeliverUrl 里跟有此值,点播(FeeType=2)可用。定制类(FeeType=3)不带此参数】
&backUrl = 【用户操作成功后 返回的主页面地址,必须为文件名结尾,如:http://123.com/index.jsp 】
&deliverurl= 【用户点播成功后,为用户下行短信处理的页面地址,必须为文件名结尾,如:http://123.com/deliver.jsp(点播必须) 】
   &OverIP =【用户的登陆IP地址 定制包月时必须带有此参数 】
1.1.6.2 返回BackUrl页面指令
SSO中心 ==> backUrl ?
CommandID= 【服务产生的业务处理标识】
&ResultID= 【业务处理状态:0表示成功 其他表示失败】
&ResultString =【此业务处理结果,ResultID =0时,为OK 成功,其他为错误类型】
&sessionID= 【业务处理临时Session, 扩展 可以不处理(可选)】
1.1.6.3 返回DeliverUrl页面指令
SSO中心 ==> deliverUrl ?
        CommandID= 【服务点播产生的业务处理标识】
       &ItemID= 【节目标识】
        &UserNumberType=【接受方类型0真实码 1伪码】        
      &UserNumber= 【接受方手机号码,多个号码之间以","分开 】
      &FeeNumberType= 【计费方类型 0真实码 1伪码】
      &FeeNumber= 【计费号码,产生的费用由该号码承担 】
&LinkID=  【对应接受方手机号的鉴全标识,下发短信时带上此标识,多个之间以","分开】
      &CTtag= 【 针对点播的 内容标签 对应Order 里CTtag 】
      
      回应:OK  回车换行  
1.1.6.4 用户登陆【移动梦网窗口】
将此下<iframe>镶套在短信主页的左上角。
<iframe width=180 height=153 name=sp_login src=http://sso.monternet.com/sp_logon.jsp?ICPCode=902160# border=0 frameborder=0></iframe>

1.1.6.5 SSO 点播/定制下发短信格式
注:下发短信格式见“短信接口协议”    
点播:
如:
http://211.154.164.235:8030/Submit%20CommandId=1&Name=testname&Pwd=88888&ItemId=1234&SpNumber=9160&UserNumbertype=0&UserNumber=
13999999999&FeeNumberType=0&FeeNumber=13999999999&FeeType=2&LinkID=1234567890&MsgCode=15&Msg:=
54455354

定制:
如:
http://211.154.164.235:8030/Submit%20CommandId=1&Name=testname&Pwd=88888&ItemId=1234&SpNumber=9160&UserNumbertype=0&UserNumber=
13999999999&FeeType=1&ItemType=1&MsgCode=15&Msg:=54455354
   
1.1.7 网站联盟
根据【SSO接口协议】扩展使用!
(正在整理中)
2 彩信协议
2.1 分发中心接口
参照短信协议
2.1.1 TCP接口协议
参照短信协议
2.1.1.1 连接登陆指令
参照短信协议
2.1.1.2 接收用户上行指令
  该指令是由分发中心向服务方发送用户的短信请求,格式如下:
 
 分发中心==>Deliver (空格)
 CommandId=【命令标识,4字节整型,循环使用】
 &GateName=【源网关名】
 &ItemId=【节目标识,由服务方申请,业务分配】
 &UserNumber:=【用户号码】
 & toNumber:= 【下发用户号码群,不同号码用逗号隔开】
 & ccNumber:= 【抄送用户号码群,不同号码用逗号隔开】
 & bccNumber:= 【密送用户号码群,不同号码用逗号隔开】
 &SpNumber=【服务号码,必须以9160开头】
 &MsgCode=【短信编码,0:ASCII串;3:短信写卡操作;4:二进制信息;8:UCS2编码;15:含GB汉字;24:UCS2编码闪电短信(Msg<=69个汉字),124:GBK编码闪电短信(Msg<=69个汉字)】
   &Msg:=【短信内容,经加码处理,需解码】
   &ContentID:=【内容标识,需加码处理】
   &ContentType=【内容类型】
   &Content:=【内容,需加码处理】
   &ContentID1:=【内容1标识,需加码处理】
   &ContentType1=【内容1类型】
   &Content1:=【内容1,需加码处理】
 ... …
   &ContentID(n):=【内容n标识,需加码处理】
   &ContentType(n)=【内容n类型】
   &Content(n):=【内容n,需加码处理】
 &LinkID=【要求对于该MO引起的MT下发时附带该参数】

 (回车换行)
 
 回应:Received CommandId=【对应于发送时的命令标识】(回车换行)
 注: ContentID(n)、,ContentType(n)、Content(n)的n代表实际的序列号,例如第5个内容ID应该为 ContentID5。Msg的内容一般被设置成遇到的第一个类型为文本类型的内容,而且后面的内容参数中也会出现该参数,设置Msg是为了获取用户指令方便,并向短信兼容。
2.1.1.3 下发彩信给用户
  服务方向分发中心提交发送的短信内容,格式如下:
 
  服务方==>Submit (空格)
 CommandId=【命令标识,4字节整型,循环使用】
 &GateName=【目的网关名,彩信的网关必须设置成“mms”,否则会作为短信下发】
   &ItemId=【节目标识,由服务方申请,业务分配】
   &SpNumber=【服务号码,以9160or8833开头】
   &UserNumber:=【目的用户号码,如果是群发将个号码之间用“,”隔开,注意最多只能有255个群发号码,彩信中将以To的方式下发】
 & MContentType =【彩信类型,可以不设置,不设置时被定为“application/vnd.wap.multipart.mixed”】
   &FeeNumber:=【计费号码,短信产生的费用由该号码承担,不填时默认向目的用户号码收费】
   &FeeType=【计费类型,免费1收费2】
   &ScheduleTime=【定时发送时间,默认立即发送,格式举例:2002年09月10日20:08:00为:020910200800】。
   &ExpireTime=【短信寿命中止时间,格式举例:021201090508,默认为移动或联通(24小时后)中止时间】
   &ReportFlag=【状态报告标志,0:不需要状态报告;1:无论成功与否都返回状态报告;3:只有最后出错时要返回状态报告(联通有效,移动同1),默认:0】
   &MsgId=【用户自定义消息标识,推荐格式:月日时分秒+6位自递增码,例如:9月23日10:00:03发出的序号为1记录可定义为 923100003000001。自定义格式最大不超过20个字符且不能有需加码解码的特殊字符】,如果不需要回馈报告可以不写该参数和ExtData参数。
   &ExtData:=【短信扩展数据,服务方短信发送的附加信息,在有报告反馈时会连带该扩展数据反馈给服务方,需加码处理,但加码后不能超过120个字节长度。默认为空串】
   &OverIp=【从网页定制时用户的IP地址,要求在初次包月或点播定制时带有该字段,点播一定在初次收费下发时带有该字段】
   &Msg:=【彩信标题,需加码处理】
& ItemType=【指令类别,0:点播类指令,1:定制类指令(只要是定制节目,无论是下发包月还是下发免费信息,都要求选择值1),2:取消定制指令(只真对联通),3:失败指令(只真对联通,例如定制失败和退订失败),4:移动、联通首次点播包月指令(只在首次建立定制关系时使用,之后按值1发送即可),默认为0】
&MContentType:=【彩信全局格式,默认为:application/vnd.wap.multipart.mixed,需要加码,一般Smil格式应该是:application/smil】
   &ContentID:=【内容标识,需加码处理】
   &ContentType:=【内容类型,对于Smil格式,类型设置为text/plain等】
   &Content:=【内容,需加码处理,对于Smil格式,为smil文件内容,对于后续的ContentID1、ContentType1、Content1…,一般为smil文件中对象的描述】
   &ContentID1:=【内容1标识,需加码处理】
   &ContentType1:=【内容1类型】
   &Content1:=【内容1,需加码处理】
 ... …
   &ContentID(n):=【内容n标识,需加码处理】
   &ContentType(n):=【内容n类型】
   &Content(n):=【内容n,需加码处理】
 &LinkID=【要求对于该MO引起的MT下发时附带该参数】 

   (回车换行)
   
 回应:Received CommandId=【对应于发送时的命令标识】(回车换行)
 注: ContentID(n)、,ContentType(n)、Content(n)的n代表实际的序列号,例如第5个内容ID应该为 ContentID5。Msg的内容在这里被作为标题用了,因此只能是文本。彩信的网关&GateName必须设置成“mms”,否则会作为短信下发
以后发送定制包月时要求:FeeType=1,ItemType=1
以后发送点播包月时要求:FeeType=2,ItemType=1

2.1.1.4 接收发送报告
指令在发送过程中出现各种成功、错误等状态变化,以及移动在彩信提交给用户后的状态反馈都以报告方式发送给源发送方。分发中心向服务方发送报告,格式如下:
 
   分发中心==>Report (空格)
 CommandId=【命令标识,4字节整型,循环使用】
 &GateName=【源网关名】
   &MsgId=【服务方在Submit时写在MsgId参数中的值】
 &ExtData:=【服务方在Submit时写在ExtData参数中的值】
 & State=【发送状态,0:向网关提交成功(中间状态,后续还会有报告反馈),1:向网关提交失败,2:发送成功,3:等待发送(中间状态,后续还会有报告反馈),4:发送失败,5:Submit参数错误,6:定制被拒绝[该用户已经订制了该费率的服务,或当月已收取该用户的费用,不能再下发包月收费,故被拒绝。],7:黑名单用户,8:该手机单日流量超限,9:限制发送】
 &StateMsg=【附加状态信息,对于State的解释文字】
   &UserNumber:=【目的用户号码】
 &FeeNumber:=【该包月对应的计费号码,对于移动的报告反馈可能会没有该字段,只有UserNumber】
 &FeeType=【报告对应指令的计费类型,1:免费,2:按条计费,3:定制包月计费】
 &ItemId= 【报告对应指令节目标识】
 (回车换行)

 回应:Received CommandId=【对应于发送时的命令标识】(回车换行)

 注:只要是报告发送失败请先找原因,不要再重发,只要有错无论重发多少次都是失败。

2.1.1.5 接收定制状态变更
分发中心向服务方通报定制状态变化,格式如下:
   分发中心==>Orderchg (空格)
 CommandId=【命令标识,4字节整型,循环使用】
   &ItemId=【节目标识】
   &UserNumber:=【取消/定制的手机号码】
 &UserNumberType=【0:用户号码为真实号码,1:用户号码为伪码】
 &DestNumber:=【取消/定制的第三方赠送手机号码】
 &DestNumberType=【0:用户号码为真实号码,1:用户号码为伪码】
   &OrderState=【变更状态,0:用户取消定制,1:用户定制节目,2:暂停节目,3:激活节目,默认:0】
 &Reason:=【原因,最多40个字节】
 &Msg:=【表示当移动用户通过MO方式建立定制时所发送的定制指令的内容】
 (回车换行)

 回应:Received CommandId=【对应于发送时的命令标识】(回车换行)
2.1.1.6 主动变更定制状态
服务方主动建立或取消定制关系
   服务方==>Ordersub (空格)
 CommandId=【命令标识,4字节整型,循环使用】
 &GateName=【取消手机所属网关名】,默认由分发中心根据手机号码决定目的网关名】
   &ItemId=【节目标识】
   &UserNumber:=【取消定制的手机号码】
 &UserNumberType=【0:用户号码为真实号码,1:用户号码为伪码,默认:0】
 &DestNumber:=【取消定制的第三方赠送手机号码】
 &DestNumberType=【0:用户号码为真实号码,1:用户号码为伪码】
 &OrderType=【提交类型,0:仅执行变更操作,1:执行变更操作向其他节目通知(需要特定权限2),2:不执行变更操作仅向其他节目通知(需要特定权限2),默认:0】
   &OrderState=【变更状态,0:用户取消定制,1:用户建立定制,2:取消其他节目的定制(需要特定权限2),3:已建立其他节目的定制(需要特定权限3),4:暂停其他节目的定制(需要特定权限2),5:激活其他节目的定制(需要特定权限3),默认:0】
   &MonthType=【建立定制时的包月类型,0:定制包月,1:点播包月,默认:0】
   &OverIp=【从网页定制时用户的IP地址,要求在初次包月或点播定制时带有该字段,点播一定在初次收费下发时带有该字段】
 &Reason:=【状态变更原因,最多40个字节】
 &Msg:=【移动用户在发送定制时发送的定制指令内容】
   &MsgId=【用户自定义消息标识,推荐格式:月日时分秒+6位自递增码,例如:9月23日10:00:03发出的序号为1记录可定义为 923100003000001。自定义格式最大不超过20个字符且不能有需加码解码的特殊字符】,如果不需要回馈报告可以不写该参数。
   &ExtData:=【短信扩展数据,服务方短信发送的附加信息,在有报告反馈时会连带该扩展数据反馈给服务方,需加码处理,但加码后不能超过120个字节长度。默认为空串】
 (回车换行)

 回应:Received CommandId=【对应于发送时的命令标识】(回车换行)

注意:参数中注明需要特定权限的参数值是为系统的特殊需要建立的,合作方是不能发送这些参数的,如果发送,会立即报错的。

2.1.1.7 附录部分彩信内容的格式,供参考,具体要自己做测试:
MIME Type
目前主要使用的消息内容体格式
可以参见WAP-203-WSP (WAP Forum)文档相关部分下面是目前彩信手机支持的主要格式
audio/mid
audio/midi
audio/sp-midi
audio/mpeg
image/vnd.wap.wbmp
image/jpeg
image/gif
image/bmp
image/vnd.nok-oplogo-color
image/png
image/vnd-nok-camera-snsp
image/vnd.nok-wallpaper
text/vnd.wap.wml
text/vnd.wap.wmlscript
text/x-co-desc
text/x-vCalendar
text/x-vCard
text/plain
text/x-eMelody
text/x-iMelody

3 联盟协议
3.1 协议说明
联盟协议针对部分特殊类型业务的协议,这部分业务的特征是:
1、 用户初次定制需要的咨费下发和定制说明是有系统来下发的,由合作方提起请求,系统自动根据业务规定的格式要求下发咨费和定制说明。
2、 定制过程以及咨费下发不成功后重试都是在系统部分完成,合作方不用去了解,但对于定制成功和收费成功或失败会给合作方反馈状态报告,供合作方核对用。用户取消也会通知合作方。系统此时还会自动针对该手机号码生成登陆密码下发给用户,同时传给合作方。
3、 合作方需要根据定制成功和取消状态的变化来决定是否给用户服务。

3.2 请求发起定制
  由合作方向分发中心提起发起定制,分发中心将根据该请求向用户发送一条免费咨费和定制说明,对于已经建立定制的用户,将回馈“重复定制”的失败报告,格式如下:
 
  服务方==>OrderReq (空格)
 CommandId=【命令标识,4字节整型,循环使用】
 &GateName=【目的网关名,该参数为空时默认由分发中心根据手机号码决定目的网关名】
   &ItemId=【节目标识,由服务方申请,业务分配】
   &UserNumber:=【目的用户号码】
 &UserNumberType=【0:用户号码为真实号码,1:用户号码为伪码】
   &OverIp=【从网页定制时用户的IP地址,要求在初次包月或点播定制时带有该字段,点播一定在初次收费下发时带有该字段】
(回车换行)

 回应:Received CommandId=【对应于发送时的命令标识】(回车换行)

3.3 请求给用户下发定制密码
  由合作方向分发中心请求给用户下发定制密码,分发中心将根据该请求向用户发送一条免费的密码,格式如下:
 
  服务方==>PwdReq (空格)
 CommandId=【命令标识,4字节整型,循环使用】
 &GateName=【目的网关名,该参数为空时默认由分发中心根据手机号码决定目的网关名】
   &ItemId=【节目标识,由服务方申请,业务分配】
   &UserNumber:=【目的用户号码】
 &UserNumberType=【0:用户号码为真实号码,1:用户号码为伪码】
   &OverIp=【从网页定制时用户的IP地址,要求在初次包月或点播定制时带有该字段,点播一定在初次收费下发时带有该字段】
(回车换行)

 回应:Received CommandId=【对应于发送时的命令标识】(回车换行)

3.4 接收发送报告
指令在发送过程中出现各种成功、错误等状态变化,以及移动在短信提交给用户后的状态反馈都以报告方式发送给源发送方。分发中心向服务方发送报告。对于由系统发送的收费短信的成功或失败报告,我们也会及时以下面格式发给合作方,供合作方及时了解自己的业务收入和发送情况。格式如下:

   分发中心==>Report (空格)
 CommandId=【命令标识,4字节整型,循环使用】
 &GateName=【源网关名】
   &MsgId=【服务方在Submit时写在MsgId参数中的值】
 &ExtData:=【服务方在Submit时写在ExtData参数中的值】
 & State=【发送状态,0:向网关提交成功(中间状态,后续还会有报告反馈),1:向网关提交失败,2:发送成功,3:等待发送(中间状态,后续还会有报告反馈),4:发送失败,5:Submit参数错误,6:定制被拒绝[该用户已经订制了该费率的服务,或当月已收取该用户的费用,不能再下发包月收费,故被拒绝。],7:黑名单用户,8:该手机单日流量超限,9:限制发送】
 &StateMsg=【附加状态信息,对于State的解释文字】
   &UserNumber:=【目的用户号码】
 &UserNumberType=【0:用户号码为真实号码,1:用户号码为伪码】
 &FeeNumber:=【该包月对应的计费号码,对于移动的报告反馈可能会没有该字段,只有UserNumber】
 &FeeNumberType=【0:计费号码为真实号码,1:计费号码为伪码】
 &FeeType=【报告对应指令的计费类型,1:免费,2:按条计费,3:定制包月计费】
 &ItemId= 【报告对应指令节目标识】
 (回车换行)

 回应:Received CommandId=【对应于发送时的命令标识】(回车换行)

 注:只要是报告发送失败请先找原因,不要再重发,只要有错无论重发多少次都是失败。
3.5 接收定制状态变更
分发中心向服务方通报定制状态变化,格式如下:
   分发中心==>Orderchg (空格)
 CommandId=【命令标识,4字节整型,循环使用】
   &ItemId=【节目标识】
   &UserNumber:=【取消定制的手机号码】
 &UserNumberType=【0:用户号码为真实号码,1:用户号码为伪码】
   &OrderState=【变更状态,0:用户取消定制,1:用户定制节目,2:暂停节目,3:激活节目,默认:0】
 &Reason:=【原因,最多40个字节】
 &Msg:=【表示当移动用户通过MO方式建立定制时所发送的定制指令的内容】
 &UserPwd=【只有OrderState=1时才有该参数】
 (回车换行)

 回应:Received CommandId=【对应于发送时的命令标识】(回车换行)
3.6 主动变更定制状态
服务方主动建立或取消定制关系
   服务方==>Ordersub (空格)
 CommandId=【命令标识,4字节整型,循环使用】
 &GateName=【取消手机所属网关名】,默认由分发中心根据手机号码决定目的网关名】
   &ItemId=【节目标识】
   &UserNumber:=【取消定制的手机号码】
 &UserNumberType=【0:用户号码为真实号码,1:用户号码为伪码,默认:0】
   &OrderState=【变更状态,0:用户取消定制,默认:0】
 &Reason:=【状态变更原因,最多40个字节】
   &MsgId=【用户自定义消息标识,推荐格式:月日时分秒+6位自递增码,例如:9月23日10:00:03发出的序号为1记录可定义为 923100003000001。自定义格式最大不超过20个字符且不能有需加码解码的特殊字符】,如果不需要回馈报告可以不写该参数。
   &ExtData:=【短信扩展数据,服务方短信发送的附加信息,在有报告反馈时会连带该扩展数据反馈给服务方,需加码处理,但加码后不能超过120个字节长度。默认为空串】
 (回车换行)

 回应:Received CommandId=【对应于发送时的命令标识】(回车换行)

注意:参数中注明需要特定权限的参数值是为系统的特殊需要建立的,合作方是不能发送这些参数的,如果发送,会立即报错的。
3.7 针对联盟的TCP和HTTP接口说明
参加5
4 开机探测协议
4.1 协议说明
这个协议主要用户探测某手机号码是否开机,然后将结果反馈给提交的手机的服务。该协议能使用的节目必须是业务做过特殊设置允许服务的节目,否则会反馈错误
4.2 查询用户是否在开机状态
服务方向分发中心提交指令查询用户是否在开机状态,仅支持移动用户,格式如下:
 
  服务方==>QueryUserinfo (空格)
 CommandId=【命令标识,4字节整型,循环使用】
   &ItemId=【节目标识,必须为免费业务】
   &SUserNumber:=【发起查询的手机号码,如果是网页发起可以为空】
   &UserNumber:=【需要查询的手机号码】
   &MsgId=【用户自定义消息标识,推荐格式:月日时分秒+6位自递增码,例如:9月23日10:00:03发出的序号为1记录可定义为 923100003000001。自定义格式最大不超过20个字符且不能有需加码解码的特殊字符】,必需,系统返回查询结果(ReturnUserinfo)将带入此参数
&ExpireTime=【查询过期时间,格式举例:021201090508,范围:发送后1~24小时之间,默认为(24小时后)】
(回车换行)

 回应:Received CommandId=【对应于发送时的命令标识】(回车换行)
4.3 返回用户开关机状态
分发中心向服务方返回用户开关机状态,仅支持移动用户,格式如下:
   分发中心==> ReturnUserinfo(空格)
 CommandId=【命令标识,4字节整型,循环使用】
   &ItemId=【节目标识】
   &UserNumber:=【查询的手机号码】
&MsgId=【服务方在QueryUserinfo时写在MsgId参数中的值】
   &State=【开关机状态,2:表示查询到结果为开机,此次查询中止;1:表示查询到结果为已关机,查询未中止,如果在过期时间之前用户开机,返回2,如果在过期时间之前用户没有开机,则中止此次查询,不再返回结果;5:无效参数itemid;4:用户号码问题,详情查看参数 StateMsg】
 &StateMsg:=【查询结果的中文说明,最多40个字节】
 (回车换行)

 回应:Received CommandId=【对应于发送时的命令标识】(回车换行)
5 MIX平台协议
该平台提供一种模式,将合作方分为AD(广告宣传和号码拥有合作方)、TP(技术实现提供合作方)、CP(内容提供合作方),允许某个AD实现任意我们的其他TP和CP提供的节目,然后在产生利润后由AD、我们、提供服务的TP、提供服务的CP来组合分帐,大家各自发挥自己的特长。
模型如下:
 
AD、TP、CP跟节目中心的通信都通过分发中心来实现,具体协议参见1.1.1的TCP协议部分。

1. AD对于接收到的MO经过判定,发现是需要共享联盟协议的节目,那么发起请求指令给节目中心,那么把MO指令稍做变动,转发给节目中心来处理,指令格式为:
AD合作方==>CtCmd (空格)
Command= Deliver
 &CommandId=【命令标识,4字节整型,循环使用(注意,此参数应该重新生成,而不是沿用上行指令的CommandId)】
  &GateName=【源网关名】
&SrvId=【指令发起方的服务ID】
  &ItemId=【节目标识,由服务方申请,业务分配】
  &UserNumber:=【用户号码】
  &UserNumberType=【0:用户号码为真实号码,1:用户号码为伪码】
  &SpNumber=【服务号码,必须以9160开头】
    &TP_pId=【GSM协议类型。详细解释请参考GSM03.40中的9.2.3.9】
    &TP_udhi=【GSM协议类型。详细解释请参考GSM03.40中的9.2.3.23,仅使用1位,右对齐】
  &MsgCode=【短信编码,0:ASCII串;3:短信写卡操作;4:二进制信息;8:UCS2编码;15:含GB汉字;24:UCS2编码闪电短信(Msg<=69个汉字),124:GBK编码闪电短信(Msg<=69个汉字)】
    &Msg:=【短信内容,经加码处理,需解码】
    &LinkID=【要求对于该MO引起的MT下发时附带该参数】
  &AreaCode=【手机所在地区,格式为:(区号,类型,省份,城市)】
    &MsgId=【用户自定义消息标识,要求必须格式:月日时分秒+6位自递增码,例如:9月23日10:00:03发出的序号为1记录可定义为923100003000001。】,如果没有该参数或格式不对,节目中心会自动生成该参数。另外,如果该条指令产生了多条Mt下发,则节目中心或多条下发的产生cp会自动在该MsgId参数后续1~5位识别数字,以区别各条下发。
  &FuncID=【请求的功能模块号,次序为1,如果业务没有特殊要求可以不用写】
  &FuncID1=【请求的功能模块号,次序为2,如果业务没有特殊要求可以不用写】
... ...
&FuncIDn=【请求的功能模块号,次序为n,如果业务没有特殊要求可以不用写】
  (回车换行)
 
回应:Received CommandId=【对应于发送时的命令标识,注意,此指令是分发中心回应的,不是节目中心回应的,因为所有指令都是有分发中心转发给节目中心的】(回车换行)

2. 节目中心接收到AD发来的请求后,根据情况向TP或CP发起节目请求,格式如下:
节目中心==>ReqCmd (空格)
CommandId=【命令标识,4字节整型,循环使用(注意,此参数应该重新生成,而不是沿用上行指令的CommandId)】
&ToSrvId=【TP或CP的服务ID】
  &GateName=【源网关名】
  &ItemId=【节目标识,由服务方申请,业务分配】
  &UserNumber:=【用户号码】
  &UserNumberType=【0:用户号码为真实号码,1:用户号码为伪码】
  &MsgId=【用户自定义消息标识,该参数前15位必须与AD请求指令的MsgId相同】
... ...
【后续指令部分根据不同TP和CP有所不同,具体由TP、CP跟技术协商】

回应:Received CommandId=【对应于发送时的命令标识,注意,此指令是分发中心回应的,不是节目中心回应的,因为所有指令都是有分发中心转发给节目中心的】(回车换行)

3. TP和CP接收到节目中心的指令后,根据情况反馈服务内容给节目中心,格式如下:
TP或CP==>BackCmd (空格)
CommandId=【命令标识,4字节整型,循环使用(注意,此参数应该重新生成,而不是沿用上行指令的CommandId)】
&ResultType=【0:不能服务,1:成功服务,2:拒绝服务】
&Reason=【失败或拒绝的原因,如果成功可以不写该参数】
  &GateName=【源网关名】
  &SrvId=【指令发起方的服务ID】
  &ItemId=【节目标识,由服务方申请,业务分配】
  &UserNumber:=【用户号码】
  &UserNumberType=【0:用户号码为真实号码,1:用户号码为伪码】
  &MsgId=【用户自定义消息标识,必须与ReqCmd请求指令的MsgId参数相同,或者因为ReqCmd的请求产生了多条信息,那么可以在原MsgId后续识别码,但MsgId的总长不能超过20】
  & NextFuncID=【下一步要请求的功能模块标识,对于TP或CP在回复内容时,发现必须要到另外一个功能模块才能完成完整服务,则可以加该参数,告诉节目中心把该指令的内容作为NextFuncID模块的输入参数通过ReqCmd去请求NextFuncID的接口模块,以获得最终的下发结果】
... ...
【后续指令部分根据不同TP和CP有所不同,具体由TP、CP跟技术协商】

4. 节目中心根据收到的TP或CP的反馈来生成最终的下发结果,直接下发结果给用户,格式参加Submit指令,另外需要加上所有提供服务的 FuncID(功能模块标识,每个功能模块标识对应于某TP或CP提供的一种服务)以及每个功能模块附加的MsgID值,格式为:&FuncID =【值】&FuncID1=【值1】&FuncIDn=【值n】&MsgID=【值】。

5. 如果TP或CP反馈结果的参数ResultType不为1时,节目中心要根据情况请求别的同类功能模块,如果已经没有可替换的方案,则直接给AD回应失败,并告知失败的FuncID号,格式如下:
节目中心==>BackCmd (空格)
CommandId=【命令标识,4字节整型,循环使用(注意,此参数应该重新生成,而不是沿用上行指令的CommandId)】
&ResultType=【0:不能服务,2:拒绝服务】
  &GateName=【源网关名】
  &ItemId=【节目标识,由服务方申请,业务分配】
  &UserNumber:=【用户号码】
  &UserNumberType=【0:用户号码为真实号码,1:用户号码为伪码】
  &FuncID=【最后请求识别或被拒绝的服务模块标识】
&ToSrvId=【AD的服务ID】
&Reason=【失败或拒绝的原因】
&MsgId=【用户自定义消息标识,与反馈结果的BackCmd参数值相同】
... ...
【后续指令部分根据不同TP和CP有所不同,具体由TP、CP跟技术协商】

6 针对TCP和HTTP接口说明
1、 Tcp接口的登陆和注册参见1.1.1的Tcp接口协议,登陆注册完成后就可以按照联盟的协议规则发送和接收指令了。联盟协议被设定为对应于节目,也就是说对于设定为联盟协议的节目必须按联盟协议方式下发,而非联盟方式还是按原来协议的方式下发,对于针对联盟协议节目下发,不能不能其他协议的指令,否则回馈错误。也就是说一个连接可能根据下发的节目的不同使用不同的协议指令。
2、  Http接口的指令参见1.1.3,对于下发指令来说只是每个指令都要求有登陆名和密码,也就是说在联盟指令里面加上&Name=【注册名】 &Pwd=【注册密码】参数,就可以通过Http连接方式下发联盟指令了。接受http指令时,Tcp指令的命令被转换为Command=【指令】这么一个参数,接收http指令最好带地址验证,目前需要验证地址就是1.1.1提到的几个服务器的地址。

7 版本变更说明
1.0版本:前期没有定义版本号的时候统一作为1.0版本。
1.1版本:增加了小灵通短信的示例。此次小灵通只能下发北方10省(网通部分),电信的小灵通正在申请。另外,小灵通收费短信发送失败禁止重新发送,这是网通的规定,免费的可以重发,但别发的次数太多。
2.0版本:增加了彩信功能
2.01版本:对彩信Submit指令的参数FeeType,ItemType做了变更,要求如下:
对于初次建立包月定制要求:FeeType=3,ItemType=1
对于初次建立点播定制要求:FeeType=2,ItemType=4
以后发送定制包月时要求:FeeType=1,ItemType=1
以后发送点播包月时要求:FeeType=2,ItemType=1
2.02版本:对于TCP指令,原来忘记把测试指令ActiveTest加入了,现在添加上。
2.03版本:添加小灵通点播定制要求,要求初次点播定制itemtype=4先建立定制,否则后续下发内容会被拦截。
2.04版本:接网通通知,小灵通改造后将不允许设定ScheduleTime和ExpireTime。
3.00 版本:分发中心改为多分发中心,各接口合作方可根据业务分配连接某一个分发中心,个别特殊需要的可以分配连接多个分发中心。连接类型增加稳定发送和稳定接收2种类型。对于移动,同一Linkid只允许一次收费,后续下发都将被置成免费。下发短信允许一条指令下发多条内容,作为多条短信来收费(移动的点播不适用该条,对于移动的点播,同一linkid只有第一条能收费)。
3.10版本:增加了联盟接口协议
3.20版本:增加了开机探测协议
3.21版本:上行和报告增加地区参数
3.21版本:增加了彩信上misc后的新变更,点播带有linkid,定制通过orderchg传送。无反向定制。修改了部分描述。
3.30版本:增加MIX平台协议

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值