1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/pfinal-wechat

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
message.md 9.5 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 27.11.2024 19:13 58e8875

Сообщения и события

Когда пользователь взаимодействует с публичным аккаунтом WeChat, платформа WeChat отправляет сообщения на указанный разработчиком URL. Мы можем обрабатывать эти сообщения. Взаимодействие пользователя с публичным аккаунтом включает в себя: подписку/отписку, отправку сообщений, нажатие на меню, сканирование кода с параметрами, отчёт о местоположении и т. д.

Получение сообщений и событий

Для удобства обработки сообщения и события объединяются в класс PFinal\Wechat\Message\Receive. Независимо от того, отправляет ли пользователь сообщение (текст, изображение, голос, видео и т.д.) или вызывает событие (подписка, нажатие на меню и т.п.), используется один и тот же метод обработки.

В SDK используется Kernel::register(тип сообщения, обратный вызов) для настройки функции обработки сообщений:

<?php
require __DIR__ . '/../vendor/autoload.php';

use PFinal\Wechat\Kernel;
use PFinal\Wecat\Support\Log;
use PFinal\Wechat\WechatEvent;

// Конфигурация
$config = [
    'appId' => 'your-app-id',
    'appSecret' => 'your-secret',
    'token' => 'your-token',
    'encodingAesKey' => 'your-aes-key',
];

// Инициализация
Kernel::init($config);

// Обработка текстового сообщения
Kernel::register(Receive::TYPE_TEXT, function (WechatEvent $event) {
    $message = $event->getMessage(); 
    $event->setResponse('Получено текстовое сообщение:' . $message->Content);
});

//Обработка события подписки пользователя
Kernel::register(Receive::TYPE_EVENT_SUBSCRIBE, function (WechatEvent $event) {
    $event->setResponse('Ты подписываешься или отписываешься, я здесь, не радуюсь и не грущу~~');
});

// Обработка запроса от сервера WeChat
$response = Kernel::handle();

// Вывод ответа
echo $response;

Типы

Kernel::register() первый параметр — это тип сообщения (MsgType), SDK предоставляет простую оболочку, соответствующую константам PFinal\Wechat\Message\Receive::TYPE_XXX:

TYPE_TEXT                 // Текстовое сообщение
TYPE_VOICE                // Голос
TYPE_IMAGE                // Изображение
TYPE_LOCATION             // Местоположение (сообщение в окне чата)
TYPE_LINK                 // Ссылка
TYPE_VIDEO                // Видео
TYPE_SHORT_VIDEO          // Короткое видео

TYPE_EVENT_SUBSCRIBE      // Подписка на событие
TYPE_EVENT_UNSUBSCRIBE    // Отписка от события
TYPE_EVENT_CLICK          // Нажатие на меню
TYPE_EVENT_VIEW           // Переход по меню
TYPE_EVENT_SCAN_CODE_WAIT_MSG   // Сканирование кода и ожидание сообщения
TYPE_EVENT_PIC_SYSPHOTO         // Всплывающее окно для съёмки фото, отправка фото
TYPE_EVENT_PIC_PHOTO_OR_ALBUM   // Всплывающее окно для выбора фото из альбома, отправка фото
TYPE_EVENT_PIC_WEIXIN           // Всплывающее окно для отправки фото из галереи WeChat
TYPE_EVENT_LOCATION_SELECT      // Всплывающее окно для определения местоположения
TYPE_EVENT_SCAN                 // Сканирование QR-кода
TYPE_EVENT_LOCATION             // Отчёт о местоположении
TYPE_EVENT_MASS_SEND_JOB_FINISH // Результат групповой рассылки
TYPE_EVENT_CARD_PASS_CHECK      // Проверка карты пройдена
TYPE_EVENT_CARD_NOT_PASS_CHECK  // Проверка карты не пройдена
TYPE_EVENT_USER_GET_CARD        // Пользователь получает карту
TYPE_EVENT_USER_DEL_CARD        // Пользователь удаляет карту
TYPE_EVENT_USER_VIEW_CARD       // Пользователь просматривает карту

Если есть новый тип сообщения или события, который не включён в вышеуказанные константы, можно также использовать строку напрямую. Например, текстовое сообщение — text, событие подписки — event.subscribe. Для получения дополнительной информации см. официальные документы WeChat: получение сообщений и получение событий.

Атрибуты

Kernel::register() второй параметр — это закрытие (closure) для обработки сообщения. Это закрытие принимает один параметр $event, через который можно легко получить содержимое сообщения и ответное сообщение. Полученный объект $message является экземпляром класса PFinal\Wechat\Message\Receive, и его атрибуты следующие (в том же регистре, что и в официальном XML WeChat):

// Основные атрибуты (присутствуют во всех сообщениях)
$message->ToUserName    Идентификатор получателя (идентификатор публичного аккаунта)
$message->FromUserName  Идентификатор отправителя (OpenID, представляющий уникальный идентификатор пользователя)
$message->CreateTime    Время создания сообщения (временная метка)
$message->MsgId          Идентификатор сообщения (64-битное целое число)

// Текстовое сообщение
$message->MsgType  text
$message->Content  Содержание текстового сообщения

// Изображение
$message->MsgType  image
$message->PicUrl   URL изображения

// Голос
$message->MsgType        voice
$message->MediaId        Идентификатор аудиосообщения, можно использовать для загрузки данных
$message->Format         Формат аудио, например amr, speex и др.
$message->Recongnition   Доступно после включения распознавания голоса

// Видео
$message->MsgType       video
$message->MediaId       Идентификатор видеосообщения, можно использовать для загрузки данных
$message->ThumbMediaId  Идентификатор миниатюрного изображения видео, можно использовать для загрузки данных

// Короткое видео:
$message->MsgType     shortvideo
$message->MediaId     Идентификатор короткого видеосообщения, можно использовать для загрузки данных.
$message->ThumbMediaId    Идентификатор миниатюрного изображения короткого видео, можно использовать для загрузки данных

// Событие
$message->MsgType     event
$message->Event       Тип события (например: subscribe (подписаться), unsubscribe (отписаться) CLICK и др.)

// Считывание QR-кода с параметрами
$message->EventKey    Значение ключа события, например: qrscene_100, qrscene_ — префикс, а за ним — значение параметра QR-кода.
$message->Ticket      Билет QR-кода, который можно использовать для обмена изображениями QR-кода

// Отчёт о географическом местоположении
$message->Latitude    23.137466   Географическая широта
$message->Longitude   113.352425  Географическая долгота
$message->Precision   119.385040  Географическая точность

// Меню по умолчанию
$message->EventKey    Значение ключа события, соответствующее меню по умолчанию

// Географическое местоположение:
$message->MsgType     location
$message->Location_X  Географическая широта
$message->Location_Y  Географическая долгота
$message->Scale       Размер масштабирования карты
$message->Label

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/pfinal-wechat.git
git@api.gitlife.ru:oschina-mirror/pfinal-wechat.git
oschina-mirror
pfinal-wechat
pfinal-wechat
master