w7corp/easywechat に基づく Laravel 用 WeChat SDK 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 職人ベンダー:publish --provider="OvertrueLaravelWeChatServiceProvider"
オプションで、エイリアスを追加します
'aliases' => [// ...'EasyWeChat' => OvertrueLaravelWeChatEasyWeChat::class, ]、
各モジュールは基本的に複数のアカウントをサポートしており、デフォルトはdefault
です。
次のようなミドルウェアAppHttpMiddlewareVerifyCsrfToken
内の WeChat 関連のルートを除外します。
protected $excel = [// ...'wechat', ];
Laravel 11.x の場合、 bootstrap/app.php
で$middleware->validateCsrfTokens
メソッドを使用できます。
->withMiddleware(function (Middleware $middleware) {$middleware->validateCsrfTokens(例外: [// ...'wechat', ]); })
通常のメッセージを受信する場合を例にして例を書いてみましょう。
ルーティング:
Route::any('/wechat', 'WeChatController@serve');
注: WeChat サーバーは認証時に
GET
を使用し、ユーザー メッセージの受信時にPOST
使用するため、これはRoute::any
である必要があります。
次に、コントローラーWeChatController
を作成します。
<?phpnamespace AppHttpControllers;use Log;class WeChatController extends Controller {パブリック関数serve() { Log::info('リクエストが到着しました。'); $server = app('easywechat.official_account')->getServer();$server->with(function($message){return "overtrue のフォローを歓迎します!"; });return $server->serve(); } }
ミドルウェアを使用する場合は、 app/config/easywechat.php
のoauth.callback
に無造作に記入するだけです (不要になったため)。
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 認証プロセスをオンラインで実行する必要があります。これにより、開発コストが削減されます。その場合は、次の 2 つの手順を実行する必要があります。
シミュレーション認証情報を準備します。
IlluminateSupportArr を使用します;SocialiteUser として OvertrueSocialiteUser を使用します;$user = new SocialiteUser(['id' => 'mock-openid','name' => 'overtrue','nickname' => 'overtrue','avatar' => ' http://example.com/avatars/overtrue.png','email' => null,'original' => [],'provider' => 「WeChat」、 ]);
スコープが
snsapi_userinfo
の場合、上記のフィールドは可能な限り完全に構成する必要があります。 もちろん、モードがsnsapi_base
のみの場合は、openid
のみが必要です。
データをセッションに書き込みます。
注: OAuth ミドルウェアを呼び出す前に必ず記述してください。たとえば、これを実現するグローバル ミドルウェアを作成し、開発環境でのみ有効にすることができます。
session(['easywechat.oauth_user.default' => $user]); // 同様に、「default」は、対応する他の設定名に置き換えることができます。
対応するイベントをリッスンし、イベントの発生後に対応する操作を実行できます。
OAuth Web 認証: OvertrueLaravelWeChatEventsWeChatUserAuthorized
// このイベントには次の属性があります $event->user; // session('easywechat.oauth_user.default') と同じ $event->isNewSession; // 新しいセッションかどうか (セッションが作成された場合は true)初回) $event->account; // 構成ファイル内の構成項目名に対応する、ミドルウェアによって現在使用されているアカウント
組み込みのOvertrueLaravelWeChatTraitsHandleOpenPlatformServerEvents
を使用すると、オープン プラットフォームのサーバー側検証を迅速に完了できます。
ルート/web.php:
Route::any('/open-platform/server', OpenPlatformController::class);
app/Http/Controllers/OpenPlatformController.php:
<?phpnamespace AppHttpControllers;use OvertrueLaravelWeChatTraitsHandleOpenPlatformServerEvents;class OpenPlatformController extends Controller {HandleOpenPlatformServerEvents を使用します; public function __invoke(Application $application): PsrHttpMessageResponseInterface{$app = app('easywechat.open_platform') return $this->handleServerEvents($app); } }
ヒント: デフォルトでは、WeChat オープン プラットフォームのプッシュ コンテンツに基づいて次のイベントがトリガーされ、対応するイベントをリッスンして処理できます。
承認者は正常に承認しました: OvertrueLaravelWeChatEventsOpenPlatformAuthorized
オーソライザー更新承認: OvertrueLaravelWeChatEventsOpenPlatformAuthorizeUpdated
承認者が承認をキャンセル: OvertrueLaravelWeChatEventsOpenPlatformUnauthorized
オープン プラットフォームが VerifyTicket をプッシュ: OvertrueLaravelWeChatEventsOpenPlatformVerifyTicketRefreshed
// イベントには次の属性があります $message = $event->payload // プラットフォーム イベント通知コンテンツを開きます。
構成後のhttp://example.com/open-platform/server
、オープン プラットフォームのサードパーティ アプリケーションによって設定された認証イベント受信 URL になります。
SDK のより具体的な使用方法については、https://www.easywechat.com を参照してください。
私のプロジェクトが気に入ってサポートしたい場合は、ここをクリックしてください
このプロジェクトや他のオープンソース プロジェクトに取り組むためのライセンスを親切にも提供してくださった Jetbrains に感謝します。
PHP 拡張機能パッケージを最初から構築する方法を知りたいですか?
拡張機能開発の経験を共有する私の実践的なコース「PHP 拡張パック実践チュートリアル - 入門からリリースまで」に注目してください。
マサチューセッツ工科大学