如果我运行这段代码,
conn = http.client.HTTPSConnection("api.icicidirect.com")
payload = json.dumps({})
#time_stamp & checksum generation for request-headers
time_stamp = datetime.utcnow().isoformat()[:19] + '.000Z'
checksum = hashlib.sha256((time_stamp+payload+API_SECRET).encode("utf-8")).hexdigest()
headers = {
'Content-Type': 'application/json',
'X-Checksum': checksum,
'X-Timestamp': time_stamp,
'X-AppKey': API_KEY,
'X-SessionToken': Session_Token
}
conn.request("GET", "/breezeapi/api/v1/dematholdings", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
参考
文档后,我得到
{"Status":5,"Error":"Invalid length for a Base-64 char array or string."}
,https://api.icicidirect.com/breezeapi/documents/index.html?python#dematholdings。
问题:我错过了什么吗?
ICIC Direct Breeze API 的工作原理如下
要求: https://api.icicidirect.com/apiuser/login?api_key=AppKey
回应: 您将在 URL 中看到
sessionkey
或 API_session
sessionKey
调用客户详细信息 API。然后你会得到这样的回复:
{
"Success": {
"exg_trade_date": {
"NSE": "28-Sep-2022",
"BSE": "28-Sep-2022",
"FNO": "28-Sep-2022",
"NDX": "28-Sep-2022"
},
"exg_status": {
"NSE": "O",
"BSE": "O",
"FNO": "O",
"NDX": "O"
},
"segments_allowed": {
"Trading": "Y",
"Equity": "Y",
"Derivatives": "Y",
"Currency": "Y"
},
"idirect_userid": "AF077290",
**"session_token": "ABCwNzcyOTA6MTA5NDM3NTQ=",**
"idirect_user_name": "APPADURAI ARAVIND",
"idirect_ORD_TYP": "",
"idirect_lastlogin_time": "28-Sep-2022 12:53:51",
"mf_holding_mode_popup_flg": "N",
"commodity_exchange_status": "O",
"commodity_trade_date": "28-Sep-2022",
"commodity_allowed": "O"
},
"Status": 200,
"Error": null
}
这里
Success.session_token
是您必须用于所有其他 API 调用的实际会话令牌。文件中已经明确提到了这一点。
这是我的工作API
源代码可以在以下位置找到:https://github.com/Aravin/Algo-Trade(JavaScript)
我收到相同的错误:{'Status': 5, 'Error': '身份验证失败 :: 无效的校验和。'} 我正在使用Python。
get_funds() 工作正常,这意味着连接已建立并且正确显示了我分配的资金。