metaseller/tinkoff-invest-api-v2-php
Composer 安装命令:
composer require metaseller/tinkoff-invest-api-v2-php
包简介
Unofficial PHP SDK for T-Invest API v2
README 文档
README
Unofficial PHP SDK for T-Invest API v2
Документация T-Invest Api для разработчиков доступна по ссылке: https://developer.tbank.ru/invest/api
Коммьюнити разработчиков в Telegram: https://t.me/joinchat/VaW05CDzcSdsPULM
PS: До переименования, Т-Банк и Т-Инвестиции назывались "Тинькофф-банк" и "Тинькофф-Инвестиции", нейминги репозиториев, классов и методов пока сохранены в "старом стиле".
PSS: На основе данной библиотеки написан на PHP робот-покупателя для T-Инвестиций metaseller/tinkoff-robot-buyer, который реализует две стратегии: (1) - постоянная покупка с заданной скоростью на заданный аккаунт/портфель лотов выбранного ETF. (2) - Автоматическое управление и ребалансировка счета в соответствии с настройками, автоматическое поддержание баланса стоимости акций/облигаций, автоматическая парковка и распарковка свободный средств в денежные фонды.
Введение
Поскольку T-Invest API v2 в настоящее время позиционируется как gRPC-интерфейс для взаимодействия с торговой платформой Т-Инвестиции, то первое, что нам понадобится - это документация по gRPC:
- Quick start with PHP -> https://grpc.io/docs/languages/php/quickstart/
- Basic tutorials -> https://grpc.io/docs/languages/php/basics/
Структура текущего репозитория:
etc - Директория, которая содержит сертификаты для подключения к сервису с использованием SSL
examples - Директория с примерами подключения к сервису и выполнением простейших запросов
library - Это фактически копия репозитория https://opensource.tbank.ru/invest/invest-contracts
library/src/docs/contracts - Директория, которая содержит proto файлы
src/models - Директория, которая содержит сгенерированные через protoc модели
Требования для установки
Для начала работы нам потребуется:
- PHP 7.1 или новее (я делал и тестировал на php 7.4 / Ubuntu 18.04.5)
- PECL, Composer
ВАЖНО: Данный репозиторий содержит уже сгенерированные из proto файлов модели. Содержимое директории library/src/docs/contracts не используется.
Если Вы хотите генерировать модели самостоятельное, то вам необходимо:
- Установить protoc
- Собрать плагин grpc_php_plugin (см https://grpc.io/docs/languages/php/basics/#setup)
- Вызвать что-нибудь типа:
sudo protoc --proto_path=~/contracts_dir/ --php_out=~/models_dic/ --grpc_out=~/models_dir/ --plugin=protoc-gen-grpc=./grpc_php_plugin ~/contracts_dir/*
подставив нужные вам директории.
Далее нам понадобится расширение grps.so для PHP (https://cloud.google.com/php/grpc).
sudo pecl install grpc
а после не забываем в php.ini добавить
extension=grpc.so
А если вам необходимо логгировать исполнение, то можно также добавить в php.ini
grpc.grpc_verbosity=debug
grpc.grpc_trace=all,-polling,-polling_api,-pollable_refcount,-timer,-timer_check
grpc.log_filename=/var/log/grpc.log
Само собой не забыть
sudo touch /var/log/grpc.log
sudo chmod 666 /var/log/grpc.log
Устанавливаем через composer
PS: Если вы планируете использовать в проекте, разработанном на Yii2 Framework, то можно воспользоваться оберткой metaseller/tinkoff-invest-api-v2-yii2.
Ну либо устанавливаем SDK через composer
$ composer require metaseller/tinkoff-invest-api-v2-php
ну или
$ git clone git@github.com:metaseller/tinkoff-invest-api-v2-php.git .
composer update
прописываем свой T-Invest API v2 token
$ vim examples/example.php
/** * Ваш токен доступа к API * * @see https://developer.tbank.ru/invest/intro/intro/token */ $token = 't.ZEbUT................................................7dA';
и тестируем:
$ php examples/example.php
Тестовые примеры
Можно использовать фабрику создания клиентов доступа к сервисам Tinkoff Invest Api V2
/** * Ваш токен доступа к API * * @see https://developer.tbank.ru/invest/intro/intro/token */ $token = '<Your Tinkoff Invest Account Token>'; $tinkoff_api = TinkoffClientsFactory::create($token); /** * Создаем экземпляр запроса информации об аккаунте к сервису * * Запрос не принимает никаких параметров на вход */ $request = new GetInfoRequest(); /** * @var GetInfoResponse $response - Получаем ответ, содержащий информацию о пользователе */ list($response, $status) = $tinkoff_api->usersServiceClient->GetInfo($request)->wait(); /** Выводим полученную информацию */ var_dump(['user_info' => [ 'prem_status' => $response->getPremStatus(), 'qual_status' => $response->getQualStatus(), 'qualified_for_work_with' => $response->getQualifiedForWorkWith(), ]]); /** * @var GetInfoResponse $response - Получаем ответ, содержащий информацию о пользователе */ list($response, $status) = $tinkoff_api->usersServiceClient->GetInfo($request)->wait(); /** Выводим полученную информацию */ var_dump(['user_info' => [ 'prem_status' => $response->getPremStatus(), 'qual_status' => $response->getQualStatus(), 'qualified_for_work_with' => $response->getQualifiedForWorkWith(), ]]);
Либо создавать клиенты доступа к сервисам напрямую:
/** * Ваш токен доступа к API * * @see https://developer.tbank.ru/invest/intro/intro/token */ $token = '<Your Tinkoff Invest Account Token>'; /** * Создаем экземпляр подключения к сервису, используя {@link UsersServiceClient} */ $user_service_client = new UsersServiceClient(ClientConnection::getHostname(), ClientConnection::getOptions($token)); /** * Создаем экземпляр запроса информации об аккаунте к сервису * * Запрос не принимает никаких параметров на вход */ $request = new GetInfoRequest(); /** * @var GetInfoResponse $response - Получаем ответ, содержащий информацию о пользователе */ list($response, $status) = $user_service_client->GetInfo($request)->wait(); /** Выводим полученную информацию */ var_dump(['user_info' => [ 'prem_status' => $response->getPremStatus(), 'qual_status' => $response->getQualStatus(), 'qualified_for_work_with' => $response->getQualifiedForWorkWith(), ]]);
Простенький пример подключения и чтения данных из Stream на основе MarketDataStreamClient (Стакан заявок по тикеру FB на глубину 10)
/** * Ваш токен доступа к API * * @see https://developer.tbank.ru/invest/intro/intro/token */ $token = '<Your Tinkoff Invest Account Token>'; /** Пример получения обновляемого через Stream ({@link MarketDataStreamServiceClient}) стакана по тикеру SBER */ $factory = TinkoffClientsFactory::create($token); /** * Пример получения справочника всех Shares инструментов * * PS: Само собой, если вам нужен только один инструмент, разумнее использовать метод GetInstrumentBy */ $instruments_request = new InstrumentsRequest(); $instruments_request->setInstrumentStatus(InstrumentStatus::INSTRUMENT_STATUS_ALL); /** @var SharesResponse $response */ list($response, $status) = $factory->instrumentsServiceClient->Shares($instruments_request) ->wait(); /** @var Instrument[] $instruments_dict */ $instruments_dict = $response->getInstruments(); /** * Находим в справочнике (коль он у нас весь есть) нужный нам инструмент */ foreach ($instruments_dict as $instrument) { if ($instrument->getTicker() === 'SBER') { $meta_instrument = $instrument; break; } } if (empty($meta_instrument)) { echo('Instrument not found'); die(); } /** Создаем подписку на данные {@link MarketDataRequest}, конкретно по {@link SubscribeOrderBookRequest} по FIGI инструмента SBER */ $subscription = (new MarketDataRequest()) ->setSubscribeOrderBookRequest( (new SubscribeOrderBookRequest()) ->setSubscriptionAction(SubscriptionAction::SUBSCRIPTION_ACTION_SUBSCRIBE) ->setInstruments([ (new OrderBookInstrument()) ->setFigi($meta_instrument->getFigi()) ->setDepth(10) ]) ); $stream = $factory->marketDataStreamServiceClient->MarketDataStream(); $stream->write($subscription); /** В цикле получаем данные от сервера */ /** @var MarketDataResponse $market_data_response */ while ($market_data_response = $stream->read()) { if ($orderbook = $market_data_response->getOrderbook()) { /** @var Order[] $asks */ $asks = $orderbook->getAsks(); /** @var Order[] $bids */ $bids = $orderbook->getBids(); foreach ($asks as $ask) { $price = $ask->getPrice() ->getUnits() + $ask->getPrice() ->getNano() / pow(10, 9) ; echo 'ASK ' . $price . ' - ' . $ask->getQuantity() . PHP_EOL; } foreach ($bids as $bid) { $price = $bid->getPrice() ->getUnits() + $bid->getPrice() ->getNano() / pow(10, 9) ; echo 'BID ' . $price . ' - ' . $bid->getQuantity() . PHP_EOL; } echo 'Orderbook response finished' . PHP_EOL . PHP_EOL; } } $stream->cancel();
Обновления
- Вер. 0.5.4 от 2026-06-02.
~ Обновление контрактов до версии 1.49
- Вер. 0.5.3 от 2026-04-01.
~ Обновление контрактов до версии 1.48
- Вер. 0.5.2 от 2026-02-10.
~ Переключение на новый репозиторий T-Invest (https://opensource.tbank.ru/invest/invest-contracts/-/tree/master) и обновление контрактов до версии 1.44 из этого репозитория
~ Добавлена DTO Quantity (https://github.com/metaseller/tinkoff-invest-api-v2-php/blob/main/src/dto/Quantity.php)
~ Доработаны классы-провайдеры данных
- Вер. 0.5.1 от 2026-01-20.
~ Поднята версия библиотеки grpc/grpc (https://github.com/grpc/grpc) до версии ^1.74. Необходимо обновить.
~ Поднята версия библиотеки google/protobuf (https://github.com/protocolbuffers/protobuf) до версии ^3.25.1. Необходимо обновить.
Справочная информация:
Обновление grpc.so:
sudo pecl upgrade grpc
Обновление protoc (Если вы самостоятельно обновляете библиотеку из контрактов):
Можно воспользоваться скриптом https://gist.github.com/Eitol/c12b3102ba872a365461d101650d319b#file-install_protobuf-sh)
Пересборка grpc_php_plugin (Если вы самостоятельно обновляете библиотеку из контрактов): (https://grpc.io/docs/languages/php/basics/#setup)
cd ~
git clone --recurse-submodules --depth 1 --shallow-submodules https://github.com/grpc/grpc
cd grpc
mkdir -p cmake/build
pushd cmake/build
cmake ../..
make protoc grpc_php_plugin
popd
- Вер. 0.4.24 от 2025-12-18.
~ Добавлен унифицированный класс DTO Цены/Количества (https://github.com/metaseller/tinkoff-invest-api-v2-php/blob/main/src/dto/Price.php)
~ Добавлены новые классы-хелперы ArrayHelper, NumbersHelper, InstrumentsHelper.
~ Переделана логика работы провайдера InstrumentsProvider, исправлены некоторые ошибки в работе
~ Добавлены новые провайдеры данных MarketDataProvider и PortfolioProvider
~ Добавлен метод обработки, вывода ошибки исполнения запроса к API в модели TinkoffClientsFactory
- Вер. 0.4.23 от 2025-11-11.
~ Обновлены контракты. PR от Andrey Veprikov.
- Вер. 0.4.22 от 2025-09-07.
~ Обновлены контракты и сертификаты. PR от Andrey Veprikov.
- Вер. 0.4.21 от 2025-09-07.
~ Обновлены контракты. PR от Andrey Veprikov:
Новый домен API подписан сертификатом Минцифры, в связи с этим:
Обновлены корневые сертификаты в /etc/roots.pem.
Взят актуальный https://curl.se/ca/cacert.pem и в него добавлены два сертификата от Минцифры (корневой и промежуточный).
Добавлен сертификат домена API /etc/invest-public-api_tbank_ru.pem.
Удалён сертификат старого домена API /etc/tinkoff_ru.pem.
Обновлены соответствующие константы.
Есть два варианта научить среду принимать новый сертификат:
1) Использовать на уровне проекта через переменную окружения:
putenv("SSL_CERT_FILE=/vendor/metaseller/tinkoff-invest-api-v2-php/etc/roots.pem");
2) Обновить системные сертификаты и использовать глобально.
metaseller/tinkoff-invest-api-v2-php 适用场景与选型建议
metaseller/tinkoff-invest-api-v2-php 是一款 基于 HTML 开发的 Composer 扩展包,目前已累计 6.81k 次下载、GitHub Stars 达 25, 最近一次更新时间为 2022 年 01 月 24 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「php」 「tinkoff」 「t-invest」 「t-investments」 「invest api sdk」 「T-Invest API PHP SDK」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 metaseller/tinkoff-invest-api-v2-php 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 metaseller/tinkoff-invest-api-v2-php 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 metaseller/tinkoff-invest-api-v2-php 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Payment drivers for laravel
Tinkoff Acquiring API PHP Client
ShopExpress Tinkoff
PHP SDK for Tinkoff invest API V2
Yii2 framework wrapper for unofficial PHP SDK for Tinkoff Invest API v2
Extension for oplata.tinkoff.ru merchant API
统计信息
- 总下载量: 6.81k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 25
- 点击次数: 4
- 依赖项目数: 2
- 推荐数: 0
其他信息
- 授权协议: Apache-2.0
- 更新时间: 2022-01-24