定制 phenogram/gateway-bindings 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

phenogram/gateway-bindings

最新稳定版本:1.0.0

Composer 安装命令:

composer require phenogram/gateway-bindings

包简介

Strictly typed PHP bindings for the Telegram Gateway API

README 文档

README

🇬🇧 ENGLISH | 🇷🇺 РУССКИЙ

PHP SDK для Telegram Gateway API

Строго типизированные PHP классы для Telegram Gateway API.

Этот пакет предоставляет удобную обёртку для отправки верификационных сообщений и проверки возможности их доставки через официальный шлюз Telegram.

Работа всё ещё в процессе. Если вы обнаружите какие-либо несоответствия с документацией, не стесняйтесь создать ишью.

Установка

composer require phenogram/gateway-bindings

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

Этот пакет состоит из основных частей: Api, Serializer и Factory.

Клиент (ClientInterface)

Чтобы использовать API, вам нужно реализовать интерфейс ClientInterface. Библиотека не привязана к конкретному HTTP-клиенту, поэтому вы можете использовать любой удобный вам способ.

Ниже приведен пример реализации с использованием нативного curl без внешних зависимостей.

Вы можете увидеть этот код в действии в тестах.

<?php

declare(strict_types=1);

namespace Phenogram\GatewayBindings\Tests\Readme;

use Phenogram\GatewayBindings\ClientInterface;
use Phenogram\GatewayBindings\Types;

final readonly class ReadmeClient implements ClientInterface
{
    public function __construct(
        private string $token,
        private string $apiUrl = 'https://gatewayapi.telegram.org',
    ) {
    }

    public function sendRequest(string $method, array $data): Types\Interfaces\ResponseInterface
    {
        $ch = curl_init("{$this->apiUrl}/{$method}");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POST, true);
        
        $jsonData = json_encode($data, JSON_THROW_ON_ERROR);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
        
        curl_setopt($ch, CURLOPT_HTTPHEADER, [
            'Authorization: Bearer ' . $this->token,
            'Content-Type: application/json',
            'Content-Length: ' . strlen($jsonData)
        ]);

        $response = curl_exec($ch);

        if (curl_errno($ch)) {
            throw new \RuntimeException('Request Error: ' . curl_error($ch));
        }

        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);

        $responseData = json_decode((string)$response, true);
        
        if ($httpCode !== 200) {
             return new Types\Response(
                ok: false, errorCode: $httpCode, description: $responseData['error'] ?? 'HTTP Error ' . $httpCode
             );
        }
        
        if (!isset($responseData['ok']) || !is_bool($responseData['ok'])) {
             return new Types\Response(ok: false, errorCode: 500, description: 'Invalid response from API');
        }

        $description = $responseData['description'] ?? $responseData['error'] ?? null;

        return new Types\Response(
            ok: $responseData['ok'],
            result: $responseData['result'] ?? null,
            errorCode: $responseData['error_code'] ?? $httpCode,
            description: $description,
            parameters: null 
        );
    }
}

API

Инициализация и использование API:

use Phenogram\GatewayBindings\Api;
use Phenogram\GatewayBindings\Serializer;

$api = new Api(
    client: new ReadmeClient('YOUR_GATEWAY_TOKEN'),
    serializer: new Serializer()
);

// 1. Проверка возможности отправки (бесплатно)
try {
    $status = $api->checkSendAbility(phoneNumber: '+1234567890');
    
    echo "Request ID: " . $status->requestId . "\n";
    echo "Стоимость: " . $status->requestCost . "\n";
    
    // 2. Отправка кода (если проверка прошла успешно)
    $result = $api->sendVerificationMessage(
        phoneNumber: '+1234567890',
        requestId: $status->requestId,
        codeLength: 6,
        ttl: 60
    );
    
    echo "Статус доставки: " . $result->deliveryStatus?->status;
    
} catch (\Phenogram\GatewayBindings\ResponseException $e) {
    echo "Ошибка API: " . $e->getMessage();
}

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

Сериализатор отвечает за преобразование ответов API в строго типизированные объекты. Обычно он используется внутри класса Api, но вы можете использовать его отдельно.

use Phenogram\GatewayBindings\Serializer;
use Phenogram\GatewayBindings\Types\Interfaces\RequestStatusInterface;

$jsonResponse = '{
    "request_id": "req_123",
    "phone_number": "+1234567890",
    "request_cost": 0.05
}';

$data = json_decode($jsonResponse, true);

$serializer = new Serializer();
$status = $serializer->deserialize(
    data: $data, 
    type: RequestStatusInterface::class
);

assert($status instanceof RequestStatusInterface);
echo $status->phoneNumber; // +1234567890

Разработка

Для работы над проектом (запуск тестов, статический анализ) используйте следующие команды:

  1. Установка зависимостей:

    composer install
    composer install -d tools/phpstan
    composer install -d tools/php-cs-fixer
  2. Запуск тестов:

    composer test
  3. Статический анализ (PHPStan):

    composer phpstan
  4. Исправление стиля кода:

    composer fix

统计信息

  • 总下载量: 1
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-01-05