Dieser Artikel richtet sich an Benutzer des PHP-Sprach-Laravel-Frameworks. Er stellt eine einfache integrierte WeChat-Anmeldemethode vor, die auf diesem Framework basiert. So verwenden Sie es:
1. Installieren Sie php_weixin_provider
Führen Sie Composer require Thirdproviders/Weixin unter dem Projekt aus, um die Installation abzuschließen. Nach erfolgreicher Installation sollten Sie die Bibliotheksdatei php_weixin_provider im Herstellerverzeichnis des Projekts sehen können:
2. Konfigurieren Sie die WeChat-Anmeldeparameter
Insgesamt sind 7 Parameter konfigurierbar, nämlich:
client_id: entspricht der Anwendungs-App-ID, die vom offiziellen Konto erstellt wurde
client_secret: entspricht der Anwendungs-App-ID, die vom öffentlichen Konto erstellt wurde
Weiterleitung: Entspricht der Rückrufadresse nach erfolgreicher WeChat-Autorisierung
Proxy_URL: entspricht der von WeChat autorisierten Proxy-Dienstadresse (Sie können diesen Artikel lesen, um seine Funktion zu verstehen)
Gerät: Der Unterschied besteht zwischen der WeChat-Anmeldung auf dem PC und der WeChat-Anmeldung auf dem Mobilgerät. Wenn es sich um ein mobiles Gerät handelt, kann es auf leer gesetzt werden.
state_cookie_name: Der Autorisierungslink enthält einen zufälligen Statusparameter. Dieser Parameter wird intakt zurückgegeben, wenn WeChat zurückruft. Zu diesem Zeitpunkt können Sie feststellen, ob die Anforderung gültig ist, indem Sie überprüfen, ob der Statusparameter mit dem im übergebenen Parameter übereinstimmt Autorisierungslink. Verhindern Sie CSRF-Angriffe. Diese Lösung speichert den Statusparameter zunächst während der Autorisierung im Cookie. Daher wird dieser Parameter verwendet, um den Namen des Cookies anzugeben, in dem der Statusparameter gespeichert ist. Der Standardwert ist wx_state_cookie.
state_cookie_time: Gibt die Gültigkeitsdauer von wx_state_cookie an, der Standardwert beträgt 5 Minuten
Für diese sieben Parameter gibt es zwei Einstellmethoden.
Die erste besteht darin, diese Parameter in Großbuchstaben in der .env-Konfigurationsdatei zu konfigurieren:
Hinweis: 1. Jedes Konfigurationselement wird großgeschrieben und beginnt mit WEIXIN_. 2. Die ersten drei Konfigurationselemente sind nicht genau die gleichen wie die zuvor eingeführten Parameternamen. KEY entspricht client_id, und REDIRECT_URI entspricht redirect 3 Andere stimmen mit den zuvor eingeführten Parameternamen überein.
Die zweite besteht darin, diese Parameter in der Datei config/services.php zu konfigurieren:
Für eine Konfiguration auf diese Weise stimmt der Name jedes Konfigurationselements mit dem zuvor eingeführten überein.
Dinge zu beachten:
Da php_weixin_provider auf Basis von Laravel/Socialite implementiert wird, müssen client_id, client_secret und Redirect konfiguriert werden. Andernfalls tritt während des Instanziierungsprozesses von php_weixin_provider ein Fehler auf. Für client_id und client_secret ist es meiner Meinung nach kein Problem, sie in einem zu konfigurieren Ort, aber für die UmleitungWenn es einheitlich konfiguriert ist, erfüllt es möglicherweise nicht die Anforderungen aller Szenarien, da die endgültige Rückrufadresse nicht an jedem Ort identisch ist, an dem WeChat verwendet wird. Daher wird empfohlen, die Umleitung auf eine gültige oder zu konfigurieren ungültige, nicht leere Rückrufadresse; Bei späterer Verwendung von php_weixin_provider können Sie den Wert dieses Parameters auch beim Aufruf ändern.
Wenn die Proxy-URL vorhanden ist, wird empfohlen, sie an einem öffentlichen Ort zu konfigurieren.
Da state_cookie_name und state_cookie_time beide Standardwerte haben, besteht grundsätzlich keine Notwendigkeit, sie neu zu konfigurieren
Bei der Nutzung kann das Gerät angegeben werden.
Alle Konfigurationsparameter können während der Nutzung neu angegeben werden.
3. Registrieren Sie php_weixin_provider
Suchen Sie in der Datei config/app.php des Projekts den Abschnitt „Provider-Konfiguration“ und fügen Sie den folgenden Code zu seinem Konfigurationsarray hinzu:
4. Registrieren Sie sich für die Überwachung von Anmeldeereignissen Dritter
Fügen Sie den folgenden Code zur app/Providers/EventServiceProvider.php des Projekts hinzu:
Das Laravel-Framework als Ganzes ist eine IOC- und ereignisgesteuerte Idee. Wenn Sie mit js vertraut sind, sind Sie mit ereignisgesteuerten Mustern vertraut , auch bekannt als DI: Dependency Injection). Dies ist der Schlüssel zum Verständnis der Rolle der Konfiguration in den Schritten 3 und 4.
5. Schreiben Sie eine Schnittstelle für die WeChat-Anmeldung
Beispiele sind wie folgt:
//采用代理跳转,从PC端微信登录 Route::get('/login', function () { return Socialite::with('weixin') ->setProxyUrl('http://proxy.your.com') ->setRedirectUrl(url('/login/notify')) ->redirect(); }); //采用代理跳转,从手机端微信登录 Route::get('/login2', function () { return Socialite::with('weixin') ->setProxyUrl('http://proxy.your.com') ->setDevice('') ->setRedirectUrl(url('/login/notify')) ->redirect(); }); //不采用代理跳转,从PC端微信登录 Route::get('/login', function () { return Socialite::with('weixin') ->setRedirectUrl(url('/login/notify')) ->redirect(); }); //不采用代理跳转,从手机端微信登录 Route::get('/login4', function () { return Socialite::with('weixin') ->setDevice('') ->setRedirectUrl(url('/login/notify')) ->redirect(); });
Socialite::with('weixin') gibt eine Instanz von php_weixin_provider zurück, die lautet:
拿到这个实例之后,就可以采用链式的方式调用它提供的所有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对象包含的有效属性有:
小结:
这个方案是基于laravel/socialite实现,并发布到composer来使用的。laravel/socialite是laravel官方提供的第三方登录的模块,基于它可以很方便的集成大部分第三方平台的认证,目前它官方已经提供很多第三方的登录实现:https://socialiteproviders.github.io/。除了国外的facebook,google,github等,国内的微信,微博,qq也都有提供。我在一开始也用的是它官方提供的默认的微信登录provider来做的,但是后来我发现了以下几个问题:
1. 不支持微信授权的代理;
2. pc端跟移动端竟然还是分两个项目来做的:
3. 它封装的user对象里竟然不包含unionid
4. 更改配置参数的方式,实在是让人觉得难以使用:
所以我就在它官方的微信登录provider基础上,按照自己的想法,重新实现了一个来解决我发现的这些问题。
更多So integrieren Sie die WeChat-Anmeldung schnell in das Laravel-Framework von PHP相关文章请关注PHP中文网!