证券交易业务与 iTN OpenAPI 接口 恒生网络 iTN 发展部 PSO 部门 蒋佳羚 罗朋
互联网 + 金融 -- 想象无极限。可做的,不只是配资。 彩牛图片 财说图片 互联网 + 金融 -- 想象无极限。可做的,不只是配资。
证券交易与数据安全 1. 授信应用 OpenAPI 接入获取公共令牌 2. 授信应用 OpenAPI 接入获取证券交易私有令牌 3. 证券交易敏感字段加密 4. 降权与刷新令牌
授信应用 OpenAPI 接入获取公共令牌 授信应用使用 OAuth2.0 定义的 “ 客户端凭证模式 ” (详细请参考《 OAuth2.0 授权框 架.pdf 》 第 4.4 节. 客户端凭据许可)接入开放平台,接入方式最为简单。 成功完成 “ 客户端凭证模式 ” 的全部流程后,即可获得公共访问令牌( Public Access Token ),应用可以携带该令牌访问行情、资讯等公共权限资源服务。一般包含了两种场 景: 场景 1 :授信应用通过服务端应用来获得公共访问令牌, 服务端应用将令牌分发至终端 应用共同使用此访问令牌。该流程如下:
授信应用 OpenAPI 接入获取公共令牌 场景 2 : 授信应用是无服务端的客户端应用(或者即使有服务端,服务端也不和开放 平台直接通信) , 则可以直接在终端应用中实现 “ 客户端凭证模式 ”, 但必须输入 OpenID( 对 应参数 open_id) 。 OpenID 是唯一标识了终端应用的使用者,可以是用户 ID 、 设备 UUID 等,开放平台给每个使用者颁发各自不同的令牌,而判定使用者唯一性的条件正是 “App Key+Open ID” 组合。实际上, 在场景 1 中, 也可以妙用 OpenID 来获取多个访问令牌, 例 如使用不同的 OpenID 来标识不同的版本(如 open_id=v1 和 open_id=v2 ) ,从而为同一应 用的不同版本获取不同的访问令牌。 流程如下:
证券交易敏感字段加密 授信应用对接交易服务接口时, 资金密码无疑是最为敏感的信息,因此授信应用必须将 资金密码加密后再传输。目前开放平台支持下列接口的敏感字段加密传输: URL 功能名称 支持加密传输的字段 /oauth2/oauth2/oauthacct_trade_bind 授信交易登录 password /secu/v1/bankbalance_qry 银行余额查询 fund_password , bank_password /secu/v1/banktransfer 银证转账 fund_password , bank_password /secu/v1/password_mod 密码修改 new_password , old_password 基于效率和增强安全等方面的考虑, 开发平台采用非对称加密和对称加密相结合的方法 完成敏感字段的加解密: 非对称解密算法:通过证书指定,出于安全考虑,要求至少使用 RSA2048 对称加密算法:通过恒生 iTN 系统参数中指定支持的加密算法 AES-256
降权与刷新令牌 示例场景: 应用 “APP1” 是对接了开放平台交易服务的应用, 小明是 APP1 的最终用户,他使用资金帐 号通过 APP1 登录成功后可以查询资金、委托交易等; 5 分钟未操作, APP1 自动降低小明 的操作权限,不允许委托交易、撤单、修改密码、银证转账等操作,以保护小明的资金安 全。实际上, 上述场景中,小明在成功登录 (授信交易登录接口) 后获得了一个访问令 牌 ( Access Token ) ,该令牌绑定了被允许访问的业务范围(即 Scope ,授权范围) ,此 时被授权给应用的业务范围较多 (取自应用的可访问业务范围和用户授权的可访问业务范 围的交集) , 例如 { "access_token":"2YotnFZFEjr1zCsicMWpAA", "scope":"iuc,trade,trade_entrust" } 5 分钟未操作,触发了 APP1 发送下面的请求来降权: POST /oauth2/oauth2/token HTTP/1.1 Host: sandbox.hs.net Authorization: Basic MTg2NDE3Y2UteHh4eC14eHh4LXh4eHgteHh4eHgxYjkyMDAzOjYxNGE1OGRhLXh4 eHgteHh4eC14eHh4LXh4eHh4ZmZmYjA1MQ== Content-Type: application/x-www-form-urlencoded grant_type=refresh_token&refresh_token=tGzv3JOkF0XG5Qx2TlKWIA& scope=iuc,trade
授信应用 OpenAPI 接入获取证券交易私有令牌 证券交易等私有权限资源服务必须使用私有访问令牌( Private Access Token )才可以访 问。 授信应用可以直接使用 App Key 、 App Secret 、 资金帐号和密码等信息来完成交易登 录并获取私有访问令牌。接入流程如下:
证券交易涉及的关键元素 1. 交易时间 – 什么时候可以买卖 2. 交易登录 – 资金账号、密码登录 3. 买入、卖出和撤单 – 买、卖、改主意了 4. 委托查询 – 买到了没?卖出了没? 5. 持仓查询 – 有多少钱?有多少票?赚了?亏了?
交易时间 周一至周五,非节假日 9:30~11:30 , 13:00~15:00 上交所 9:15~9:25 集合竞价(其中 9: :20 这段时间的委托可以撤单, 9:21---9:25 则只 能委托,不能撤单。 9 : 25 分产生开盘价, 9:25--9:30 也可以委托,但不是马上成交, 期间不能撤单,这段时间的委托要等到 9:30 才只能成交) 9:30--11:30 , 13:00--15:00 是连续竞价时间。 深交所 9:15 ~9:25 为开盘集合竞价时间, 9:30 至 11:30 、 13:00 至 14:57 为连续竞价时间, 14:57 至 15:00 为收盘集合竞价时间。
交易登录 关键元素: 券商 资金账号 交易密码 通讯密码 客户授信码模式登录接口 客户客户端凭证模式登录接口
交易登录 关键元素: 券商 资金账号 交易密码 通讯密码 客户登录 请求参数 参数名必选类型中文名说明 redirect_uritrueC500 回调地址为确保交易登录过程的安全性,开发者须在创建应用时注册填写应用所在的 URL ,同时在请求时填写到 “redirect_uri” 参数;授权服务在回调前校验回调地址 是否和已注册匹配,保证回调到安全的 URL 。 如果应用有 Web Server ,则可以填写该 Web Server 的有效 URL ,授权服务将携带 参数应答 302 , Web 浏览器跳转到该 URL 。 如果应用没有 Web Server ,例如 IOS 、 Android 等移动终端应用,则可以设置为 移动应用对应的 Scheme , iOS 或 Android 操作系统支持通过自定义类型的 URL Scheme 启动应用。 返回字段说明: Status: 302 Headers:{Access-Control-Allow-Origin=[*], Date=[Wed, 24 Jun :51:17 GMT], Content-Length=[0], Location=[ &businsys_no=1000&targetcomp_id=91000&redirect_uri= Connection=[keep-alive], Server=[nginx/1.7.7], Pragma=[no-cache]}
交易登录 关键元素: 券商 资金账号 交易密码 通讯密码 客户登录 恒生资金账号登录截图
交易登录 关键元素: 券商 资金账号 交易密码 通讯密码 授信机构专用客户登录接口 sandbox.hs.net /oauth2/oauth2/oauthacct_trade_bind sandbox.hs.net /oauth2/oauth2/oauthacct_trade_bind 机构系统互信列表 授信交易登录
买入、卖出和撤单 关键元素: 股票代码 价格 数量 买卖方向 提问:价格有没有限制? 数量有没有限制?是不是想买就可以买,想卖就可以卖?是不是想撤委托就可以撤? 普通委托 委托撤单
委托查询 关键元素: 当日委托 ; 当日成交。 为什么委托和成交需要分别显示?分笔成交的概念。 历史委托 ; 历史成交: 清算的概念 配号 ; 中签 证券委托查询 证券成交查询 历史证券委托查询 历史证券成交查询 历史配号信息查询 历史中签信息查询
持仓查询 关键元素: 还有多少钱(可取、可用的区别) 还有多少票(各股票市值、盈亏、成本价、限价、持仓、可用:持仓与可用的区别 T+1 ) 赚了多少、亏了多少 总市值 证券持仓查询 客户资金精确查询接口
买入、卖出 关键元素: 主证券账户 股票代码 买卖价格 买卖数量 究竟是买还是卖 委托编号:是唯一的吗?不太一定! 普通委托 请求参数 返回字段说明 参数名必选类型中文名说明 exchange_typetrueC4 交易类别【限制字典子项: 1- 上海 2- 深圳 9- 特转 A A- 特转 B D- 沪 B H- 深 B 】 数据字典 (1301) 数据字典 (1301) stock_accountfalseC11 证券账号当前市场的主证券账户 stock_codetrueC16 证券代码 entrust_amounttrueN10 委托数量 entrust_pricetrueN11.4 委托价格 entrust_bstrueC1 买卖方向数据字典 (1204) entrust_proptrueC3 委托属性【限制字典子项: 0- 买卖 3- 申购 ( 股转 b,c,d,e) ( 市价委托 上海: R,U 深圳: Q,R,S,T,U,V) 】 数据字典 (1200) 数据字典 (1200) 参数名类型中文名说明 entrust_noN8 委托编号
撤委托 关键元素: 委托编号 委托撤单 请求参数 返回字段说明 参数名必选类型中文名说明 entrust_notrueN8 委托编号 stock_accountfalseC11 证券账号 entrust_datefalseN8 委托日期 参数名类型中文名说明 entrust_noN8 委托编号
当日委托查询 关键元素: 委托编号 委托状态 成交数量 成交价格 证券委托查询 请求参数 参数名必选类型中文名说明 exchange_typefalseC4 交易类别【限制字典子项: 1- 上海 2- 深圳 9- 特转 A A- 特转 B D- 沪 B H- 深 B 】 数据字典 (1301) 数据字典 (1301) stock_accountfalseC11 证券账号 stock_codefalseC16 证券代码 action_infalseN5 操作控制值操作控制值, 0- 查询全部委托; 1- 查询可撤委托; 2- 按批号查询(通过 locate_entrust_no 送入) locate_entrust_nofalseN8 指定委托号( 0 ,表示不限制)( action_in : 2- 委托批号,非 2- 委托编号) position_strfalseC100 定位串空格,表示取第一页 request_numfalseN10 请求行数 50
当日委托查询 关键元素: 委托编号 委托状态: 0,1,2,3,4,6,7,8,9 成交数量 成交价格 证券委托查询 返回字段说明 参数名类型中文名说明 entrust_noN8 委托编号 exchange_typeC4 交易类别【限制字典子项: 1- 上海 2- 深圳 9- 特转 A A- 特转 B D- 沪 B H- 深 B 】 数据字典 (1301) 数据字典 (1301) stock_accountC11 证券账号 stock_codeC16 证券代码 entrust_bsC1 买卖方向数据字典 (1204) entrust_priceN11.4 委托价格 entrust_amountN10 委托数量 business_amountN10 成交数量 business_priceN11.4 成交价格 report_noN8 申请编号 report_timeN8 申报时间 entrust_typeC1 委托类别【限制字典子项: 0- 委托 2- 撤单 3- 补单】 数据字典 (1202) 数据字典 (1202) entrust_statusC1 委托状态【限制字典子项: 0- 未报 1- 待报 2- 已报 3- 已报待撤 4- 部成待撤 6- 已撤 7- 部成 8- 已成 9- 废单】 数据字典 (1203) 数据字典 (1203) entrust_timeN8 委托时间 entrust_dateN8 委托日期 entrust_propC3 委托属性【限制字典子项: 0- 买卖 3- 申购 ( 股转 b,c,d,e) ( 市价委托 上海: R,U 深圳: Q,R,S,T,U,V) 】 数据字典 (1200) 数据字典 (1200) stock_nameC32 证券名称 withdraw_flagC1 撤单允许标志数据字典 (1352) position_strC100 定位串
当日成交查询 关键元素: 委托编号 委托状态 成交数量 成交价格 证券成交查询 请求参数 参数名必选类型中文名说明 exchange_typefalseC4 交易类别【限制字典子项: 1- 上海 2- 深圳 9- 特转 A A- 特转 B D- 沪 B H- 深 B 】 数据字典 (1301) 数据字典 (1301) stock_accountfalseC11 证券账号 stock_codefalseC16 证券代码 position_strfalseC100 定位串空格,表示取第一页 request_numfalseN10 请求行数 50
当日成交查询 关键元素: 委托编号 成交数量 成交价格 证券委托查询 返回字段说明 参数名类型中文名说明 exchange_typeC4 交易类别【限制字典子项: 1- 上海 2- 深圳 9- 特转 A A- 特转 B D- 沪 B H- 深 B 】 数据字典 (1301) 数据字典 (1301) stock_accountC11 证券账号 stock_codeC16 证券代码 entrust_bsC1 买卖方向数据字典 (1204) business_priceN11.4 成交价格 business_amountN10 成交数量 business_timeN8 成交时间 real_typeC1 成交类型【限制字典子项: 0- 成交 2- 废单】 数据字典 (1212) 数据字典 (1212) real_statusC1 处理标志【限制字典子项: 0- 成交 2- 废单】 数据字典 (1213) 数据字典 (1213) entrust_noN8 委托编号 business_balanceN16.2 成交金额 stock_nameC32 证券名称 business_noN8 成交编号 position_strC100 定位串
历史委托查询 关键元素: 起止日期;委托日期和时间 委托编号 委托状态 成交数量 成交价格 历史证券委托查询 请求参数 参数名必选类型中文名说明 start_datetrueN8 开始日期 end_datetrueN8 到期日期 exchange_typefalseC4 交易类别【限制字典子项: 1- 上海 2- 深圳 9- 特转 A A- 特转 B D- 沪 B H- 深 B 】 数据字典 (1301) 数据字典 (1301) stock_accountfalseC11 证券账号空格,表示不限制 stock_codefalseC16 证券代码空格,表示不限制 position_strfalseC100 定位串空格,表示取第一页 request_numfalseN10 请求行数 50
历史委托查询 关键元素: 起止日期;委托日期和时间 委托编号 委托状态: 0,1,2,3,4,6,7,8,9 成交数量 成交价格 历史证券委托查询 返回字段说明 参数名类型中文名说明 entrust_noN8 委托编号 exchange_typeC4 交易类别【限制字典子项: 1- 上海 2- 深圳 9- 特转 A A- 特转 B D- 沪 B H- 深 B 】 数据字典 (1301) 数据字典 (1301) stock_accountC11 证券账号 stock_codeC16 证券代码 stock_nameC32 证券名称 entrust_bsC1 买卖方向数据字典 (1204) entrust_priceN11.4 委托价格 entrust_amountN10 委托数量 business_amountN10 成交数量 business_priceN11.4 成交价格 report_noN8 申请编号 entrust_dateN8 委托日期 entrust_timeN8 委托时间 report_timeN8 申报时间 entrust_typeC1 委托类别【限制字典子项: 0- 委托 2- 撤单】 数据字典 (1202) 数据字典 (1202) entrust_statusC1 委托状态【限制字典子项: 0- 未报 1- 待报 2- 已报 3- 已报待撤 4- 部成待撤 6- 已撤 7- 部成 8- 已成 9- 废 单】 数据字典 (1203) 数据字典 (1203) position_strC100 定位串
历史成交查询 关键元素: 起止日期;成交日期和时间 委托编号 委托状态 成交数量 成交价格 历史证券成交查询 请求参数 参数名必选类型中文名说明 start_datetrueN8 开始日期 end_datetrueN8 到期日期 position_strfalseC100 定位串空格,表示取第一页 request_numfalseN10 请求行数 50
历史成交查询 关键元素: 委托编号 成交数量 成交价格 证券委托查询 返回字段说明 参数名类型中文名说明 init_dateN8 交易日期 serial_noN8 流水序号 exchange_typeC4 交易类别【限制字典子项: 1- 上海 2- 深圳 9- 特转 A A- 特转 B D- 沪 B H- 深 B 】 数据字典 (1301) 数据字典 (1301) stock_accountC11 证券账号 stock_codeC16 证券代码 stock_nameC32 证券名称 entrust_bsC1 买卖方向数据字典 (1204) business_priceN11.4 成交价格 business_timeN8 成交时间 entrust_noN8 委托编号 occur_amountN10 发生数量 business_balanceN16.2 成交金额 position_strC100 定位串
持仓查询 关键元素: 当前数量与可用数量 成本价与最新价 证券市值 证券持仓查询 请求参数 参数名必选类型中文名说明 exchange_typefalseC4 交易类别【限制字典子项: 1- 上海 2- 深圳 9- 特转 A A- 特转 B D- 沪 B H- 深 B 】 数据字典 (1301) 数据字典 (1301) stock_accountfalseC11 证券账号 stock_codefalseC16 证券代码 position_strfalseC100 定位串空格,表示取第一页 request_numfalseN10 请求行数 50
持仓查询 关键元素: 当前数量与可用数量 成本价与最新价 证券市值 证券持仓查询 返回字段说明 参数名类型中文名说明 exchange_typeC4 交易类别【限制字典子项: 1- 上海 2- 深圳 9- 特转 A A- 特转 B D- 沪 B H- 深 B 】 数据字典 (1301) 数据字典 (1301) stock_accountC11 证券账号 stock_codeC16 证券代码 stock_nameC32 证券名称 current_amountN10 当前数量 enable_amountN10 可用数量 last_priceN18.3 最新价 cost_priceN11.4 成本价 income_balanceN16.2 盈亏金额 market_valueN16.2 证券市值 position_strC100 定位串 money_typeC3 币种类别【限制字典子项: 0- 人民币 1- 美元 2- 港币】 数据字典 (1101) 数据字典 (1101)
THANKS