upstox/upstox-php-sdk

Upstox API 的官方 PHP 客户端

v1.8.0 2024-09-10 14:21 UTC

This package is auto-updated.

Last update: 2024-09-10 14:28:40 UTC


README

Latest Stable Version

简介

Upstox API 的官方 PHP 客户端,用于与 Upstox API 通信。

Upstox API 是一套 RESTful API,提供构建完整投资和交易平台所需的数据。通过易于理解的 API 集合执行实时订单、管理用户投资组合、流式传输实时市场数据(使用 Websocket)等。

  • API 版本:v2
  • 构建包:io.swagger.codegen.v3.generators.php.PhpClientCodegen

此 PHP 包由 Swagger Codegen 项目自动生成

文档。

Upstox API 文档

要求

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 以获取市场和投资组合更新的过程:

  1. MarketDataStreamer:提供实时市场更新,以无缝的方式接收各种市场工具的即时信息。
  2. 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 分钟和每日蜡烛图数据,以及一些其他细节。

函数

  1. constructor MarketDataStreamer(apiClient, instrumentKeys, mode):使用可选的工具键和模式(fullltpc)初始化流器。
  2. connect():建立 WebSocket 连接。
  3. subscribe(instrumentKeys, mode):在指定模式下订阅给定仪器键的更新。这两个参数都是必需的。
  4. unsubscribe(instrumentKeys):停止指定仪器键的更新。
  5. changeMode(instrumentKeys, mode):切换已订阅仪器键的模式。
  6. disconnect():结束活动中的WebSocket连接。
  7. autoReconnect(enable, interval, retryCount):自定义自动重连功能。参数包括一个标志来启用/禁用它,尝试之间的间隔(秒)和最大重试次数。

事件

  • open:在成功建立连接时触发。
  • close:表示WebSocket连接已关闭。
  • message:传递市场更新。
  • error:表示发生了错误。
  • reconnecting:在开始重连尝试时宣布。
  • autoReconnectStopped:在自动重连尝试用尽重试次数后通知。

以下文档包含示例,说明如何使用这些函数和事件,以有效地与MarketDataStreamer交互,提供实际理解。


  1. 使用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();

  1. 使用延迟订阅仪器
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();

  1. 订阅和退订仪器
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();

  1. 订阅、更改模式和退订
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();

  1. 禁用自动重连
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();

  1. 修改自动重连参数
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功能

函数

  1. constructor PortfolioDataStreamer():初始化流。
  2. connect():建立 WebSocket 连接。
  3. disconnect():结束活动中的WebSocket连接。
  4. autoReconnect(enable, interval, retryCount):自定义自动重连功能。参数包括一个标志来启用/禁用它,尝试之间的间隔(秒)和最大重试次数。

事件

  • open:在成功建立连接时触发。
  • close:表示WebSocket连接已关闭。
  • message:传递市场更新。
  • error:表示发生了错误。
  • reconnecting:在开始重连尝试时宣布。
  • autoReconnectStopped:在自动重连尝试用尽重试次数后通知。

模型文档