Skip to content

Commit 5a9b6d5

Browse files
committed
Merge branch 'feature_cgplay' into 'dev'
Feature cgplay See merge request server/openapi/openapi-python-sdk!105
2 parents 7c0069b + 2b038ca commit 5a9b6d5

File tree

2 files changed

+100
-43
lines changed

2 files changed

+100
-43
lines changed

tigeropen/common/util/web_utils.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,16 +53,26 @@ def get_http_connection(url, query_string, timeout):
5353

5454

5555
def do_post(url, query_string=None, headers=None, params=None, timeout=15, charset=None):
56+
return do_request('POST', url=url, query_string=query_string, headers=headers, params=params, timeout=timeout,
57+
charset=charset)
58+
59+
60+
def do_get(url, query_string=None, headers=None, params=None, timeout=15, charset=None):
61+
return do_request('GET', url=url, query_string=query_string, headers=headers, params=params, timeout=timeout,
62+
charset=charset)
63+
64+
65+
def do_request(method, url, query_string=None, headers=None, params=None, timeout=15, charset=None):
5666
url, connection = get_http_connection(url, query_string, timeout)
5767

5868
try:
5969
connection.connect()
6070
except Exception as e:
61-
raise RequestException('[' + THREAD_LOCAL.uuid + ']post connect failed. ' + str(e))
71+
raise RequestException('[' + THREAD_LOCAL.uuid + ']' + method + ' connect failed. ' + str(e))
6272
try:
63-
connection.request("POST", url, body=json.dumps(params), headers=headers)
73+
connection.request(method, url, body=json.dumps(params), headers=headers)
6474
except Exception as e:
65-
raise RequestException('[' + THREAD_LOCAL.uuid + ']post request failed. ' + str(e))
75+
raise RequestException('[' + THREAD_LOCAL.uuid + ']' + method + ' request failed. ' + str(e))
6676
response = connection.getresponse()
6777
result = response.read()
6878

tigeropen/tiger_open_config.py

