亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

ホームページ バックエンド開発 PHPチュートリアル WeChatログインをPHPのlaravelフレームワークと素早く統合する方法

WeChatログインをPHPのlaravelフレームワークと素早く統合する方法

Jan 14, 2017 am 11:44 AM

この記事は、PHP 言語の laravel フレームワークのユーザーを対象として、このフレームワークに基づいたシンプルな統合 WeChat ログイン方法を紹介します。それの使い方:

1.php_weixin_providerをインストールする

プロジェクトの下で「composer require thirdproviders/weixin」を実行してインストールを完了します。インストールが成功すると、プロジェクトのベンダー ディレクトリに php_weixin_provider ライブラリ ファイルが表示されるはずです。

WeChatログインをPHPのlaravelフレームワークと素早く統合する方法

2. WeChat ログインパラメータを設定する

構成できるパラメータは合計 7 つあります。

client_id: 公式アカウントによって作成されたアプリケーションの appid に対応します

client_secret: パブリック アカウントによって作成されたアプリケーションの appid に対応します

リダイレクト: WeChat 認証が成功した後のコールバック アドレスに対応します。

proxy_url: WeChat によって承認されたプロキシ サービス アドレスに対応します (この記事を読んでその機能を理解できます)

device: PC での WeChat ログインとモバイルでの WeChat ログインの違いは、デフォルト値は PC であり、モバイルの場合は空に設定できます。

state_cookie_name: 承認リンクにはランダムな狀態(tài)パラメーターが含まれます。このパラメーターは、WeChat がコールバックするときにそのまま返されます。そのとき、狀態(tài)パラメーターが、認証リンク。CSRF 攻撃を防止します。このソリューションでは、認可時に最初に狀態(tài)パラメータが Cookie に保存されるため、このパラメータは狀態(tài)パラメータが保存される Cookie の名前を指定するために使用されます。デフォルト値は wx_state_cookie です。

state_cookie_time: wx_state_cookie の有効期間を指定します。デフォルトは 5 分です。

これら 7 つのパラメータには 2 つの設定方法があります。

1 つ目は、.env 構成ファイルでこれらのパラメーターを大文字で構成することです。

WeChatログインをPHPのlaravelフレームワークと素早く統合する方法

注: 1. 各構成項目は大文字で、WEIXIN_ で始まります。 2. 最初の 3 つの構成項目は、前に紹介したパラメーター名とまったく同じではありません。KEY は client_id に、SECRET は client_secret に、REDIRECT_URI は redirect 3 に対応します。他のものは、以前に紹介したパラメータ名と一致しています。

2 つ目は、これらのパラメータを config/services.php ファイルに設定することです。

WeChatログインをPHPのlaravelフレームワークと素早く統合する方法

この方法で構成する場合、各構成項目の名前は以前に紹介したものと一致します。

注意すべき點:

php_weixin_providerはlaravel/socialiteをベースに実裝されているため、client_id、client_secret、redirectを設定する必要があります。そうしないと、php_weixin_providerのインスタンス化処理でエラーが発生します。 client_idとclient_secretはまとめて設定しても問題ないと思います。ただし、リダイレクトの場合は、WeChat ログインが使用されるすべての場所で最終的なコールバック アドレスが同じになるわけではないため、均一に構成するとすべてのシナリオのニーズを満たせない可能性があるため、有効なアドレスまたはリダイレクトにリダイレクトを構成することをお勧めします。空ではないコールバック アドレスが無効です。とにかく後で php_weixin_provider を使用する場合、呼び出し時にこのパラメータの値を変更することもできます。

proxy_url が存在する場合は、公共の場所で設定することをお勧めします。

state_cookie_name と state_cookie_time には両方ともデフォルト値があるため、基本的に再設定する必要はありません
使用時にデバイスを指定することができます。

すべての構成パラメータは使用中に再指定できます。

3. php_weixin_provider を登録する

プロジェクトの config/app.php ファイルで、プロバイダー構成セクションを見つけて、その構成配列に次のコードを追加します。

WeChatログインをPHPのlaravelフレームワークと素早く統合する方法

4. サードパーティのログイン イベントの監(jiān)視に登録する

次のコードをプロジェクトの app/Providers/EventServiceProvider.php に追加します。

WeChatログインをPHPのlaravelフレームワークと素早く統合する方法

laravel フレームワーク全體は IOC およびイベント駆動型のアイデアです。js に精通している場合は、イベント駆動型についてもよく知っているでしょう。IOC (Inversion of Control) についてもよく知っているでしょう。これは、ステップ 3 と 4 の構成の役割を理解するための鍵となります。

5. WeChat ログイン用のインターフェイスを作成する

例は次のとおりです。

リーリー

Socialite::with('weixin') は、php_weixin_provider のインスタンスを返します。これは次のとおりです。

WeChatログインをPHPのlaravelフレームワークと素早く統合する方法

拿到這個實例之后,就可以采用鏈式的方式調用它提供的所有public方法,比如設置配置參數,setDevice等等。

6. 編寫微信登錄回調的接口

舉例如下:

//登錄回調
Route::get('/login/notify', function () {
 $user = null;
 try {
  $user = Socialite::with('weixin')->user();
 } catch(\Exception $e) {
  return '獲取微信用戶異常';
 }
 return $user->nickname;
});

