如何在Android端集成使用Zerodha API实现股票交易功能
Android端集成Zerodha Kite API实现股票功能落地指南
前置准备
- 先到Zerodha开发者平台创建自有应用,获取对应
api_key与api_secret,注意填写的应用回调地址必须和Android端配置的Deep Link完全匹配,否则授权流程会直接中断。 - 绝对不要把
api_secret硬编码在Android客户端里,这类交易敏感密钥必须放在你自己的服务端做中转,客户端只持有自己服务端签发的短期访问凭证,避免APK被反编译后密钥泄露造成资金损失,这类违规操作被官方检测到会直接封禁开发者权限。 - 客户端依赖不用找第三方封装的Kite SDK,很多年没更新兼容性很差,直接用OkHttp做网络请求、Gson做序列化、Room做本地存储就够,轻量还好排查问题。
核心功能实现
1. 授权鉴权流程
所有Kite接口都需要登录后获取的access_token才能访问,别用WebView加载授权页,会触发官方安全拦截:
- 授权跳转直接用Chrome Custom Tabs加载授权页,地址拼接规则为
/connect/login?api_key=你的api_key&v=3,域名用官方API默认域名即可。 - 回调接收:在AndroidManifest中对应Activity配置Intent Filter,监听你之前填写的Deep Link,从回调参数中提取
request_token,把这个临时码传到你的自有服务端,由服务端携带api_secret换取有效access_token再返回给客户端。 - 本地存储
access_token必须用EncryptedSharedPreferences加密存放,不要存在普通SharedPreferences或者明文文件里。 - 所有后续接口请求头必须携带
Authorization: token 你的api_key:你的access_token,缺这个头会直接返回403权限错误。
2. 股票列表展示
- 全量合约列表调用instruments接口获取,注意这个接口返回CSV格式数据,必须在子线程请求,第一次拉取后存入本地Room数据库,后续每日开盘前做一次增量更新即可,全量数据有几MB,每次启动拉取会严重影响启动速度。
- 实时行情调用quote接口,单次请求最多传入500个股票代码,轮询间隔不要低于1秒,官方公开API限流规则是每秒最多10次请求,触发限流会被封禁IP10分钟。
- 要做实时价格更新优先接WebSocket推送,比轮询省流量、延迟更低,连接时携带
api_key和access_token鉴权,只订阅你自选、持仓相关的股票代码即可,不要全量订阅浪费带宽。
3. 买卖订单调用
- 下单为POST请求,接口路径为
/orders/regular,必传参数包括:交易所标识(如NSE、BSE)、股票交易代码、交易类型(BUY/SELL)、下单数量(必须为对应股票规定交易手数的整数倍)、产品类型(CNC为现货持仓、MIS为日内交易)、订单类型(MARKET市价、LIMIT限价等)、价格(限价单传委托价,市价单传0即可)。 - 发下单请求前必须在客户端做前置校验:比如数量是否符合最小交易单位要求、价格是否在当日涨跌停区间内,能减少80%的无效请求和下单失败问题。
- 订单状态、持仓、资金类接口不要高频轮询,通过WebSocket监听订单推送即可,避免触发限流。
常见踩坑
不要尝试绕过服务端直接在客户端完成
request_token换access_token的流程,一旦api_secret泄露,你的应用所有用户的交易账号都有被盗用风险,这个是官方文档明确标注的禁止操作。
- 所有网络请求必须在子线程执行,主线程发请求在Android 9以上版本会直接抛
NetworkOnMainThreadException导致崩溃。 - 接口错误码要做对应处理:400为参数错误,打印返回的message排查参数问题即可;403为token失效,直接跳转重新授权即可;429为触发限流,用指数退避策略重试,不要立刻重复发请求。
- Android 9及以上版本默认禁止明文流量,调试抓包需要在
network_security_config里添加调试代理的域名白名单,正式发布包必须关闭明文流量权限。
内容的提问来源于stack exchange,提问作者kajal goradiya
相关产品推荐
相关产品推荐