Lines changed: 87 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,24 @@
44
55
@author: gaoan
66
"""
7+
import json
8+
79
from tigeropen.common.consts import Language
810
from tigeropen.common.util.signature_utils import read_private_key
11+
from tigeropen.common.util.web_utils import do_get
12+
13+
DEFAULT_DOMAIN = 'openapi.tigerfintech.com'
14+
DEFAULT_SANDBOX_DOMAIN = 'openapi-sandbox.tigerfintech.com'
15+
DOMAIN_GARDEN_ADDRESS = 'https://cg.play-analytics.com/'
16+
17+
HTTPS_PROTOCAL = 'https://'
18+
SSL_PROTOCAL = 'ssl'
19+
GATEWAY_SUFFIX = '/gateway'
920

1021
# 老虎证券开放平台网关地址
11-
SERVER_URL = 'https://openapi.skytigris.cn/gateway'
22+
SERVER_URL = HTTPS_PROTOCAL + DEFAULT_DOMAIN + GATEWAY_SUFFIX
1223
# 老虎证券开放平台 socket 连接域名端口
13-
SOCKET_HOST_PORT = ('ssl', 'openapi.skytigris.cn', 8883)
24+
SOCKET_HOST_PORT = (SSL_PROTOCAL, DEFAULT_DOMAIN, 9883)
1425
# 老虎证券开放平台公钥
1526
TIGER_PUBLIC_KEY = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDNF3G8SoEcCZh2rshUbayDgLLrj6rKgzNMxDL2HS' \
1627
'nKcB0+GPOsndqSv+a4IBu9+I3fyBp5hkyMMG2+AXugd9pMpy6VxJxlNjhX1MYbNTZJUT4nudki4uh+LM' \
@@ -25,15 +36,15 @@
2536
TIMEOUT = 15
2637

2738
# sandbox 环境配置
28-
SANDBOX_SERVER_URL = 'https://openapi-sandbox.skytigris.cn/gateway'
29-
SANDBOX_SOCKET_HOST_PORT = ('ssl', 'openapi-sandbox.skytigris.cn', 8885)
39+
SANDBOX_SERVER_URL = HTTPS_PROTOCAL + DEFAULT_SANDBOX_DOMAIN + GATEWAY_SUFFIX
40+
SANDBOX_SOCKET_HOST_PORT = (SSL_PROTOCAL, DEFAULT_SANDBOX_DOMAIN, 9885)
3041
SANDBOX_TIGER_PUBLIC_KEY = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCbm21i11hgAENGd3/f280PSe4g9YGkS3TEXBY' \
3142
'MidihTvHHf+tJ0PYD0o3PruI0hl3qhEjHTAxb75T5YD3SGK4IBhHn/Rk6mhqlGgI+bBrBVYaXixm' \
3243
'HfRo75RpUUuWACyeqQkZckgR0McxuW9xRMIa2cXZOoL1E4SL4lXKGhKoWbwIDAQAB'
3344

3445

3546
class TigerOpenClientConfig:
36-
def __init__(self, sandbox_debug=False):
47+
def __init__(self, sandbox_debug=False, enable_dynamic_domain=True):
3748
# 开发者应用id
3849
self._tiger_id = ''
3950
# 授权账户
@@ -44,102 +55,102 @@ def __init__(self, sandbox_debug=False):
4455
self._sign_type = SIGN_TYPE
4556
# 机构交易员专有密钥
4657
self._secret_key = ''
47-
48-
# 老虎证券开放平台网关地址
49-
self._server_url = SERVER_URL
50-
self._socket_host_port = SOCKET_HOST_PORT
51-
# 老虎证券开放平台公钥
52-
self._tiger_public_key = TIGER_PUBLIC_KEY
53-
54-
if sandbox_debug:
55-
self._server_url = SANDBOX_SERVER_URL
56-
self._socket_host_port = SANDBOX_SOCKET_HOST_PORT
57-
self._tiger_public_key = SANDBOX_TIGER_PUBLIC_KEY
5858
# 请求字符集,默认utf-8
5959
self._charset = CHARSET
6060
# 语言
6161
self._language = LANGUAGE
62-
6362
# 以下为可选参数
6463
# 请求读取超时,单位秒,默认15s
6564
self._timeout = TIMEOUT
66-
65+
self._sandbox_debug = sandbox_debug
66+
# 老虎证券开放平台公钥
67+
self._tiger_public_key = TIGER_PUBLIC_KEY
68+
# 老虎证券开放平台网关地址
69+
self._server_url = SERVER_URL
70+
self._socket_host_port = SOCKET_HOST_PORT
71+
if sandbox_debug:
72+
self._tiger_public_key = SANDBOX_TIGER_PUBLIC_KEY
73+
self._server_url = SANDBOX_SERVER_URL
74+
self._socket_host_port = SANDBOX_SOCKET_HOST_PORT
75+
if enable_dynamic_domain:
76+
self.refresh_domains()
77+
6778
@property
6879
def tiger_id(self):
6980
return self._tiger_id
70-
81+
7182
@tiger_id.setter
7283
def tiger_id(self, value):
7384
self._tiger_id = value
74-
85+
7586
@property
7687
def account(self):
7788
return self._account
78-
89+
7990
@account.setter
8091
def account(self, value):
8192
self._account = value
82-
93+
8394
@property
8495
def sign_type(self):
8596
return self._sign_type
86-
97+
8798
@sign_type.setter
8899
def sign_type(self, value):
89100
self._sign_type = value
90-
101+
91102
@property
92103
def private_key(self):
93104
return self._private_key
94-
105+
95106
@private_key.setter
96107
def private_key(self, value):
97108
self._private_key = value
98-
109+
99110
@property
100111
def tiger_public_key(self):
101112
return self._tiger_public_key
102-
113+
103114
@tiger_public_key.setter
104115
def tiger_public_key(self, value):
105116
self._tiger_public_key = value
106-
117+
107118
@property
108119
def server_url(self):
109120
return self._server_url
110-
121+
111122
@server_url.setter
112123
def server_url(self, value):
113124
self._server_url = value
114-
125+
115126
@property
116127
def socket_host_port(self):
117128
return self._socket_host_port
118-
129+
119130
@socket_host_port.setter
120131
def socket_host_port(self, value):
121132
self._socket_host_port = value
122-
133+
123134
@property
124135
def charset(self):
125136
return self._charset
126-
137+
127138
@charset.setter
128139
def charset(self, value):
129140
self._charset = value
130-
141+
131142
@property
132143
def language(self):
133144
return self._language
134-
145+
135146
@language.setter
136147
def language(self, value):
137148
self._language = value
138-
149+
139150
@property
140151
def timeout(self):
141152
return self._timeout
142-
153+
143154
@timeout.setter
144155
def timeout(self, value):
145156
self._timeout = value
@@ -152,9 +163,45 @@ def secret_key(self):
152163
def secret_key(self, value):
153164
self._secret_key = value
154165

166+
def refresh_domains(self):
167+
"""
168+
domains data like:
169+
{
170+
"ret": 0,
171+
"serverTime": 1650966832923,
172+
"items": [
173+
{
174+
"openapi": {
175+
"socket_port": 9883,
176+
"COMMON": "https://openapi.tigerfintech.com"
177+
},
178+
"openapi-sandbox": {
179+
"socket_port": 9885,
180+
"COMMON": "https://openapi-sandbox.tigerfintech.com"
181+
}
182+
}
183+
]
184+
}
185+
:return:
186+
"""
187+
try:
188+
result = json.loads(do_get(DOMAIN_GARDEN_ADDRESS, headers=dict(), params=dict(), timeout=1).decode()) \
189+
.get('items')
190+
if result:
191+
for item in result:
192+
conf = item.get('openapi-sandbox', dict()) if self._sandbox_debug else item.get('openapi', dict())
193+
host = conf.get('COMMON')
194+
socket_port = conf.get('socket_port')
195+
if host and socket_port:
196+
self._server_url = host + GATEWAY_SUFFIX
197+
self._socket_host_port = (SSL_PROTOCAL, host.rpartition(HTTPS_PROTOCAL)[-1], socket_port)
198+
except:
199+
pass
200+
155201

156202
def get_client_config(private_key_path, tiger_id, account, sandbox_debug=False, sign_type=None, timeout=None,
157-
language=None, charset=None, server_url=None, socket_host_port=None, secret_key=None):
203+
language=None, charset=None, server_url=None, socket_host_port=None, secret_key=None,
204+
enable_dynamic_domain=True):
158205
"""
159206
生成客户端配置
160207
:param private_key_path: 私钥文件路径, 如 '/Users/tiger/.ssh/rsa_private_key.pem'
@@ -168,9 +215,10 @@ def get_client_config(private_key_path, tiger_id, account, sandbox_debug=False,
168215
:param server_url: 网关地址
169216
:param socket_host_port: 推送长连接的域名端口, 值为协议, 域名, 端口构成的三元组
170217
:param secret_key: 机构交易员专有密钥 (个人开发者无需指定)
218+
:param enable_dynamic_domain: 是否初始化时拉取服务域名
171219
:return:
172220
"""
173-
config = TigerOpenClientConfig(sandbox_debug=sandbox_debug)
221+
config = TigerOpenClientConfig(sandbox_debug=sandbox_debug, enable_dynamic_domain=enable_dynamic_domain)
174222
config.private_key = read_private_key(private_key_path)
175223
config.tiger_id = tiger_id
176224
config.account = account
@@ -189,4 +237,3 @@ def get_client_config(private_key_path, tiger_id, account, sandbox_debug=False,
189237
if secret_key:
190238
config.secret_key = secret_key
191239
return config
192-

0 commit comments

Comments
 (0)