Download the PHP package phenogram/bindings without Composer
On this page you can find all versions of the php package phenogram/bindings. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download phenogram/bindings
More information about phenogram/bindings
Files in phenogram/bindings
Package bindings
Short Description Low level type-safe PHP bindings for the Telegram Bot API
License MIT
Informations about the package bindings
🇬🇧 ENGLISH | 🇷🇺 РУССКИЙ
PHP SDK для Telegram Bot API
Строго типизированные PHP классы для Telegram Bot API, основанные на официальной документации, для использования в Фреймворке Phenogram
Этот пакет подойдёт тем, кому нужна только отправка запросов в апи, без работы с апдейтами.
В основном сгенерированы с помощью scrapper
Работа всё ещё в процессе, и не каждый класс протестирован или использовался. Если вы обнаружите какие-либо несоответствия с документацией, не стесняйтесь создать ишью. Всё, что не описано в официальной документации Telegram Bot Api, выходит за рамки этого проекта.
Текущая поддерживаемая версия Telegram bot API - v9.0.0
Это только SDK для вашего Telegram-бота, а не полноценный фреймворк, вы можете использовать его целиком, либо только нужные вам куски.
Если вам нужен фреймворк, посмотрите на Phenogram
Установка
Использование
Этот пакет состоит из 3 основных частей: api, сериализатор и фабрика.
Через Api вы будете отправлять запросы к api ботов
Сериализатор отвечает за преобразование объектов в массивы для отправки клиентов и за преобразование ответов от api обратно в строго типизированные объекты.
Все типы реализованы в виде интерфейсов с пропертями (благодаря новой фиче PHP 8.4), что позволяет вам с лёгкостью их переопределить при необходимости.
Фабрика существует как раз для облегчения переопределения типов, именно она используется в сериализациторе и отвечает за создание конкретных объектов.
Сериализатор
Пример использования можно увидеть в классе Api.
Вот простой пример:
Его также можно использовать для десериализации запросов Telegram в типизированные PHP-классы.
Единственное не совсем очевидное - вам нужно передать JSON-закодированную строку
из поля result
запроса Telegram, а не весь запрос.
Использование API
Клиент
Чтобы использовать API, вам сначала нужно реализовать интерфейс ClientInterface,
в котором есть только один метод - sendRequest
.
Обратите особое внимание на обработку файлов. В библиотеке отсутствует реализация InputFileInterface, как вы читаете и отправляете файлы зависит от вашего клиента.
Реализация клиента выходит за рамки этого проекта, но вот пример реализации с использованием ext-curl:
Можете посмотреть его в действии в тестах)
Но я, конечно, рекомендую использовать какую-нибудь библиотеку, например Guzzle или amphp/http-client. Пример реализации с amphp/http-client есть в Фреймворке Phenogram
Выполнение запросов
Переопределение типов
Скажем, вы хотите использовать свою реализацию ChatLocationInterface вместо стандартной, чтобы адрес всегда был в верхнем регистре.
Первое, что вам нужно - это новый класс, реализующий интерфейс ChatLocationInterface. Для простоты мы унаследуемся от нашего класса ChatLocation.
Далее нам нужно переопределить фабрику, чтобы она создавала наш новый класс вместо стандартного.
И последнее - создать и использовать объект Api с сериализатором, который использует нашу фабрику:
Посмотреть на это можно в тесте
Тестовые фабрики
Для упрощения написания тестов, этот пакет также включает набор Тестовых Фабрик. Они используют FakerPHP для генерации объектов типов Telegram API со случайными данными.
Каждому конкретному типу API (например, User
, Chat
, Message
) соответствует своя фабрика: UserFactory
, ChatFactory
, MessageFactory
и т.д.
Пример использования:
- Все тестовые фабрики наследуются от
Phenogram\Bindings\Factories\AbstractFactory
. - Вы можете передать конкретные значения в статический метод
make()
фабрики, чтобы переопределить сгенерированные Faker данные для нужных полей. - Если для какого-либо параметра метода
make()
значение не передано (null
), фабрика сгенерирует для него случайное значение, подходящее по типу и (иногда) по названию поля. - Фабрики генерируются только для конкретных типов Telegram API (например,
User
,Chat
,ChatMemberOwner
). Для создания экземпляров, представляющих абстрактные типы в ваших тестах (например,ChatMember
), вам нужно будет вызвать фабрику одного из его конкретных наследников (например,ChatMemberOwnerFactory::make()
илиChatMemberAdministratorFactory::make()
). - Необязательные параметры не генерируются автоматически и по умолчанию будут
null
Также вы можете использовать свою фабрику классов для создания тестовые объектов, для этого перед созданием первого тестового объекта, переопределите фабрику через:
Заключение
Хоть я уже и во всю использую и эти классы и фреймворк в продакшене в своих проектах систент, мистаро и генерач, но этот проект всё равно находится в активно разработке и предоставляется как есть.
Тестируйте самостоятельно!