|
为了方便股民在他的股票资金帐户和银行帐户之间方便的进行资金的划拨,需要设计一个应用层协议来实现这个功能。一般都是基于TCP/IP协议设计高层的应用协议,并通过特定的应用程序实现这个功能。现在的实现都是基于客户/服务器模式来实现这个功能,证券公司做为客户端,而银行做为服务器端。这样,证券公司很大程度上只能选择一家银行来实现帐户的划拨,这样对于在其他银行开户的用户就相对不是很方便。 我们设计了一个通过WWW服务器之间的通讯实现转帐的协议体系结构,能够保证一个证券公司同时可以和多个银行进行交互,而同时,一个银行也可以同时和多个证券公司进行交互。 我们协议的设计是基于XML的标记模型(元素/属性)而建立的。我们的目的之一是建立一个和实现无关的通讯协议。每一个消息由一个有效的XML文档组成,在通讯的两端(银行和证券)通过发送和接收文档来进行交互。 实际上我们的协议是建立在HTTP基础上,是通过HTTP来进行传输的。我们采用的是HTTP的POST/Response机制。我们协议的本身没有考虑安全问题,因为W3C组织正在制定一些非常可靠的安全机制,我们的通讯安全完全可以通过这些机制来实现。同时加密也可以在传输层实现,比如通过SSL,PGP或者是S/MIME。通讯双方可以通过在通讯层使用证书的方法进行认证。
协议设计的总体说明 用户的资金能够在证券公司和银行之间进行划拨的前提是用户必须在银行和证券公司都拥有自己的帐号,比如在证券公司用户需要有股票资金帐户,在银行需要有活期帐户(只有活期存款可以随时进行划拨)。我们设计的协议不考虑这些帐号的开户,即我们认为这些帐号是已经建立起来了。 我们设计的协议允许用户既可以在银行,也可以在证券公司办理转帐功能。只要这两个机构已经连网并且用户在这两个机构都拥有自己的帐号。实际上,比如在银行端,银行会保存和该用户活期存款帐号相关的所有信息,如果用户需要在银行端办理转帐功能,只要用户能够提供银行活期存款帐号的号码和正确的密码,同时又能够提供证券公司的资金帐号和密码,系统首先会在本地查找该活期存款帐号是否存在,密码是否相符,如果是的话,会判断该活期存款帐号是否已经和用户提供的证券公司的资金帐号相关联,如果已经相关联的话,就返回一个错误信息,表示用户已经办理过该业务。如果还没有相关联的话,银行通讯服务器就会和证券公司的相关的通讯服务器相联系,如果证券公司返回信息认为用户提供的资金帐号和密码都是正确的话,这样就在银行和证券公司的相关的数据库中分别加上标志,来表明某个特定的资金帐号已经和某个特定的活期存款帐号相关联。这样,转帐功能就建立起来了。同时,会随机生成一个授权码,该授权码是用户进行转帐时所需要键入的密码,用来表示用户有权限执行这个操作。事实上,在证券公司端办理转帐功能的基本流程也和这个相类似。 当用户已经办理了转帐功能以后,事实上,用户可以自己通过浏览器(需要支持XML格式)自行进行资金帐户的划拨。在划拨的时候需要注意的是,只有帐户中的余额大于要划拨的款项的时候才能进行划拨。在满足这个条件的情况下,用户既可以把活期存款中的部分款项划拨到资金帐户中,也可以把资金帐户中的款项划拨到活期存款中。大大方便了用户资金的调度和操作。 我们设计的协议主要是针对证券公司的转帐服务器和银行的转帐服务器之间的通讯而言的,一个证券公司的转帐服务器可以和多个银行的转帐服务器进行通讯,而一个银行的转帐服务器也可以同时和多个证券公司的转帐服务器进行通讯。事实上,可以认为这些通讯服务器都是WWW服务器。
协议设计细节描述 下面我们具体描述协议的设计和相关的实现的细节: 协议包总体格式 首先我们来看整个通讯协议的总的体系结构: < !ELEMENT 信息负载 (信息头,(请求信息响应信息))> < !ATTLIST 信息负载 版本号 CDATA #REQUIRED 时间标签 CDATA #REQUIRED > 一条消息主要有三个元素组成:信息负载,信息头和请求信息或者是响应信息。信息负载是对这个数据包属性的描述,信息头用来表示信息的发送者和接收者,请求信息或者是响应信息是消息的主体内容。
信息负载包括两个属性: 版本号:用来表示通讯所使用的版本,必须保证通讯双方使用相同的版本号。这里我们设置为1.0 时间标签:用来表示该数据包发出的时间。实际时间标签的格式我们设定为:YYYY:MM:DDTHH:MI:SS,其中T是日期和时间的一个分隔标志符。比如:2000:03:01T10:22:33就是一个有效的时间标签。
下面是关于信息头的定义: <!ELEMENT 信息头(信息发送者,信息接收者)> 信息头主要有两部分组成,信息的发送者和信息的接收者。用来表示消息的发出方和消息的接收方。消息发送发出方和接收方拥有相同的属性。它们的定义格式如下: < !ELEMENT 信息发送者 EMPTY> < !ATTLIST 信息发送者 名称 CDATA #REQUIRED 发送者ID CDATA #REQUIRED 角色 (银行证券)#REQUIRED > < !ELEMENT 信息接收者 EMPTY> < !ATTLIST 信息接收者 名称 CDATA #REQUIRED 接收者ID CDATA #REQUIRED 角色 (银行证券)#REQUIRED > 它们都拥有三个属性:其中名称是指消息发送方或者是接收方的名称,比如:工商银行上海市分行就是一个有效的发送方或者是接收方的名称。接收者ID是用来唯一的标识一个发送方或者是接收方,在实现的时候有两种机制。一种是简单的用URL作为对发送方或者是接收方的唯一标识。另外,可以对每一个发送方或者是接收方建立一个UUID,保证唯一的标识一个发送方或者接收方。角色是指消息发送或接收者的身份,是银行还是证券公司。
上一篇:编写结构完整的XML文档
下一篇:用XML+VBS在ASP中实现报表的打印
|