targethunter/max-php-sdk 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

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

targethunter/max-php-sdk

Composer 安装命令:

composer require targethunter/max-php-sdk

包简介

PHP SDK для API мессенджера MAX

README 文档

README

PHP SDK для работы с API мессенджера MAX. Этот пакет предоставляет удобный интерфейс для взаимодействия с MAX Bot API.

Установка

Установите пакет через Composer:

composer require targethunter/max-php-sdk

Требования

  • PHP 7.4 или выше
  • GuzzleHttp 7.5 или выше
  • Расширение JSON

Быстрый старт

Инициализация клиента

<?php

use TH\MAX\Client\MAXClient;
use TH\MAX\Client\Request\MAXRequest;

// Создаем клиент с вашим access_token
$accessToken = 'ваш_access_token_здесь';
$request = new MAXRequest($accessToken);
$client = new MAXClient($request);

// Теперь вы можете использовать все модули API

Получение информации о боте

// Получить информацию о текущем боте
$bot = $client->bots()->getMe();
echo "Имя бота: " . $bot->name;
echo "Описание: " . $bot->description;

Миграция на v2.0.0

Версия v2.0.0 приводит публичный API SDK к актуальной документации MAX API.

Breaking changes:

  • Удален Chats::getAll(): метод GET /chats больше не поддерживается MAX API. Получайте chat_id через Webhook-подписки или Long Polling в окружениях разработки.
  • Удален Chats::delete(): метод DELETE /chats/{chatId} отсутствует в актуальной документации MAX API.
  • Удален Bots::update(): метод PATCH /me отсутствует в актуальной документации MAX API.

Новые возможности:

  • UploadTypes содержит документированные типы загрузки: image, video, audio, file.
  • ClipboardButton добавляет кнопку inline-клавиатуры с типом clipboard.
  • WebhookSecretVerifier помогает проверить заголовок X-Max-Bot-Api-Secret.

Модули API

SDK разделен на несколько модулей, для удобства использования. Модули реализованы так же, как в официальном API MAX.

1. Модуль Bots (Боты)

Управление информацией о боте.

Примеры:

// Получить информацию о боте
$bot = $client->bots()->getMe();
echo "ID бота: " . $bot->id;
echo "Имя: " . $bot->name;

2. Модуль Messages (Сообщения)

Работа с сообщениями.

Примеры:

// Отправить текстовое сообщение
$message = $client->messages()->send(
    user_id: 12345,
    text: 'Привет! Это тестовое сообщение от бота.'
);

// Отправить сообщение в чат
$message = $client->messages()->send(
    chat_id: 67890,
    text: 'Сообщение в групповой чат'
);

// Получить список сообщений
$messages = $client->messages()->getAll(
    chat_id: 67890,
    count: 20
);

// Обновить сообщение
$result = $client->messages()->update(
    message_id: 'message_123',
    text: 'Обновленный текст сообщения'
);

// Удалить сообщение
$result = $client->messages()->delete('message_123');

// Получить сообщение по ID
$message = $client->messages()->getById('message_123');

3. Модуль Chats (Чаты)

Управление чатами и участниками.

Примеры:

// Получить чат по ID
$chat = $client->chats()->getById(12345);
echo "Название чата: " . $chat->title;

// Обновить информацию о чате
$updatedChat = $client->chats()->update(
    chat_id: 12345,
    title: 'Новое название чата',
    notify: true
);

// Получить список участников
$members = $client->chats()->getMembers(
    chat_id: 12345,
    count: 20
);

// Добавить участников в чат
$result = $client->chats()->addMembers(
    chat_id: 12345,
    user_ids: [111, 222, 333]
);

// Закрепить сообщение
$result = $client->chats()->pinMessage(
    chat_id: 12345,
    message_id: 'message_123',
    notify: true
);

4. Модуль Upload (Загрузка файлов)

Загрузка файлов в MAX.

Примеры:

use TH\MAX\Config\UploadTypes;

// Получить URL для загрузки изображения
$uploadUrl = $client->upload()->getUrl(UploadTypes::IMAGE);
echo "URL для загрузки: " . $uploadUrl->url;

// Получить URL для загрузки файла
$uploadUrl = $client->upload()->getUrl('file');

5. Модуль Subscriptions (Подписки)

Управление webhook подписками.

Для production-окружения MAX рекомендует использовать Webhook. Long Polling через getUpdates() оставлен в SDK, потому что метод документирован, но его стоит использовать только для разработки и тестирования.

Webhook endpoint должен использовать HTTPS, доверенный сертификат и порт 443. Если при подписке указан secret, проверяйте входящий заголовок X-Max-Bot-Api-Secret.

Примеры:

// Получить список подписок
$subscriptions = $client->subscriptions()->getAll();

// Создать подписку на webhook
$result = $client->subscriptions()->subscribe(
    url: 'https://your-domain.com/webhook',
    update_types: ['message', 'chat_member'],
    secret: 'your_secret_key'
);

// Удалить подписку
$result = $client->subscriptions()->unsubscribe(
    url: 'https://your-domain.com/webhook'
);

