upstox / upstox-php-sdk
Upstox API 的官方 PHP 客户端
Requires
- php: ^7.4 || ^8.0
- ext-curl: *
- ext-json: *
- ext-mbstring: *
- amphp/amp: ^3.0
- amphp/websocket-client: ^2.0
- google/protobuf: ^3.25
- guzzlehttp/guzzle: ^7.3
- guzzlehttp/psr7: ^1.7 || ^2.0
- ramsey/uuid: ^4.7
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.5
- phpunit/phpunit: ^8.0 || ^9.0
README
简介
Upstox API 的官方 PHP 客户端,用于与 Upstox API 通信。
Upstox API 是一套 RESTful API,提供构建完整投资和交易平台所需的数据。通过易于理解的 API 集合执行实时订单、管理用户投资组合、流式传输实时市场数据(使用 Websocket)等。
- API 版本:v2
- 构建包:io.swagger.codegen.v3.generators.php.PhpClientCodegen
此 PHP 包由 Swagger Codegen 项目自动生成
文档。
要求
PHP 7.4 及更高版本
安装和用法
Composer
运行 composer require upstox/upstox-php-sdk
从 Packagist 安装 SDK。
Github
Composer 安装
下载最新版本并运行 composer install
手动安装
下载文件并包含 autoload.php
require_once('/path/to/UpstoxClient/vendor/autoload.php');
测试
要运行单元测试
composer install
./vendor/bin/phpunit
示例
可以在 /examples
文件夹中找到 示例实现。
API 端点文档
所有 URI 都相对于 https://api.upstox.com/v2/
Feeder 函数文档
通过两个主要 Feeder 函数简化连接到 WebSocket 以获取市场和投资组合更新的过程:
- MarketDataStreamer:提供实时市场更新,以无缝的方式接收各种市场工具的即时信息。
- PortfolioDataStreamer:提供与用户订单相关的更新,增强跟踪订单状态和投资组合变化的能力。
这两个函数都旨在简化订阅基本数据流的过程,确保用户能够快速轻松地访问所需信息。
Feeder 接口详细说明
MarketDataStreamer
MarketDataStreamer 接口旨在轻松连接到市场 WebSocket,使用户能够接收各种工具的即时更新。以下示例演示了如何快速设置并开始接收所选工具键的市场更新
use Upstox\Client\Configuration; use Upstox\Client\Feeder\MarketDataStreamer; use Revolt\EventLoop; function on_message($streamer, $data) { print($data); } config = Configuration::getDefaultConfiguration()->setAccessToken(<ACCESS_TOKEN>); $streamer = new MarketDataStreamer($config, ["NSE_INDEX|Nifty 50", "NSE_INDEX|Nifty Bank"], "full"); $streamer->on("message", 'on_message'); $streamer->connect(); EventLoop::run();
在这个示例中,您首先使用访问令牌进行身份验证,然后使用特定的工具键和订阅模式实例化 MarketDataStreamer。连接后,流器监听市场更新,并在到达时将其记录到控制台。
请随意调整访问令牌占位符和其他任何具体细节,以便更好地适应您的实际实现或使用场景。
探索 MarketDataStreamer 功能
模式
- ltpc:ltpc 仅提供有关最新交易的信息,包括最新交易价格、最新交易时间、交易数量和前一天收盘价。
- full:完整选项提供全面的信息,包括最新交易价格、D5 深度、1 分钟、30 分钟和每日蜡烛图数据,以及一些其他细节。
函数
- constructor MarketDataStreamer(apiClient, instrumentKeys, mode):使用可选的工具键和模式(
full
或ltpc
)初始化流器。 - connect():建立 WebSocket 连接。
- subscribe(instrumentKeys, mode):在指定模式下订阅给定仪器键的更新。这两个参数都是必需的。
- unsubscribe(instrumentKeys):停止指定仪器键的更新。
- changeMode(instrumentKeys, mode):切换已订阅仪器键的模式。
- disconnect():结束活动中的WebSocket连接。
- autoReconnect(enable, interval, retryCount):自定义自动重连功能。参数包括一个标志来启用/禁用它,尝试之间的间隔(秒)和最大重试次数。
事件
- open:在成功建立连接时触发。
- close:表示WebSocket连接已关闭。
- message:传递市场更新。
- error:表示发生了错误。
- reconnecting:在开始重连尝试时宣布。
- autoReconnectStopped:在自动重连尝试用尽重试次数后通知。
以下文档包含示例,说明如何使用这些函数和事件,以有效地与MarketDataStreamer交互,提供实际理解。
- 使用MarketDataStreamer在连接打开时订阅市场数据
use Upstox\Client\Configuration; use Upstox\Client\Feeder\MarketDataStreamer; use Revolt\EventLoop; function on_open($streamer) { print("Connection Established"); $streamer->subscribe(["NSE_INDEX|Nifty 50", "NSE_INDEX|Nifty Bank"], "full"); } function on_message($streamer, $data) { print($data); } config = Configuration::getDefaultConfiguration()->setAccessToken(<ACCESS_TOKEN>); $streamer = new MarketDataStreamer($config); $streamer->on("open", 'on_open'); $streamer->on("message", 'on_message'); $streamer->connect(); EventLoop::run();
- 使用延迟订阅仪器
use Upstox\Client\Configuration; use Upstox\Client\Feeder\MarketDataStreamer; use Revolt\EventLoop; use function Amp\delay; function on_open($streamer) { print("Connection Established"); $streamer->subscribe(["NSE_INDEX|Nifty 50"], "full"); delay(5); $streamer->subscribe(["NSE_INDEX|Nifty Bank"], "full"); } function on_message($streamer, $data) { print($data); } config = Configuration::getDefaultConfiguration()->setAccessToken(<ACCESS_TOKEN>); $streamer = new MarketDataStreamer($config); $streamer->on("open", 'on_open'); $streamer->on("message", 'on_message'); $streamer->connect(); EventLoop::run();
- 订阅和退订仪器
use Upstox\Client\Configuration; use Upstox\Client\Feeder\MarketDataStreamer; use Revolt\EventLoop; use function Amp\delay; function on_open($streamer) { print("Connection Established"); $streamer->subscribe(["NSE_EQ|INE020B01018", "NSE_EQ|INE467B01029"]); delay(5); $streamer->unsubscribe(["NSE_EQ|INE020B01018", "NSE_EQ|INE467B01029"]); } function on_message($streamer, $data) { print($data); } config = Configuration::getDefaultConfiguration()->setAccessToken(<ACCESS_TOKEN>); $streamer = new MarketDataStreamer($config); $streamer->on("open", 'on_open'); $streamer->on("message", 'on_message'); $streamer->connect(); EventLoop::run();
- 订阅、更改模式和退订
use Upstox\Client\Configuration; use Upstox\Client\Feeder\MarketDataStreamer; use Revolt\EventLoop; use function Amp\delay; function on_open($streamer) { print("Connection Established"); $streamer->subscribe(["NSE_EQ|INE020B01018", "NSE_EQ|INE467B01029"]); delay(5); $streamer->changeMode( ["NSE_EQ|INE020B01018", "NSE_EQ|INE467B01029"], "ltpc"); } function on_message($streamer, $data) { print($data); } config = Configuration::getDefaultConfiguration()->setAccessToken(<ACCESS_TOKEN>); $streamer = new MarketDataStreamer($config); $streamer->on("open", 'on_open'); $streamer->on("message", 'on_message'); $streamer->connect(); EventLoop::run();
- 禁用自动重连
use Upstox\Client\Configuration; use Upstox\Client\Feeder\MarketDataStreamer; use Revolt\EventLoop; function on_reconnectstopped($streamer, $data) { print($data); } config = Configuration::getDefaultConfiguration()->setAccessToken(<ACCESS_TOKEN>); $streamer = new MarketDataStreamer($config); $streamer->on("autoReconnectStopped", 'on_reconnectstopped'); $streamer->autoReconnect(false); $streamer->connect(); EventLoop::run();
- 修改自动重连参数
use Upstox\Client\Configuration; use Upstox\Client\Feeder\MarketDataStreamer; use Revolt\EventLoop; config = Configuration::getDefaultConfiguration()->setAccessToken(<ACCESS_TOKEN>); $streamer = new MarketDataStreamer($config); $streamer->autoReconnect(true, 10, 3); $streamer->connect(); EventLoop::run();
PortfolioDataStreamer
使用PortfolioDataStreamer函数连接到实时订单更新的Portfolio WebSocket非常简单。以下是简要指南,帮助您开始接收更新
use Upstox\Client\Configuration; use Upstox\Client\Feeder\MarketDataStreamer; use Revolt\EventLoop; function on_message($streamer, $data) { print($data); } config = Configuration::getDefaultConfiguration()->setAccessToken(<ACCESS_TOKEN>); $streamer = new PortfolioDataStreamer($config); $streamer->on("message", 'on_message'); $streamer->connect(); EventLoop::run();
通过在PortfolioDataStreamer类的构造函数中将相应的标志设置为true
,可以启用位置和持仓更新。
use Upstox\Client\Configuration; use Upstox\Client\Feeder\PortfolioDataStreamer; use Revolt\EventLoop; function on_message($streamer,$data) { print("on_message= " . ($data) . "\n"); } $config = Upstox\Client\Configuration::getDefaultConfiguration()->setAccessToken(<ACCESS_TOKEN>); $streamer = new PortfolioDataStreamer($config,orderUpdate:true,holdingUpdate:true,positionUpdate:true); $streamer->on("message", 'on_message'); $streamer->connect(); EventLoop::run();
以下示例演示了初始化PortfolioDataStreamer、将其连接到WebSocket以及设置事件监听器以接收和打印订单更新。用您的有效访问令牌替换<ACCESS_TOKEN>
以验证会话。
探索PortfolioDataStreamer功能
函数
- constructor PortfolioDataStreamer():初始化流。
- connect():建立 WebSocket 连接。
- disconnect():结束活动中的WebSocket连接。
- autoReconnect(enable, interval, retryCount):自定义自动重连功能。参数包括一个标志来启用/禁用它,尝试之间的间隔(秒)和最大重试次数。
事件
- open:在成功建立连接时触发。
- close:表示WebSocket连接已关闭。
- message:传递市场更新。
- error:表示发生了错误。
- reconnecting:在开始重连尝试时宣布。
- autoReconnectStopped:在自动重连尝试用尽重试次数后通知。
模型文档
- AnalyticsData
- ApiGatewayErrorResponse
- BrokerageData
- BrokerageTaxes
- BrokerageWrapperData
- CancelOrderData
- CancelOrderResponse
- ConvertPositionData
- ConvertPositionRequest
- ConvertPositionResponse
- Depth
- DepthMap
- DpPlan
- ExchangeTimingData
- GetBrokerageResponse
- GetExchangeTimingResponse
- GetFullMarketQuoteResponse
- GetHistoricalCandleResponse
- GetHoldingsResponse
- GetHolidayResponse
- GetIntraDayCandleResponse
- GetMarketQuoteLastTradedPriceResponse
- GetMarketQuoteOHLCResponse
- GetMarketStatusResponse
- GetOptionChainResponse
- GetOptionContractResponse
- GetOrderBookResponse
- GetOrderResponse
- GetPositionResponse
- GetProfileResponse
- GetProfitAndLossChargesResponse
- GetTradeResponse
- GetTradeWiseProfitAndLossDataResponse
- GetTradeWiseProfitAndLossMetaDataResponse
- GetUserFundMarginResponse
- HistoricalCandleData
- HoldingsData
- HolidayData
- InstrumentData
- IntraDayCandleData
- LogoutResponse
- MarketData
- MarketQuoteOHLC
- MarketQuoteSymbol
- MarketQuoteSymbolLtp
- MarketStatusData
- ModifyOrderData
- ModifyOrderRequest
- ModifyOrderResponse
- OAuthClientException
- OAuthClientExceptionCause
- OAuthClientExceptionCauseStackTrace
- OAuthClientExceptionCauseSuppressed
- Ohlc
- OptionStrikeData
- OrderBookData
- OrderData
- OtherTaxes
- PlaceOrderData
- PlaceOrderRequest
- PlaceOrderResponse
- PositionData
- Problem
- ProfileData
- ProfitAndLossChargesData
- ProfitAndLossChargesTaxes
- ProfitAndLossChargesWrapperData
- ProfitAndLossMetaData
- ProfitAndLossMetaDataWrapper
- ProfitAndLossOtherChargesTaxes
- PutCallOptionChainData
- TokenRequest
- TokenResponse
- TradeData
- TradeWiseMetaData
- TradeWise盈亏数据
- 用户资金保证金数据
- WebSocket身份验证重定向响应
- WebSocket身份验证重定向响应数据