Download the PHP package rekryt/tbank-lib without Composer
On this page you can find all versions of the php package rekryt/tbank-lib. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download rekryt/tbank-lib
More information about rekryt/tbank-lib
Files in rekryt/tbank-lib
Package tbank-lib
Short Description Асинхронная библиотека для T-Invest API (T-Bank Investments) на AMPHP v3 и Revolt Event Loop
License MIT
Homepage https://github.com/rekryt/tbank-lib
Informations about the package tbank-lib
rekryt/tbank-lib
Асинхронная PHP-библиотека для T-Invest API на AMPHP v3 и Revolt Event Loop.
Весь публичный API брокера — 109 unary-методов и 7 стримов — доступен типизированными вызовами.
Заявка, портфель и котировка приезжают не массивом, а объектом: PostOrderResponse, PortfolioResponse,
Quotation. Деньги считаются целыми числами в нано-долях, без float.
Возможности
| Unary-методы | 9 сервисов, 109 методов с развёрнутыми параметрами и именованными аргументами |
| Стримы | биржевой, заявки и портфель по WebSocket: переподключение, восстановление подписок, сторожевой таймер |
| Справочник | InstrumentRegistry — поиск по uid, figi, тикеру и positionUid за O(1) с ленивой догрузкой |
| Лимиты | иерархические token bucket-ы «метод → сервис → глобальные 50/с», без sleep |
| Повторы | экспоненциальный backoff с джиттером; торговые поручения повторяются только с ключом идемпотентности |
| Ошибки | каталог из 175 кодов T-Invest API, разложенный по дереву исключений |
| Деньги | Quotation и MoneyValue с целочисленной нано-арифметикой и округлением до шага цены |
| Асинхронность | всё работает в Event Loop: сотня подписок и десяток методов одновременно — один процесс |
Требования
- PHP 8.2 или новее
ext-json,ext-mbstring- расширения для gRPC не нужны: библиотека ходит по REST и WebSocket (см. ADR 0002)
Установка
Токен
Токен выпускается в личном кабинете: Инвестиции → Настройки → Токены для API. Подробно — в документации брокера.
Для начала берите токен только на чтение: он не даст выставить заявку даже по ошибке.
Токен — это доступ к деньгам, поэтому в репозитории ему не место: держите его в .env
и в переменных окружения.
Быстрый старт
Вызов выглядит синхронным, но не блокирует процесс: под ним Event Loop, и пока ответ в пути,
работают остальные волокна. Отдельного await не нужно — библиотека сама живёт в цикле.
Обратите внимание: getAccounts() вернёт пустой список, если у токена нет доступа ни к одному
счёту, — проверяйте результат перед обращением по индексу.
Стрим
Соединение открывается по первой подписке. Разрыв, переподписку и сторожевой таймер библиотека берёт на себя: приложению остаётся разобрать события.
Подписок больше трёхсот на соединение библиотека не сложит — это лимит брокера; сверх него она
сама открывает следующее соединение. StreamMode::Raw отдаёт разобранный JSON без гидрации
в DTO: на потоках в сотни тысяч сообщений в секунду это заметно дешевле.
Разворачивать примеры целиком — в examples/streams/.
Справочник инструментов
Промах догружается точечно, одновременные запросы одного инструмента схлопываются в один сетевой
вызов, записи живут 12 часов. toArray() и fill() переживают перезапуск процесса.
Примеры
examples/README.md — таблица всех 116 методов API: на каждый метод
запускаемый .php и описание .md с входными данными, кодом, настоящим ответом биржи
и разбором возможных ошибок.
Рядом с примерами на каждый метод — рукописные сценарии:
recipes/ для
задач, которые одним методом не решаются: лимиты, повторы, снимок справочника, добор данных после
разрыва стрима, несколько токенов, экспортер метрик для Prometheus.
Примеры, меняющие состояние счёта — выставление и отмена заявок, пополнение песочницы, перевод
валюты, — без ключа --live останавливаются, не дойдя до сети.
Архитектура
Зависимости идут в одну сторону: Infrastructure → App → Domain. Доменное ядро ничего не знает
ни про HTTP, ни про amphp — котировку можно считать в тесте без сети и без Event Loop.
DTO, enum-ы, сервисы и примеры генерируются из снимков OpenAPI в resources/openapi/
(composer generate). Сгенерированный код лежит в репозитории, а CI проверяет, что он не разошёлся
со спецификацией. Правьте генератор или снимок, а не выходные файлы.
Решения, которые дороже всего переигрывать, записаны в adr/:
REST и WebSocket вместо gRPC,
целочисленные деньги,
иерархические token bucket-ы,
повторы только идемпотентных вызовов.
Устройство целиком, границы и обоснования — в BRIEF.md.
Разработка
| Гейт | Требование |
|---|---|
| PHPStan | level 9, без baseline, 0 ошибок |
| Psalm | errorLevel=1, 0 ошибок |
| PHP-CS-Fixer | PSR-12 + правила .editorconfig |
| PHPUnit | покрытие src/ ≥ 85 % (сейчас 98.8 %) |
| Бенчмарки | бюджеты §7 BRIEF.md |
Интеграционный прогон по песочнице (composer test:integration) запускается только при заданном
TBANK_SANDBOX_TOKEN — он открывает счёт, пополняет его, выставляет и отменяет заявку и закрывает
счёт за собой.
Лицензия
MIT — см. LICENSE.
Библиотека не связана с ПАО «Т-Банк» и разрабатывается независимо. Торговля на бирже сопряжена с риском потери средств; автор не несёт ответственности за решения, принятые вашим кодом.
All versions of tbank-lib with dependencies
ext-json Version *
ext-mbstring Version *
amphp/amp Version ^3.0
amphp/http-client Version ^5.1
amphp/pipeline Version ^1.2
amphp/sync Version ^2.2
amphp/websocket-client Version ^2.0
psr/event-dispatcher Version ^1.0
psr/log Version ^3.0
revolt/event-loop Version ^1.0