WeChat SDK EasyWeChat für Laravel, basierend auf w7corp/easywechat
Lumen wird ab 7.x standardmäßig nicht mehr unterstützt.
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
Komponist benötigt overtrue/laravel-wechat:^7.2
Konfigurationsdatei erstellen:
PHP-Handwerker-Anbieter:publish --provider="OvertrueLaravelWeChatServiceProvider"
Fügen Sie optional einen Alias hinzu
'aliases' => [// ...'EasyWeChat' => OvertrueLaravelWeChatEasyWeChat::class, ],
Jedes Modul unterstützt grundsätzlich mehrere Konten, und der Standardwert ist default
.
Schließen Sie WeChat-bezogene Routen in der Middleware AppHttpMiddlewareVerifyCsrfToken
aus, wie zum Beispiel:
protected $exclusive = [// ...'wechat', ];
Für Laravel 11.x können Sie die Methode $middleware->validateCsrfTokens
in bootstrap/app.php
verwenden:
->withMiddleware(function (Middleware $middleware) {$middleware->validateCsrfTokens(außer: [// ...'wechat', ]); })
Lassen Sie uns ein Beispiel schreiben, indem wir den Empfang gewöhnlicher Nachrichten als Beispiel verwenden.
Routing:
Route::any('/wechat', 'WeChatController@serve');
Hinweis: Es muss
Route::any
lauten, da der WeChat-ServerGET
bei der Authentifizierung undPOST
beim Empfang von Benutzernachrichten verwendet!
Dann erstellen Sie den Controller WeChatController
:
<?phpnamespace AppHttpControllers;use Log;class WeChatController erweitert Controller {öffentliche Funktion dienen() { Log::info('Anfrage angekommen.'); $server = app('easywechat.official_account')->getServer();$server->with(function($message){return "Willkommen bei overtrue!"; });return $server->serve(); } }
Wenn Sie Middleware verwenden, füllen Sie einfach beiläufig oauth.callback
in app/config/easywechat.php
aus (da er nicht mehr benötigt wird).
Routing-Middleware in app/Http/Kernel.php
hinzufügen:
protected $routeMiddleware = [// ...'easywechat.oauth' => OvertrueLaravelWeChatMiddlewareOAuthAuthenticate::class, ];
Fügen Sie der Route Middleware hinzu:
//...Route::group(['middleware' => ['web', 'easywechat.oauth']], function () { Route::get('/user', function () {$user = session('easywechat.oauth_user.default'); // Autorisierte Benutzerinformationen abrufen dd($user); }); });
Die Middleware unterstützt die Angabe des Konfigurationsnamens: 'easywechat.oauth:default'
. Natürlich können Sie auch die aktuellen scopes
in den Middleware-Parametern angeben:
Route::group(['middleware' => ['easywechat.oauth:snsapi_userinfo']], function () { // ...});// Oder geben Sie das Konto und die Bereiche an:Route::group([ ' middleware' => ['easywechat.oauth:default,snsapi_userinfo']], function () { // ...});
Die obige Route definiert, dass /user
eine WeChat-Autorisierung erfordert. Daher können Sie im Rückruf dieser Route oder der entsprechenden Methode des Controllers die autorisierten Benutzerinformationen von session('easywechat.oauth_user.default')
abrufen.
Manchmal möchten wir den WeChat-Autorisierungsprozess tatsächlich online durchführen, nachdem die lokale Entwicklung abgeschlossen ist. Dadurch werden unsere Entwicklungskosten gesenkt. Dann müssen Sie die folgenden zwei Schritte ausführen:
Bereiten Sie Informationen zur Simulationsautorisierung vor:
use 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' => 'WeChat', ]);
Die oben genannten Felder sollten so vollständig wie möglich konfiguriert sein, wenn der Bereich
snsapi_userinfo
ist. Wenn Ihr Modus nursnsapi_base
ist, benötigen Sie natürlich nuropenid
.
Daten in Sitzung schreiben:
Hinweis: Schreiben Sie unbedingt, bevor Sie die OAuth-Middleware aufrufen. Sie können beispielsweise eine globale Middleware erstellen, um dies zu erreichen, und diese nur in der Entwicklungsumgebung aktivieren.
session(['easywechat.oauth_user.default' => $user]); // Ebenso kann „default“ durch andere Konfigurationsnamen ersetzt werden, die Ihrem entsprechen
Sie können die entsprechenden Ereignisse abhören und entsprechende Vorgänge ausführen, nachdem die Ereignisse aufgetreten sind.
OAuth-Webautorisierung: OvertrueLaravelWeChatEventsWeChatUserAuthorized
// Dieses Ereignis hat die folgenden Attribute: $event->user; // Gleich wie session('easywechat.oauth_user.default') $event->isNewSession; // Ist es eine neue Sitzung (true, wenn die Sitzung für die erstellt wird). beim ersten Mal) $event->account; // Das aktuell von der Middleware verwendete Konto, entsprechend dem Namen des Konfigurationselements in der Konfigurationsdatei
Sie können das integrierte OvertrueLaravelWeChatTraitsHandleOpenPlatformServerEvents
verwenden, um die serverseitige Überprüfung der offenen Plattform schnell abzuschließen:
Routen/web.php:
Route::any('/open-platform/server', OpenPlatformController::class);
app/Http/Controllers/OpenPlatformController.php:
<?phpnamespace AppHttpControllers;use OvertrueLaravelWeChatTraitsHandleOpenPlatformServerEvents;class OpenPlatformController erweitert Controller {use HandleOpenPlatformServerEvents; public function __invoke(Application $application): PsrHttpMessageResponseInterface{$app = app('easywechat.open_platform'); return $this->handleServerEvents($app); } }
Tipps: Standardmäßig werden die folgenden Ereignisse basierend auf dem Push-Inhalt der offenen WeChat-Plattform ausgelöst. Sie können die entsprechenden Ereignisse abhören und verarbeiten:
Der Autorisierer hat erfolgreich autorisiert: OvertrueLaravelWeChatEventsOpenPlatformAuthorized
Autorisierung für Autorisierungsaktualisierungen: OvertrueLaravelWeChatEventsOpenPlatformAuthorizeUpdated
Autorisierende Partei bricht Autorisierung ab: OvertrueLaravelWeChatEventsOpenPlatformUnauthorized
Offene Plattform pusht VerifyTicket: OvertrueLaravelWeChatEventsOpenPlatformVerifyTicketRefreshed
// Das Ereignis hat die folgenden Attribute: $message = $event->payload; // Offener Inhalt der Plattform-Ereignisbenachrichtigung
Nach der Konfiguration ist http://example.com/open-platform/server
die von der Open-Platform-Drittanbieteranwendung festgelegte Empfangs-URL für Autorisierungsereignisse.
Weitere Informationen zur Verwendung des SDK finden Sie unter: https://www.easywechat.com
Wenn Ihnen mein Projekt gefällt und Sie es unterstützen möchten, klicken Sie hier
Vielen Dank an Jetbrains für die freundliche Bereitstellung einer Lizenz für die Arbeit an diesem und anderen Open-Source-Projekten.
Sie fragen sich, wie Sie ein PHP-Erweiterungspaket von Grund auf erstellen können?
Bitte achten Sie auf meinen Praxiskurs, in dem ich einige Erfahrungen in der Erweiterungsentwicklung weitergeben werde – „Praktisches Tutorial zum PHP Extension Pack – Von den ersten Schritten bis zur Veröffentlichung“.
MIT