WeChat SDK EasyWeChat для Laravel на основе w7corp/easywechat
Lumen больше не поддерживается по умолчанию, начиная с версии 7.x.
overtrue/laravel-wechat:^7.0 -> Laravel >= 8.0
overtrue/laravel-wechat:^6.0 -> Laravel/Lumen >= 7.0
overtrue/laravel-wechat:^5.1 -> Laravel/Lumen >= 5.1
композитору требуется overtrue/laravel-wechat:^7.2
Создайте файл конфигурации:
поставщик php artisan:publish --provider="OvertrueLaravelWeChatServiceProvider"
Необязательно, добавьте псевдоним
'aliases' => [// ...'EasyWeChat' => OvertrueLaravelWeChatEasyWeChat::class, ],
Каждый модуль в основном поддерживает несколько учетных записей, а значение по умолчанию — default
.
Исключите маршруты, связанные с WeChat, в промежуточном программном обеспечении AppHttpMiddlewareVerifyCsrfToken
, например:
protected $кроме = [// ...'wechat', ];
Для Laravel 11.x вы можете использовать метод $middleware->validateCsrfTokens
в bootstrap/app.php
:
->withMiddleware(function (Middleware $middleware) {$middleware->validateCsrfTokens(кроме: [// ...'wechat', ]); })
Напишем пример на примере получения обычных сообщений.
маршрутизация:
Route::any('/wechat', 'WeChatController@serve');
Примечание. Это должен быть
Route::any
, поскольку сервер WeChat используетGET
при аутентификации иPOST
при получении пользовательских сообщений!
Затем создайте контроллер WeChatController
:
<?phpnamespace AppHttpControllers;use Log;класс WeChatController расширяет контроллер {публичная функция служит() { Log::info('запрос прибыл.'); $server = app('easywechat.official_account')->getServer();$server->with(function($message){return "Добро пожаловать в подписку, отменено!"; }); return $server->serve(); } }
При использовании промежуточного программного обеспечения просто случайно заполните oauth.callback
в app/config/easywechat.php
(потому что он больше не нужен).
Добавьте промежуточное программное обеспечение маршрутизации в app/Http/Kernel.php
:
protected $routeMiddleware = [// ...'easywechat.oauth' => OvertrueLaravelWeChatMiddlewareOAuthAuthenticate::class, ];
Добавьте промежуточное программное обеспечение в маршрут:
//...Route::group(['middleware' => ['web', 'easywechat.oauth']], function () { Route::get('/user', function () {$user = session('easywechat.oauth_user.default'); // Получаем информацию об авторизованном пользователе dd($user); }); });
Промежуточное программное обеспечение поддерживает указание имени конфигурации: 'easywechat.oauth:default'
. Конечно, вы также можете указать текущие scopes
в параметрах промежуточного программного обеспечения:
Route::group(['middleware' => ['easywechat.oauth:snsapi_userinfo']], function () { // ...});// Или укажите учетную запись и области видимости:Route::group([ ' промежуточное программное обеспечение' => ['easywechat.oauth:default,snsapi_userinfo']], function () { // ...});
Приведенный выше маршрут определяет, что /user
требует авторизации WeChat, поэтому в обратном вызове этого маршрута или соответствующем методе контроллера вы можете получить информацию об авторизованном пользователе из session('easywechat.oauth_user.default')
.
Иногда мы хотим пройти процесс авторизации WeChat онлайн после завершения локальной разработки. Это снизит наши затраты на разработку. Затем вам необходимо выполнить следующие два шага:
Подготовьте информацию для авторизации моделирования:
используйте IlluminateSupportArr;use OvertrueSocialiteUser as SocialiteUser;$user = new SocialiteUser(['id' => 'mock-openid','name' => 'overtrue','nickname' => 'overtrue','avatar' => ' http://example.com/avatars/overtrue.png','email' => null,'original' => [],'provider' => 'ВиЧат', ]);
Вышеупомянутые поля должны быть настроены как можно полнее, если область действия —
snsapi_userinfo
. Конечно, если ваш режим — толькоsnsapi_base
, вам нужен толькоopenid
.
Записать данные в сессию:
Примечание. Обязательно напишите перед вызовом промежуточного программного обеспечения OAuth. Например, для этого можно создать глобальное промежуточное программное обеспечение и включить его только в среде разработки.
session(['easywechat.oauth_user.default' => $user]); // Аналогичным образом `default` можно заменить другими именами конфигурации, соответствующими вашему
Вы можете прослушивать соответствующие события и выполнять соответствующие операции после их возникновения.
Веб-авторизация OAuth: OvertrueLaravelWeChatEventsWeChatUserAuthorized
// Это событие имеет следующие атрибуты: $event->user; // То же, что и session('easywechat.oauth_user.default') $event->isNewSession; // Это новый сеанс (истина, если сеанс создан для первый раз) $event->account //Учетная запись, используемая в данный момент промежуточным программным обеспечением, соответствующая имени элемента конфигурации в файле конфигурации.
Вы можете использовать встроенный OvertrueLaravelWeChatTraitsHandleOpenPlatformServerEvents
, чтобы быстро завершить проверку открытой платформы на стороне сервера:
маршруты/web.php:
Route::any('/open-platform/server', OpenPlatformController::class);
приложение/Http/Controllers/OpenPlatformController.php:
<?phpnamespace AppHttpControllers;use OvertrueLaravelWeChatTraitsHandleOpenPlatformServerEvents;класс OpenPlatformController расширяет контроллер {use HandleOpenPlatformServerEvents; публичная функция __invoke(Application $application): PsrHttpMessageResponseInterface {$app = app('easywechat.open_platform'); return $this->handleServerEvents($app); } }
Советы: по умолчанию на основе push-контента открытой платформы WeChat будут инициироваться следующие события. Вы можете прослушивать соответствующие события и обрабатывать их:
Авторизатор успешно авторизовал: OvertrueLaravelWeChatEventsOpenPlatformAuthorized
Авторизация обновления авторизатора: OvertrueLaravelWeChatEventsOpenPlatformAuthorizeUpdated
Авторизующая сторона отменяет авторизацию: OvertrueLaravelWeChatEventsOpenPlatformUnauthorized
Открытая платформа отправляет VerifyTicket: OvertrueLaravelWeChatEventsOpenPlatformVerifyTicketRefreshed
// Событие имеет следующие атрибуты: $message = $event->payload // Содержимое уведомления о событии открытой платформы;
После настройки http://example.com/open-platform/server
— это URL-адрес получения событий авторизации, заданный сторонним приложением открытой платформы.
Более подробную информацию об использовании SDK см. на странице https://www.easywechat.com.
Если вам понравился мой проект и вы хотите его поддержать, нажмите здесь
Большое спасибо Jetbrains за любезное предоставление мне лицензии на работу над этим и другими проектами с открытым исходным кодом.
Хотите знать, как создать пакет расширений PHP с нуля?
Пожалуйста, обратите внимание на мой практический курс, где я поделюсь опытом разработки расширений - "Практическое руководство PHP Extension Pack - From Getting Started to Release"
Массачусетский технологический институт