定制 phenogram/gateway-bindings 二次开发

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

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

phenogram/gateway-bindings

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

phenogram/gateway-bindings 适用场景与选型建议

phenogram/gateway-bindings 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 5 次下载、GitHub Stars 达 0, 最近一次更新时间为 2026 年 01 月 05 日, 在 PHP 生态内属于活跃度较高的组件。

我们在过去多个企业项目中使用过 phenogram/gateway-bindings 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 phenogram/gateway-bindings 我们能提供哪些服务?
定制开发 / 二次开发

基于 phenogram/gateway-bindings 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

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

GitHub 信息

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

其他信息

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