


Comment intégrer rapidement la connexion WeChat au framework Laravel de PHP
Jan 14, 2017 am 11:44 AMCet article s'adresse aux utilisateurs du framework laravel du langage PHP. Il présente une méthode de connexion WeChat intégrée simple basée sur ce framework. Comment l'utiliser?:
1. Installez php_weixin_provider
Exécutez composer nécessite des fournisseurs tiers/weixin dans le cadre du projet pour terminer l'installation. Après une installation réussie, vous devriez pouvoir voir le fichier de bibliothèque php_weixin_provider dans le répertoire du fournisseur du projet?:
2. Configurez les paramètres de connexion WeChat
Il y a au total 7 paramètres configurables, à savoir :
client_id : correspondant à l'appid d'application créé par le compte officiel
client_secret : correspondant à l'appid d'application créé par le compte public
redirect?: correspond à l'adresse de rappel après une autorisation WeChat réussie
proxy_url : correspond à l'adresse du service proxy autorisé par WeChat (vous pouvez lire cet article pour comprendre sa fonction)
appareil?: La différence est entre la connexion WeChat sur PC et la connexion WeChat sur mobile. La valeur par défaut est PC. S'il s'agit d'un mobile, elle peut être définie sur vide.
state_cookie_name?: le lien d'autorisation contiendra un paramètre d'état aléatoire. Ce paramètre sera renvoyé intact lorsque WeChat rappellera. à ce moment-là, vous pouvez déterminer si la demande est valide en vérifiant si le paramètre d'état est le même que le paramètre transmis dans le fichier. lien d’autorisation. Empêcher les attaques CSRF. Cette solution enregistrera d'abord le paramètre d'état dans le cookie lors de l'autorisation, ce paramètre est donc utilisé pour spécifier le nom du cookie où le paramètre d'état est stocké. La valeur par défaut est wx_state_cookie.
state_cookie_time?: Spécifie la période de validité de wx_state_cookie, la valeur par défaut est de 5 minutes
Il existe 2 méthodes de réglage pour ces sept paramètres.
La première consiste à configurer ces paramètres en majuscules dans le fichier de configuration .env :
Remarque?: 1. Chaque élément de configuration est en majuscule et commence par WEIXIN_?; 2. Les trois premiers éléments de configuration ne sont pas exactement les mêmes que les noms de paramètres introduits précédemment. KEY correspond à client_id, SECRET correspond à client_secret et REDIRECT_URI correspond à redirect?3?; . D'autres sont cohérents avec les noms de paramètres introduits précédemment.
La seconde consiste à configurer ces paramètres dans le fichier config/services.php?:
Pour une configuration de cette manière, le nom de chaque élément de configuration est cohérent avec celui introduit précédemment.
Choses à noter?:
Puisque php_weixin_provider est implémenté sur la base de laravel/socialite, il nécessite que client_id, client_secret et redirect soient configurés, sinon une erreur se produira lors du processus d'instanciation de php_weixin_provider?; pour client_id et client_secret, je pense qu'il n'y a aucun problème à les configurer en un seul. endroit, mais pour la redirection, s'il est configuré de manière uniforme, il peut ne pas répondre aux besoins de tous les scénarios, car l'adresse de rappel finale n'est pas la même dans tous les endroits où la connexion WeChat est utilisée, il est donc recommandé de configurer la redirection vers un ou valide?; adresse de rappel non vide non valide?; de toute fa?on. Lorsque vous utilisez php_weixin_provider ultérieurement, vous pouvez également modifier la valeur de ce paramètre lors de l'appel.
Si proxy_url existe, il est recommandé de le configurer dans un lieu public ;
Puisque state_cookie_name et state_cookie_time ont tous deux des valeurs par défaut, il n'est fondamentalement pas nécessaire de les reconfigurer
?;
L'appareil peut être spécifié lors de son utilisation.
Tous les paramètres de configuration peuvent être respécifiés pendant l'utilisation.
3. Enregistrez php_weixin_provider
Dans le fichier config/app.php du projet, recherchez la section de configuration des fournisseurs et ajoutez le code suivant à son tableau de configuration?:
4. Inscrivez-vous à la surveillance des événements de connexion tiers
Ajoutez le code suivant au fichier app/Providers/EventServiceProvider.php du projet?:
Le framework Laravel dans son ensemble est une idée IOC et basée sur les événements. Si vous êtes familier avec js, vous serez très familier avec les modèles de conception, vous serez familier avec IOC (Inversion of Control). , également connu sous le nom de DI : Dependency Injection). C'est la clé pour comprendre le r?le de la configuration dans les étapes 3 et 4.
5. écrivez une interface pour la connexion à WeChat
Les exemples sont les suivants?:
//采用代理跳轉(zhuǎn),從PC端微信登錄 Route::get('/login', function () { return Socialite::with('weixin') ->setProxyUrl('http://proxy.your.com') ->setRedirectUrl(url('/login/notify')) ->redirect(); }); //采用代理跳轉(zhuǎn),從手機(jī)端微信登錄 Route::get('/login2', function () { return Socialite::with('weixin') ->setProxyUrl('http://proxy.your.com') ->setDevice('') ->setRedirectUrl(url('/login/notify')) ->redirect(); }); //不采用代理跳轉(zhuǎn),從PC端微信登錄 Route::get('/login', function () { return Socialite::with('weixin') ->setRedirectUrl(url('/login/notify')) ->redirect(); }); //不采用代理跳轉(zhuǎn),從手機(jī)端微信登錄 Route::get('/login4', function () { return Socialite::with('weixin') ->setDevice('') ->setRedirectUrl(url('/login/notify')) ->redirect(); });
Socialite::with('weixin') renverra une instance de php_weixin_provider, qui est?:
拿到這個(gè)實(shí)例之后,就可以采用鏈?zhǔn)降姆绞秸{(diào)用它提供的所有public方法,比如設(shè)置配置參數(shù),setDevice等等。
6. 編寫(xiě)微信登錄回調(diào)的接口
舉例如下:
//登錄回調(diào) Route::get('/login/notify', function () { $user = null; try { $user = Socialite::with('weixin')->user(); } catch(\Exception $e) { return '獲取微信用戶(hù)異常'; } return $user->nickname; });
通過(guò)Socialite::with('weixin')拿到php_weixin_provider實(shí)例后,調(diào)用user方法,就會(huì)自動(dòng)跟微信調(diào)用相關(guān)接口,并把微信的返回值封裝成對(duì)象返回。如果在此過(guò)程中,有任何錯(cuò)誤都會(huì)以異常的形式拋出,比如state參數(shù)校驗(yàn)失敗,比如code失效等。
返回的$user對(duì)象包含的有效屬性有:
小結(jié):
這個(gè)方案是基于laravel/socialite實(shí)現(xiàn),并發(fā)布到composer來(lái)使用的。laravel/socialite是laravel官方提供的第三方登錄的模塊,基于它可以很方便的集成大部分第三方平臺(tái)的認(rèn)證,目前它官方已經(jīng)提供很多第三方的登錄實(shí)現(xiàn):https://socialiteproviders.github.io/。除了國(guó)外的facebook,google,github等,國(guó)內(nèi)的微信,微博,qq也都有提供。我在一開(kāi)始也用的是它官方提供的默認(rèn)的微信登錄provider來(lái)做的,但是后來(lái)我發(fā)現(xiàn)了以下幾個(gè)問(wèn)題:
1. 不支持微信授權(quán)的代理;
2. pc端跟移動(dòng)端竟然還是分兩個(gè)項(xiàng)目來(lái)做的:?
3. 它封裝的user對(duì)象里竟然不包含unionid
4. 更改配置參數(shù)的方式,實(shí)在是讓人覺(jué)得難以使用:?
所以我就在它官方的微信登錄provider基礎(chǔ)上,按照自己的想法,重新實(shí)現(xiàn)了一個(gè)來(lái)解決我發(fā)現(xiàn)的這些問(wèn)題。
更多Comment intégrer rapidement la connexion WeChat au framework Laravel de PHP相關(guān)文章請(qǐng)關(guān)注PHP中文網(wǎng)!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Stock Market GPT
Recherche d'investissement basée sur l'IA pour des décisions plus intelligentes

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Usefilter_var () tovalidateemailsyntaxandcheckdnsrr () toverifydomainmxrecords.example: $ email = "user@example.com"; if (f ilter_var ($ e-mail, filter_validate_email) && checkdnsrr (explosage ('@', $ e-mail) [1], 'mx')) {echo "ValidAndDeliverableMail & Qu

Cet article explique en profondeur comment utiliser les instructions de cas pour effectuer une agrégation conditionnelle dans MySQL pour atteindre la sommation conditionnelle et le comptage de champs spécifiques. Grace à un cas de système d'abonnement pratique, il montre comment calculer dynamiquement la durée totale et le nombre d'événements en fonction de l'état des enregistrements (tels que "end" et "annuler"), surmontant ainsi les limites des fonctions de somme traditionnelles qui ne peuvent pas répondre aux besoins d'une agrégation conditionnelle complexe. Le tutoriel analyse en détail l'application des instructions de cas en détail et souligne l'importance de la fusion lorsqu'il s'agit des valeurs nulles possibles de la jointure gauche.

UseUnserialize (serialize ($ obj)) FordopcopyingwhenallDataisSerializable; Sinon, implémentez__Clone () TomanuallyDuplicatesedObjectsAndavoidSharedReferences.

UseArray_merge () toCombineArrays, écrasant leduplicatestringKeysAndreIndexingNumericKeys; ForsimplecCaTencatenation, en particulierInphp5.6, usethesplatoperator [... $ array1, ... $ array2].

NamespacesInphporganizEcodeAndPreventnamingConflictsBygroupingClasses, Interfaces, Functions et ConstantsunSunSaspecificName.2.DefineanamespaceusingTheNamesPaceSpaceKeyWordAtTopofaFile, suiviByTheNamesPacename, Suchasapp \ Controlers...USUSEUSEKEYWORDTOI

ToupDateAdatabasereCorDinPhp, FirstConnectUsingPDoOrmysQLi, theNusepreparedStationStoExECUSEASECURSQLUPDATEQUERY.example: $ pdo = newPDO ("MySql: host = localhost; dbname = votre_database", $ username, $ mot de passe); $ sql = "dameussem =.

La méthodiette () méthodiste axée sur le point de réviser la mise en ?uvre de l'inscription, ce qui permet de faire de la maintenance à la qualité de qualité et

UsePathinfo ($ nom de fichier, pathinfo_extension) togetThefileExtension; itreliabblyHandlesMultipledototsEdGasases, renvoyantTheExtension (par exemple, "pdf") oranemptystringefNoneExists.
