Когда пользователь взаимодействует с публичным аккаунтом 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 )