协议处理
协议分析
协议封装
|
手机端和服务器端进行通信,需要用协议来约束 ①如果是简单的话,就直接在get和post请求中带过去了 ②如果是复杂的,需要一个自定义协议文档来说明这个协议是什么(xml否则json) |
数字,文本,日期等的格式化,找包java.text, DecimalFormat,SimpleDateFormat |
协议分析: |
一、发送协议 举例:查询指定玩法可销售期信息: ①手机端要发送给服务器端的数据xml格式 <?xml version=”1.0” encoding=”utf-8”?>
<message version="1.0">
<header>
<agenterid>889931</agenterid>
<source>ivr</source>
<compress>DES</compress>
<messengerid>20091113101533000001</messengerid>
<timestamp>20091113101533</timestamp>
<digest>7ec8582632678032d25866bd4bce114f</digest>
<transactiontype>12002</transactiontype>
<username>13200000000</username>
</header>
<body>
<elements>
<element>
<lotteryid>118</lotteryid>
<issues>1</issues>
</element>
</elements>
</body>
</message>②发送协议大概分析 ③发送协议详细介绍 header: 第一部分:常量
第二部分:用代码组装的信息
第三部分:在协议创建时无法处理 body: elements:看成集合List<Element> element:封装请求数据(不同的请求,封装的数据不一样)
④实际上用于传递给服务器的xml数据 <!--用于传输的内容-->
<?xml version='1.0' encoding='utf-8' ?>
<message version="1.0">
<header>
<messengerid>20120803102102460191</messengerid> //发送的xml文件唯一标识
<timestamp>20120803102102</timestamp> //时间戳
<username>13200000000</username> //用户名
<transactiontype>12002</transactiontype> //请求操作的类型
<digest>1b10c6d719c78cdb70c1d357978eff2a</digest> //body加密后的md5
<agenterid>1000002</agenterid> //子代理商id,如果刚开始,只有自己这一家,为了扩展而设置的
<compress>DES</compress> //加密body的加密算法
<source>ivr</source> //请求的来源
</header>
<body>
cgYNf1rUkTlcXIFjWR1NnuWWflFq2u/NSQCo9Y6CIoeP/lNAXxRbjHsc1rHY10YiJtdAEy4FJbdw0KqkI8zawTtrMsBViBBPDhLynlepFUd0XFAHNanlsA==
</body>
</message>
⑤服务器,服务器端接收到请求数据之后如何处理? 信息的核对: a、查询agenterid信息,代理的大量信息,代理的密码 b、进行DES(可逆)的解密body中的内容 从xml文件中: timestamp+代理的密码+完整的body(客户端生成的md5方式)
<body>cgYNf1rUkTlcXIFjWR1NnuWWflFq2u/NSQCo9Y6CIoeP/lNAXxRbjHsc1rHY10YiJtdAEy4FJbdw0KqkI8zawTtrMsBViBBPDhLynlepFUd0XFAHNanlsA==</body> timestamp+代理的密码+完整的body生成MD5(服务端的MD5信息)服务端也用该方法来解密 ⑥MD5 VS DES加密区别 1、MD5 时间戳+代理密码+完整body(<body>…</body>) 2、DES加密 body里面不含body标签的内容 |
二、其他发送协议书写
其他请求:两点不同之处
①transactiontype内容:不同的请求均不同
②element:不同的请求携带的数据不同
我们将重点处理五个请求:
⑴查询指定玩法可销售期信息(12002)
⑵用户注册(10001)
⑶用户登陆密码验证(14001)
⑷用户余额查询(11007)
⑸投注、发起方案 (12006)
玩法可销售期信息查询:
lotteryid string * 玩法编号,如果为空,则issues不起作用,并返回所有可以销售的最近的一期信息。
issues int * 需要获取的最大期数max=100期,1表示当前销售期
用户注册:(基本信息其他信息需要后续逐步完善)
nickname string 0-15 用户妮称
mail string 0-20 电子邮件
phone string 0-11 联系电话
actpassword string 5-20 账户安全密码
recommentuser string * 推荐用户名
用户登陆:
actpassword string 5-20 账户安全密码
用户余额查询:
无参数。DES加密内容<elements></elements>
投注:(最复杂的)
lotteryid string * 玩法编号
issue string * 期号(当前销售期)
lotterycode string * 投注号码,注与注之间^分割
lotterynumber string 注数
lotteryvalue string 方案金额,以分为单位
appnumbers string 倍数
issuesnumbers string 追期
issueflag int * 是否多期追号 0否,1多期
bonusstop int * 中奖后是否停止:0不停,1停
|