PHPackages                             phenogram/bindings - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. phenogram/bindings

ActiveLibrary[API Development](/categories/api)

phenogram/bindings
==================

Zero deps low level type-safe PHP bindings for the Telegram Bot API

8.0.0(4w ago)02842MITPHPPHP ^8.4CI passing

Since Sep 2Pushed 4w ago1 watchersCompare

[ Source](https://github.com/phenogram/bindings)[ Packagist](https://packagist.org/packages/phenogram/bindings)[ RSS](/packages/phenogram-bindings/feed)WikiDiscussions master Synced 3w ago

READMEChangelog (10)Dependencies (15)Versions (33)Used By (2)

[🇬🇧 ENGLISH](README.en.md) | 🇷🇺 РУССКИЙ

PHP SDK для Telegram Bot API
============================

[](#php-sdk-для-telegram-bot-api)

Строго типизированные PHP классы для Telegram Bot API, основанные на [официальной документации](https://core.telegram.org/bots/api), для использования в [Фреймворке Phenogram](https://github.com/phenogram/framework)

Этот пакет подойдёт тем, кому нужна только отправка запросов в апи, без работы с апдейтами.

В основном сгенерированы с помощью [scrapper](https://github.com/phenogram/scraper)

Работа всё ещё в процессе, и не каждый класс протестирован или использовался. Если вы обнаружите какие-либо несоответствия с документацией, не стесняйтесь создать ишью. Всё, что не описано в официальной документации Telegram Bot Api, выходит за рамки этого проекта.

Текущая поддерживаемая версия Telegram bot API - **v10.0.0**

Это только SDK для вашего Telegram-бота, а не полноценный фреймворк, вы можете использовать его целиком, либо только нужные вам куски.

Если вам нужен фреймворк, посмотрите на [Phenogram](https://github.com/phenogram/framework)

Установка
=========

[](#установка)

```
composer require phenogram/bindings
```

Использование
=============

[](#использование)

Этот пакет состоит из 3 основных частей: api, сериализатор и фабрика.

Через [Api](src/Api.php) вы будете отправлять запросы к api ботов

[Сериализатор](src/Serializer.php) отвечает за преобразование объектов в массивы для отправки клиентов и за преобразование ответов от api обратно в строго типизированные объекты.

Все типы реализованы в виде интерфейсов с пропертями (благодаря [новой фиче PHP 8.4](https://www.php.net/manual/ru/migration84.new-features.php#migration84.new-features.core.property-hooks)), что позволяет вам с лёгкостью их переопределить при необходимости.

[Фабрика](src/Factory.php) существует как раз для облегчения переопределения типов, именно она используется в сериализациторе и отвечает за создание конкретных объектов.

Сериализатор
------------

[](#сериализатор)

Пример использования можно увидеть в классе [Api](src/Api.php).

Вот простой пример:

```
use Phenogram\Bindings\Serializer;

$serializer = new Serializer();
$inlineKeyboardMarkup = new InlineKeyboardMarkup(
    inlineKeyboard: [[
        new InlineKeyboardButton(text: 'Кнопка 1', callbackData: 'data1')
    ]],
);

$data = $serializer->serialize([
    'reply_markup' => $inlineKeyboardMarkup,
]);

$arrayKeyboard = [
    'reply_markup' => [
        'inline_keyboard' => [[
            ['text' => 'Кнопка 1', 'callback_data' => 'data1']
        ]],
    ],
];

assert($arrayKeyboard === $data);
```

Его также можно использовать для десериализации запросов Telegram в типизированные PHP-классы. Единственное не совсем очевидное - вам нужно передать JSON-закодированную строку из поля `result` запроса Telegram, а не весь запрос.

```
use Phenogram\Bindings\Serializer;
use Phenogram\Bindings\Types\Update;
use Phenogram\Bindings\Types\Message;
use Phenogram\Bindings\Types\Chat;

$updatesData = [[
    'update_id' => 1,
    'message' => [
        'message_id' => 2,
        'chat' => [
            'id' => 3,
            'type' => 'private',
        ],
        'date' => 1600000000,
    ],
]];

$serializer = new Serializer();
$updates = $serializer->deserialize(
    data: $updatesData,
    type: UpdateInterface::class,
    isArray: true,
);

assert($updates[0] instanceof UpdateInterface);
assert($updates[0]->message instanceof MessageInterface);
assert($updates[0]->message->chat instanceof ChatInterface);
```

Использование API
-----------------

[](#использование-api)

### Клиент

[](#клиент)

Чтобы использовать API, вам сначала нужно реализовать интерфейс ClientInterface, в котором есть только один метод - `sendRequest`.

> Обратите особое внимание на обработку файлов. В библиотеке отсутствует реализация InputFileInterface, как вы читаете и отправляете файлы зависит от вашего клиента.

Реализация клиента выходит за рамки этого проекта, но вот пример реализации с использованием ext-curl:

> Можете посмотреть его в действии в [тестах](tests/Readme/ReadmeClientTest.php))

```
