a.treschilov/tinkoff-invest-api-sdk

PHP SDK for Tinkoff invest API V2

v0.3.4 2024-05-10 04:37 UTC

README

Unofficial PHP SDK for Tinkoff invest API V2. See official API documentation

Installation

It's recommended that you use Composer to install.

$ composer require a.treschilov/tinkoff-invest-api-sdk

SDK requires:

  • PHP 8.0 or newer
  • grpc extension

Install grpc

sudo pecl install grpc

Add to php.ini

extension=grpc.so

How to use

Basic Usage (limited methods support)

<?php

declare(strict_types=1);

use ATreschilov\TinkoffInvestApiSdk\Exceptions\TIException as TIException;
use ATreschilov\TinkoffInvestApiSdk\TIClient;

require __DIR__ . '/../vendor/autoload.php';

/**
 * Your personal Tinkoff Invest token
 *
 * @see https://tinkoff.github.io/investAPI/token/
 */
$token = '<Your Tinkoff Invest Account Token>';
$options = [
    'isRateLimitRetry' => false
];

$tiClient = new TIClient($token, $options);
try {
    $tiAccounts = $tiClient->getUser()->getAccounts();

    $accounts = [];
    foreach ($tiAccounts as $account) {
        $accounts[] = [
            'id' => $account->getId(),
            'name' => $account->getName(),
            'type' => $account->getType(),
            'status' => $account->getStatus(),
            'openedDate' => $account->getOpenedDate()->getSeconds(),
            'closedDate' => $account->getClosedDate()->getSeconds()
        ];
    }

    echo '<pre>' . print_r($accounts, true) . '</pre>';
} catch (TIException $e) {
    echo $e->getCode() . '. ' . $e->getMessage();
}

Basic usage methods support

  • User
    • ✔ getAccounts
    • ✖ GetMarginAttributes
    • ✖ GetUserTariff
    • ✖ GetInfo
  • Instruments
    • ✖ TradingSchedules
    • ✔ BondBy
    • ✔ Bonds
    • ✔ GetBondCoupons
    • ✔ GetBondsEvents
    • ✔ CurrencyBy
    • ✔ Currencies
    • ✖ EtfBy
    • ✔ Etfs
    • ✔ FutureBy
    • ✔ Futures
    • ✖ OptionBy
    • ✖ Options
    • ✖ OptionsBy
    • ✔ ShareBy
    • ✔ Shares
    • ✔ Indicatives
    • ✖ GetAccruedInterests
    • ✖ GetFuturesMargin
    • ✔ GetInstrumentBy
    • ✔ GetDividends
    • ✖ GetAssetBy
    • ✖ GetAssets
    • ✖ GetFavorites
    • ✖ EditFavorites
    • ✖ GetCountries
    • ✖ FindInstrument
    • ✖ GetBrands
    • ✖ GetBrandBy
    • ✖ GetAssetFundamentals
    • ✖ GetAssetReports
    • ✖ GetConsensusForecasts
    • ✖ GetForecastBy
  • OrdersStream
    • ✖ TradesStream
  • Orders
    • ✖ PostOrder
    • ✖ CancelOrder
    • ✖ GetOrderState
    • ✖ GetOrders
    • ✖ ReplaceOrder
    • ✖ GetMaxLots
    • ✖ GetOrderPrice
  • Operations
    • ✔ GetOperations
    • ✔ GetPortfolio
    • ✖ GetPositions
    • ✔ GetWithdrawLimits
    • ✖ GetBrokerReport
    • ✖ GetDividendsForeignIssuer
    • ✖ GetOperationsByCursor
  • OperationsStream
    • ✖ PortfolioStream
    • ✖ PositionsStream
  • MarketData
    • ✔ GetCandles
    • ✔ GetLastPrices
    • ✖ GetOrderBook
    • ✖ GetTradingStatus
    • ✖ GetTradingStatuses
    • ✖ GetLastTrades
    • ✖ GetClosePrice
    • ✖ GetTechAnalysis
  • MarketDataStream
    • ✖ MarketDataStream
    • ✖ MarketDataServerSideStream
  • StopOrders
    • ✖ PostStopOrder
    • ✖ GetStopOrders
    • ✖ CancelStopOrder
  • Sandbox
    • ✖ OpenSandboxAccount
    • ✖ GetSandboxAccounts
    • ✖ CloseSandboxAccount
    • ✖ PostSandboxOrder
    • ✖ ReplaceSandboxOrders
    • ✖ GetSandboxOrders
    • ✖ CancelSandboxOrder
    • ✖ GetSandboxOrderState
    • ✖ GetSandboxPositions
    • ✖ GetSandboxOperations
    • ✖ GetSandboxOperationsByCursor
    • ✖ GetSandboxPortfolio
    • ✖ SandboxPayIn
    • ✖ GetSandboxWithdrawLimits

Advance usage (full methods support)

<?php

declare(strict_types=1);

use ATreschilov\TinkoffInvestApiSdk\TIClient;
use Tinkoff\Invest\V1\Account;
use Tinkoff\Invest\V1\GetAccountsRequest;
use Tinkoff\Invest\V1\GetAccountsResponse;
use Tinkoff\Invest\V1\UsersServiceClient;

require __DIR__ . '/../vendor/autoload.php';

/**
 * Your personal Tinkoff Invest token
 *
 * @see https://tinkoff.github.io/investAPI/token/
 */
$token = '<Your Tinkoff Invest Account Token>';

$tiClient = new TIClient($token);
$userServiceClient = new UsersServiceClient($tiClient->getHostname(), $tiClient->getApiConfig());
$request = new GetAccountsRequest();
/** @var GetAccountsResponse $response */
list($response, $status) = $userServiceClient->GetAccounts($request)->wait();

if ($status->code !== 0) {
    echo '<pre>' . print_r($status, true) . '</pre>';
    return;
}

$accounts = [];
/** @var Account $account */
foreach ($response->getAccounts() as $account) {
    $accounts[] = [
        'id' => $account->getId(),
        'name' => $account->getName(),
        'type' => $account->getType(),
        'status' => $account->getStatus(),
        'openedDate' => $account->getOpenedDate()->getSeconds(),
        'closedDate' => $account->getClosedDate()->getSeconds()
    ];
}

echo '<pre>' . print_r($accounts, true) . '</pre>';