? ??? PHP ?? laravel ????? ???? ???? ?? ? ?????? ???? ?? ??? ?? WeChat ??? ??? ?????. ??? ???? ??:
1. php_weixin_provider ??
???? ????? ??? ????? ???? ??? thirdproviders/weixin? ?????. ????? ???? ????? ???? ?????? php_weixin_provider ????? ??? ? ? ????.
2. WeChat ??? ???? ??
??? ? ?? ????? ? 7????.
client_id: ?? ???? ??? ?????? appid? ??
client_secret: ?? ???? ??? ?????? appid? ??
????: WeChat ?? ?? ? ?? ??? ?????.
Proxy_url: WeChat?? ??? ??? ??? ??? ?????(?? ??? ????? ? ??? ?????).
??: PC??? WeChat ???? ?????? WeChat ???? ???? ???? PC???.
state_cookie_name: ?? ???? ??? ?? ????? ?????. ? ????? WeChat? ??? ? ??? ?????. ?? ?? ????? ??? ????? ???? ???? ??? ???? ??? ??? ? ????. ?? ??. CSRF ??? ?????. ? ???? ?? ?? ?? ?? ?? ????? ??? ????? ? ????? ?? ????? ???? ??? ??? ???? ? ?????. ???? wx_state_cookie???.
state_cookie_time: wx_state_cookie? ?? ??? ???? ???? 5????.
? 7? ?????? 2?? ?? ??? ????.
? ??? .env ?? ???? ??? ????? ???? ???? ????.
??: 1. ? ?? ??? ???? ???? WEIXIN_?? ?????. 2. ?? ? ?? ?? ??? ??? ??? ???? ??? ??? ???? ????. KEY? client_id? ????, SECRET? client_secret? ????, REDIRECT_URI? ????? ?????. ?? ??? ??? ??? ???? ??? ?????.
? ??? ??? ????? config/services.php ??? ???? ????:
??? ???? ????? ? ?? ??? ??? ??? ??? ?? ?????.
?? ??:
php_weixin_provider? laravel/socialite ???? ???? ??? client_id, client_secret, Redirect? ??? ???? ???. ??? ??? client_id? client_secret? ?? php_weixin_provider ????? ???? ??? ????? ??? ?????? ??? ?? ? ????. ??? ????? ?? ???? ???? ?? ????? ?? ??? ???? ?? ? ????. ???? WeChat ???? ???? ?? ??? ??? ?????. ?? ?? ??? ????? ????? ??? ??? ???? ?? ????. ?? ?? ?? ??? ?? ??; ??? ??? php_weixin_provider? ??? ? ??? ? ? ????? ?? ??? ?? ????.
Proxy_url? ???? ?? ?? ???? ???? ?? ????.
state_cookie_name? state_cookie_time? ?? ???? ???? ????? ???? ??? ????.
??? ??? ? ??? ? ????.
?? ?? ????? ?? ?? ?? ??? ? ????.
3. php_weixin_provider ??
????? config/app.php ???? ??? ?? ??? ?? ?? ?? ??? ?? ??? ?????.
4. ?3? ??? ??? ????? ?? ??
????? app/Providers/EventServiceProvider.php? ?? ??? ?????.
laravel ?????? ????? IOC?? ??? ?? ???????. js? ????? ??? ???? ?? ??? ????. ??? ??? ????? IOC(Inversion of Control)?? ??? ????. , DI: ??? ?????? ?) ?? 3??? 4???? ??? ??? ???? ? ?????.
5. WeChat ???? ?? ????? ??
?? ??? ????:
???Socialite::with('weixin')? ??? ?? php_weixin_provider ????? ?????.
拿到這個實例之后,就可以采用鏈?zhǔn)降姆绞秸{(diào)用它提供的所有public方法,比如設(shè)置配置參數(shù),setDevice等等。
6. 編寫微信登錄回調(diào)的接口
舉例如下:
//登錄回調(diào) 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實例后,調(diào)用user方法,就會自動跟微信調(diào)用相關(guān)接口,并把微信的返回值封裝成對象返回。如果在此過程中,有任何錯誤都會以異常的形式拋出,比如state參數(shù)校驗失敗,比如code失效等。
返回的$user對象包含的有效屬性有:
小結(jié):
這個方案是基于laravel/socialite實現(xiàn),并發(fā)布到composer來使用的。laravel/socialite是laravel官方提供的第三方登錄的模塊,基于它可以很方便的集成大部分第三方平臺的認(rèn)證,目前它官方已經(jīng)提供很多第三方的登錄實現(xiàn):https://socialiteproviders.github.io/。除了國外的facebook,google,github等,國內(nèi)的微信,微博,qq也都有提供。我在一開始也用的是它官方提供的默認(rèn)的微信登錄provider來做的,但是后來我發(fā)現(xiàn)了以下幾個問題:
1. 不支持微信授權(quán)的代理;
2. pc端跟移動端竟然還是分兩個項目來做的:?
3. 它封裝的user對象里竟然不包含unionid
4. 更改配置參數(shù)的方式,實在是讓人覺得難以使用:?
所以我就在它官方的微信登錄provider基礎(chǔ)上,按照自己的想法,重新實現(xiàn)了一個來解決我發(fā)現(xiàn)的這些問題。
更多WeChat ???? PHP? laravel ?????? ???? ???? ??相關(guān)文章請關(guān)注PHP中文網(wǎng)!

? AI ??

Undress AI Tool
??? ???? ??

Undresser.AI Undress
???? ?? ??? ??? ?? AI ?? ?

AI Clothes Remover
???? ?? ???? ??? AI ?????.

Clothoff.io
AI ? ???

Video Face Swap
??? ??? AI ?? ?? ??? ???? ?? ???? ??? ?? ????!

?? ??

??? ??

???++7.3.1
???? ?? ?? ?? ???

SublimeText3 ??? ??
??? ??, ???? ?? ????.

???? 13.0.1 ???
??? PHP ?? ?? ??

???? CS6
??? ? ?? ??

SublimeText3 Mac ??
? ??? ?? ?? ?????(SublimeText3)

PHP ?? ??? ?? ???? ?? ? ????? ??? ?????. 1. ?? ??? ??? ??? ??? ? ? ??? ??? ??? ?? ?? ??? ???? ???????. 2. ?? ??? ???? ???? ? ?? ????? ?? ?? ?? ??? ?????. 3. $ _get ? $ _post? ?? Hyperglobal ??? ?? ???? ?? ??? ? ??? ??? ??????? ???????. 4. ?? ?? ?? ???? ?? ?? ?? ??? ?????? ?? ??? ??? ?? ??? ???????. ??? ??? ????? ??? ??? ?? ???? ????? ? ??? ? ? ????.

PHP ?? ???? ???? ????? ?? ? ??? ???? ?? ?? ? ??? ???? ?? ??? ?????? ??? ??? ? ? ???????. 1. ??? ?? CSRF? ???? ?? ??? ??? ???? ?????? ??? ???? FINFO_FILE? ?? ?? MIME ??? ?????. 2. ??? ??? ??? ???? ??? ?? ??? ?? ? WEB ????? ??? ???? ??????. 3. PHP ?? ??? ?? ? ?? ???? NGINX/APACHE? ??? ????? ?? ???? ?????. 4. GD ?????? ??? ? ?? ???? ??? ?? ??? ?? ????.

PHP ?? ???? ? ?? ???? ??? ????. 1. // ?? #? ???? ? ?? ??? ???? // ???? ?? ????. 2. ?? /.../ ?? ?? ?? ??? ????? ?? ? ?? ??? ?? ? ? ????. 3. ?? ?? ?? / if () {} /? ?? ?? ??? ????? ??? ?? ?? ?? ??? ???? ????? ???? ??? ?? ???? ???? ??? ? ??? ??????.

Ageneratorinphpisamemory- ???? Way-Erate-Overgedatasetsetsbaluesoneatimeatimeatimeatimallatonce.1.generatorsuseTheyieldKeywordTocroadtOpvaluesondemand, RetingMemoryUsage.2

PHP ??? ???? ??? ??? ??? ????? ????. ??? ????? ?? ???? ??? "?? ? ?"??? "?"? ???????. 1. ??? ? ??? ??? DocBlock (/*/)? ?? ?? ??? ???? ??? ? ?? ???? ??????. 2. JS ??? ???? ?? ???? ??? ?? ??? ??? ?????. 3. ??? ?? ?? ?? ??? ???? ????? ????? ???? ?? ????? ???? ? ??????. 4. Todo ? Fixme? ????? ???? ? ? ??? ??? ???? ?? ?? ? ??? ???????. ??? ???? ?? ??? ??? ?? ?? ?? ???? ???? ? ????.

tolearnpheffectical, startBysetTupaloCalserErverEnmentUsingToolslikexamppandacodeeditor -likevscode.1) installxamppforapache, mysql, andphp.2) useacodeeditorforsyntaxsupport.3)) 3) testimplephpfile.next, withpluclucincludechlucincluclucludechluclucled

PHP??? ???? ??? ?? ?? ????? ???? ??? ?? ??? ??? ?? ? ??? ??? ???? ?????. ???? 0?? ???? ?? ??? ???? ? ?? ???? ?? ?? ? ? ????. MB_SUBSTR? ?? ??? ??? ???????. ? : $ str = "hello"; echo $ str [0]; ?? H; ??? MB_SUBSTR ($ str, 1,1)? ?? ??? ??? ??? ??????. ?? ???????? ???? ??? ???? ?? ???? ?? ?? ???? ?????? ??? ????? ?? ??? ?? ??? ???? ???? ?? ????.

toinstallphpquickly, usexampponwindowsorhomebrewonmacos.1. ??, downloadandinstallxAmpp, selectComponents, startApache ? placefilesinhtdocs.2
