穿透式监管CTPAPI使用说明
穿透式监管穿透式监管 CTPAPICTPAPI 使用说明使用说明 文档修订历史记录 修改记录 V0.1 V1.1 修改 状态 创建 修改页码及条款修改人审核人批准人修改日期 内容申明 内部资料,注意保存。此文件属于上海期货交易所(以下简称交易所或者上期所)和上海期货信内部资料,注意保存。此文件属于上海期货交易所(以下简称交易所或者上期所)和上海期货信 息技术有限公司(以下简称技术公司)内部文件,包含敏感内容,未经交易所和技术公司负责人息技术有限公司(以下简称技术公司)内部文件,包含敏感内容,未经交易所和技术公司负责人 允许,不得对外展示本文件内容。允许,不得对外展示本文件内容。 目录目录 第第 1 1 章章 引言引言. . 2 2 1.1 实现目的 2 1.2 背景 2 1.3 定义 2 第第 2 2 章章 流程设计流程设计. . 3 3 2.1 终端认证方案 3 2.1.1背景条件 3 2.1.2 appid对应的授权码分发流程 . 3 2.1.3登录前认证 4 2.2 使用 CTP 交易 API 进行终端信息采集 6 2.2.1直接使用CTP交易API直连模式. 6 2.2.2使用中继服务器操作员登录模式 8 2.2.3使用中继服务器多对多登录模式 11 第第 3 3 章章 CTP APICTP API使用说明使用说明 . . 1 12 2 3.1 采集 API 使用说明 . 12 3.1.1采集API说明 12 3.2TRADERAPI. 12 3.2.1穿透式监管涉及到的API. 12 3.2.2客户使用流程 14 第第1 1章章 引言引言 1.11.1 实现目的实现目的 简要描述 CTP 对于终端数据采集和终端认证的实现方案。用于指导终端厂商正确 使用 CTP 的交易 API 和采集 API。 1.21.2 背景背景 证监会发布 《关于进一步加强期货经营机构客户交易终端信息采集有关事项的公告》 监控中心发布的《期货公司客户交易终端信息采集及接入认证技术规范》 关于进一步加强期 货经营机构客户交易终 1.31.3 定义定义 术语 TraderApi 期货公司客户交易 终端信息采集及接入认 术语说明 交易 API,提供登录、交易、银期等等 功能 采集 API 链接库负责采集终端信息的动态链接库, 只有 连接中继服务器的终端需要调用 直连类型终端直接连接到 CTP 交易系统的客户交易 终端 中继类型终端先连接到中继服务器,中继服务器再调 用 TraderAPI 连接到 CTP 交易系统的 客户交易终端 多对多类型中继服务器为每个客户终端,建立CTP API实例, 每个用户独占一个交易 API 实例的中 继服务器 多对一类型中继服务器为多个客户终端,建立一个 CTP API 实例, 使用操作员为多个客户进行交易 的中继服务器 第第2 2章章 穿透式监管方案设计穿透式监管方案设计 2.12.1 终端认证方案终端认证方案 2.1.12.1.1 背景条件背景条件 每个期货终端软件需要向期货公司申请自己的appid。 中继服务器软件需要向期货公司申请自己的relayappid。 2.1.22.1.2 appidappid 对应的授权码分发流程对应的授权码分发流程 期货公司确认终端软件集成了正确的数据采集模块后,为该 appid 的终端软件 分配授权码。终端软件需要保护好自己的appid 和授权码,防止被其他软件盗用。 2.1.2.12.1.2.1 直连终端认证流程直连终端认证流程 对于直接连接期货公司交易柜台的终端,期货公司确认终端软件集成了正确的 数据采集模块后。 给该终端软件 (根据 appid) 分配一个授权码。 这个授权码和 appid 是绑定的,当终端试图登录期货公司交易软件的时候,交易后台会验证该终端是否 持有合法的 appid 和授权码。 2.1.2.22.1.2.2 中继和中继下属终端的认证流程中继和中继下属终端的认证流程 对于使用中继服务器连接期货公司交易柜台的终端,期货公司确认终端软件集 成了正确的数据采集模块和确认中继可以正常报送终端信息后。期货公司给该终端 软件(根据appid)分配一个授权码,给中继服务器(根据semiapp) 分配一个授权 码。当终端登录中继服务器时,中继服务器负责验证终端的合法性;当中继服务器 登录期货公司交易软件的时候,交易后台会验证该中继服务器是否持有合法的 relayappid 和授权码。 2.1.32.1.3 登录前认证登录前认证 当客户直接使用 CTP 交易 API 时,客户的终端软件(或者中继服务器)必须存 有期货公司分配的授权码,在调用ReqAuthenticate()时填入 appid 和对应的授权码, 交易 API 将该授权码(暂定16 字节)缓存下来作为加密的AES_KEY,以对后续信 息进行 AES 加密。 接入认证的流程如下: 图 1.1 处理流程:处理流程: 1.在终端登录之前,用户通过交易 API 发起终端认证请求 ReqAuthenticate。需要用 户填写 appid(relayappid)和授权码(authcode), 该授权码只会缓存交易API 中, 不会在网络中直接传输授权码。 2.交易前置随机生成 128 字节的 TimeStamp,将 TimeStamp保存在 session 信息中 ,并将其通过 RspAuthenticate 回调信息返回给终端。 3.终端收到 RspAuthenticate 回调信息后, 使用 AES_KEY 加密 TimeStamp, 并将其赋 值到 AuthInfo 字段,再次发起 ReqAuthenticate 请求 4.交易前置收到第二次的 FTD_TID_ReqAuthenticate 之后,将之前 session 保存的 TimeStamp 赋值到请求里面的 TimeStamp字段中。将认证消息发送给交易核心 5.交易核心使用内存数据库中终端信息对应的授权码加密 TimeStamp 字段,并将加 密结果与 AuthInfo 比较。如果相同设置当前终端为已经认证。并返回 RspAuthenticate 成功结果给交易前置。 6.交易前置通过 API 回调,将认证结果返回给用户 对于认证失败的连接,不允许进行登录。 2.22.2 使用使用 CTPCTP 交易交易 APIAPI 进行终端信息采集进行终端信息采集 用户可以直接使用 CTP 交易 API 进行交易,也可以通过中继服务器间接调用交易API 进行交易。这就需要将信息采集动态库和CTP 的交易 API 分离开来,因此信息的采集和上 报有需要分为两步。 2.2.12.2.1 直接使用直接使用 CTPCTP 交易交易 APIAPI 直连模式直连模式 直接使用交易 API 进行交易时,API 会直接调用 GetSytemInfo()采集终端信息,并将信 息填入 LocalSystemInnerInfoLocalSystemInnerInfo字段,通过 ReqUserLogin()将采集到的信息送给前置。 前置收 到交易 API 的 ReqUserLogin 请求后采集客户端的公网IP,并将该信息填写到登录请求的 Local