// Получить обновления
$updates = $client->subscriptions()->getUpdates(
    limit: 100,
    timeout: 30
);
use TH\MAX\Webhook\WebhookSecretVerifier;

$isValid = WebhookSecretVerifier::verifyFromHeaders(
    getallheaders(),
    'your_secret_key'
);

Обработка ошибок

SDK автоматически обрабатывает ошибки от API MAX и преобразует их в читаемый формат. Все методы могут выбрасывать исключения MAXHttpException при ошибках сети или API.

Автоматическая обработка ошибок

SDK автоматически:

  • Извлекает человекочитаемые сообщения об ошибках из ответов API
  • Сохраняет HTTP статус код
  • Сохраняет оригинальное исключение Guzzle для отладки
use TH\MAX\Exceptions\MAXHttpException;

try {
    $message = $client->messages()->send(
        user_id: 12345,
        text: 'Тестовое сообщение'
    );
    echo "Сообщение отправлено: " . $message->id;
} catch (MAXHttpException $e) {
    echo "Ошибка API: " . $e->getMessage();
    echo "HTTP код: " . $e->getCode();
    
    // Получить оригинальное исключение Guzzle для отладки
    if ($e->hasOriginalException()) {
        $original = $e->getOriginalException();
    }
    // Или через стандартную цепочку исключений
    $previous = $e->getPrevious();
}

Типы ошибок

SDK обрабатывает различные форматы ошибок от MAX API:

  • message - основное сообщение об ошибке
  • error.message - сообщение в объекте error
  • error.description - описание ошибки
  • description - альтернативное поле описания

Если ответ не в формате JSON, SDK вернет сырое тело ответа.

Конфигурация

Базовый URL API

По умолчанию SDK использует базовый URL API: https://platform-api2.max.ru/

Начиная с версии v1.3.0, SDK по умолчанию использует platform-api2.max.ru, как указано в актуальной документации MAX API.

Документация MAX указывает лимит для platform-api2.max.ru: до 30 запросов в секунду.

Кастомный HTTP клиент

Вы можете создать собственный HTTP клиент и передать его в конструктор MAXRequest:

use GuzzleHttp\Client;

$customClient = new Client([
    'timeout' => 30,
    'verify' => false, // Отключить проверку SSL (не рекомендуется для продакшена)
]);

$request = new MAXRequest($accessToken, $customClient);
$client = new MAXClient($request);

Кастомизация через наследование

Вы можете унаследоваться от MAXRequest и переопределить нужные методы:

Кастомный URL API

use TH\MAX\Client\Request\MAXRequest;

class CustomMAXRequest extends MAXRequest
{
    protected function getURL(string $method): string
    {
        return 'https://api.max.ru/v2/' . ltrim($method, '/');
    }
}

Кастомный класс исключений

Метод createException() — фабрика для создания исключений. Переопределите его, чтобы SDK бросал ваши доменные исключения вместо MAXHttpException:

use GuzzleHttp\Exception\GuzzleException;
use TH\MAX\Client\Request\MAXRequest;

class AppMAXRequest extends MAXRequest
{
    protected function createException(string $message, int $code, GuzzleException $original): \Throwable
    {
        // Бросаем ваше доменное исключение вместо MAXHttpException
        return new \App\Exceptions\ApiException($message, $code, $original);
    }
}

Логика парсинга ответа API (извлечение человекочитаемого сообщения из JSON) остаётся в SDK — вы получаете готовое сообщение в параметре $message.

Полный пример использования

<?php

require_once 'vendor/autoload.php';

use TH\MAX\Client\MAXClient;
use TH\MAX\Client\Request\MAXRequest;
use TH\MAX\Exceptions\MAXHttpException;

// Инициализация
$accessToken = 'ваш_access_token';
$request = new MAXRequest($accessToken);
$client = new MAXClient($request);

try {
    // Получить информацию о боте
    $bot = $client->bots()->getMe();
    echo "Бот: " . $bot->name . "\n";

    // Отправить сообщение в известный чат
    $message = $client->messages()->send(
        chat_id: 12345,
        text: 'Привет из PHP SDK!'
    );
    echo "Сообщение отправлено с ID: " . $message->id . "\n";
    
} catch (MAXHttpException $e) {
    echo "Ошибка API MAX: " . $e->getMessage() . "\n";
    echo "HTTP код: " . $e->getCode() . "\n";
} catch (Exception $e) {
    echo "Общая ошибка: " . $e->getMessage() . "\n";
}

Лицензия

MIT License

Поддержка

Если у вас есть вопросы или проблемы, создайте issue в репозитории проекта.

targethunter/max-php-sdk 适用场景与选型建议

targethunter/max-php-sdk 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 2.38k 次下载、GitHub Stars 达 13, 最近一次更新时间为 2025 年 09 月 06 日, 在 PHP 生态内属于活跃度较高的组件。

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

围绕 targethunter/max-php-sdk 我们能提供哪些服务?
定制开发 / 二次开发

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

BUG 修复 & 性能优化

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

项目外包 & 长期维护

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

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

统计信息

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

GitHub 信息

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

其他信息

  • 授权协议: MIT
  • 更新时间: 2025-09-06