通過Socialite::with('weixin')拿到php_weixin_provider實例后,調用user方法,就會自動跟微信調用相關接口,并把微信的返回值封裝成對象返回。如果在此過程中,有任何錯誤都會以異常的形式拋出,比如state參數校驗失敗,比如code失效等。

返回的$user對象包含的有效屬性有:

WeChatログインをPHPのlaravelフレームワークと素早く統合する方法

小結:

這個方案是基于laravel/socialite實現,并發(fā)布到composer來使用的。laravel/socialite是laravel官方提供的第三方登錄的模塊,基于它可以很方便的集成大部分第三方平臺的認證,目前它官方已經提供很多第三方的登錄實現:https://socialiteproviders.github.io/。除了國外的facebook,google,github等,國內的微信,微博,qq也都有提供。我在一開始也用的是它官方提供的默認的微信登錄provider來做的,但是后來我發(fā)現了以下幾個問題:

1. 不支持微信授權的代理;

2. pc端跟移動端竟然還是分兩個項目來做的:?

WeChatログインをPHPのlaravelフレームワークと素早く統合する方法

3. 它封裝的user對象里竟然不包含unionid

4. 更改配置參數的方式,實在是讓人覺得難以使用:?

WeChatログインをPHPのlaravelフレームワークと素早く統合する方法

所以我就在它官方的微信登錄provider基礎上,按照自己的想法,重新實現了一個來解決我發(fā)現的這些問題。

更多WeChatログインをPHPのlaravelフレームワークと素早く統合する方法相關文章請關注PHP中文網!


このウェブサイトの聲明
この記事の內容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當する法的責任を負いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Stock Market GPT

Stock Market GPT

AIを活用した投資調査により賢明な意思決定を実現

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ホットトピック

メールアドレスがPHPで有効かどうかを確認する方法は? メールアドレスがPHPで有効かどうかを確認する方法は? Sep 21, 2025 am 04:07 AM

usefilter_var()tovalidateemailsyntaxandcheckdnsrr()toverifydomainmxrecords.example:$ email = "user@example.com"; if($ email、filter_validate_email)

MySQL條件集計:ケースステートメントを使用して、フィールドの條件合計とカウントを実裝する MySQL條件集計:ケースステートメントを使用して、フィールドの條件合計とカウントを実裝する Sep 16, 2025 pm 02:39 PM

この記事では、MySQLで條件付き集計を実行するためにケースステートメントを使用して特定のフィールドの條件付き合計とカウントを実現する方法について説明します。実用的なサブスクリプションシステムケースを通じて、レコードステータス(「終了」や「キャンセル」など)に基づいてイベントの合計期間と數を動的に計算する方法を示し、それにより、複雑な條件集計のニーズを満たすことができない従來の合計関數の制限を克服します。チュートリアルでは、左の結合の可能性のあるヌル値を扱う際の合體の重要性を詳細に機能させて、sum機能のケースステートメントの適用を分析します。

PHPでオブジェクトの深いコピーまたはクローンを作成する方法は? PHPでオブジェクトの深いコピーまたはクローンを作成する方法は? Sep 21, 2025 am 12:30 AM

useunserialize(serialize($ obj))fordeepcopying whenalldataisserializable;それ以外の場合は、__clone()tomaniallyduplicatededededededavoidsharedReferenceを実裝します。

PHPで2つの配列をマージする方法は? PHPで2つの配列をマージする方法は? Sep 21, 2025 am 12:26 AM

usearray_merge()tocombinearrays、urblitingduplicatestringkeysandreindexingnumerickeys; forsimplerconcatenation、inthphp5.6、usethesplatoperator [... $ array1、... $ array2]。

PHPプロジェクトで名前空間を使用する方法は? PHPプロジェクトで名前空間を使用する方法は? Sep 21, 2025 am 01:28 AM

NamesSpacesInphporganizeCodeandPreventnamingConflictsByGroupingClasses、インターフェイス、関數、およびコンテンダントアンダースピフィクティフィクティフィクティフィクティフィクショナル

PHPを使用してデータベースでレコードを更新する方法は? PHPを使用してデータベースでレコードを更新する方法は? Sep 21, 2025 am 04:47 AM

toupdateadatabaserecordinphp、firstconnectusingpdoormysqli、thenuseprepreadedStatementStoeaseaseesecuresQlupDateQuery.example:$ pdo = newpdo( "mysql:host = localhost; dbname = your_database"、$ username、$ username、$ sibsfar

PHPの魔法の方法とは何ですか? `__call()`および `__get()`の例を提供します。 PHPの魔法の方法とは何ですか? `__call()`および `__get()`の例を提供します。 Sep 20, 2025 am 12:50 AM

the__call()メソッドは、customhandlingbyacceptingthemetodnameandarguments、ashownwhencollingdsslikesayhello()

PHPでファイル拡張機能を取得するにはどうすればよいですか? PHPでファイル拡張機能を取得するにはどうすればよいですか? Sep 20, 2025 am 05:11 AM

usepathinfo($ filename、pathinfo_extension)togetthefileextension; itreliailailavaliavelyhandlesmultipledotsendedgecases、returningtheextension(例えば、 "pdf")oranemptystringifnoneexists。

See all articles