近年來(lái),隨著社交網(wǎng)絡(luò)的興起和智能手機(jī)的普及,微信成為了人們?nèi)粘I钪胁豢苫蛉钡囊徊糠帧T诨ヂ?lián)網(wǎng)應(yīng)用的領(lǐng)域,實(shí)現(xiàn)微信登錄功能是非常必要的一部分。眾所周知,微信的授權(quán)機(jī)制采用OAuth 2.0授權(quán)機(jī)制,這給我們的微信登錄功能實(shí)現(xiàn)帶來(lái)了很大的方便。下面我們將詳細(xì)介紹如何通過(guò)PHP語(yǔ)言來(lái)實(shí)現(xiàn)微信登錄功能。
一、微信開(kāi)發(fā)平臺(tái)配置
登錄[微信開(kāi)放平臺(tái)](https://open.weixin.qq.com)注冊(cè)賬號(hào),注冊(cè)完成后,進(jìn)入微信開(kāi)放平臺(tái)管理中心。
點(diǎn)擊中心頁(yè)面的“管理公眾號(hào)”菜單,輸入需要接入的微信公眾號(hào)信息。
經(jīng)過(guò)微信開(kāi)放平臺(tái)的認(rèn)證之后,我們需要獲取微信開(kāi)放平臺(tái)的AppID和AppSecret,記錄在登錄代碼中。登錄[微信開(kāi)放平臺(tái)](https://open.weixin.qq.com),進(jìn)入管理中心,選擇“移動(dòng)應(yīng)用”,然后選擇“添加移動(dòng)應(yīng)用”。
填寫(xiě)移動(dòng)應(yīng)用基本信息并提交審核,審核批準(zhǔn)后即可獲得AppID和AppSecret。
二、PHP代碼實(shí)現(xiàn)
1、構(gòu)建微信登錄鏈接
<?php $appid = “your_appid”; //appid $redirect_uri = urlencode('http://yourdomain.com/login.php'); //登錄成功回調(diào)網(wǎng)址,請(qǐng)確保此地址跟公眾號(hào)設(shè)置的授權(quán)回調(diào)頁(yè)面路徑一致。 $scope = 'snsapi_userinfo'; //snsapi_base 或 snsapi_userinfo $url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' . $appid . '&redirect_uri=' . $redirect_uri . '&response_type=code&scope=' . $scope . '&state=STATE#wechat_redirect'; header('Location:' . $url); exit; ?>
上述代碼中,我們需要填寫(xiě)$appid
、$redirect_uri
和$scope
參數(shù)。其中,$appid
為微信開(kāi)放平臺(tái)分配給我們的AppID;$redirect_uri
為用戶(hù)授權(quán)后的回調(diào)網(wǎng)址,需要跟公眾號(hào)設(shè)置的授權(quán)回調(diào)頁(yè)面一致;$scope
分為snsapi_base和snsapi_userinfo,前者只能獲得用戶(hù)的openid,而后者可獲得用戶(hù)的基本信息。
2、獲取access_token和openid
<?php $appid = 'your_appid'; //appid $secret = 'your_appsecret'; //appsecret $code = $_GET['code']; //網(wǎng)頁(yè)授權(quán)code $access_token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $appid . '&secret=' . $secret . '&code=' . $code . '&grant_type=authorization_code'; //獲取access_token和openid的鏈接 $access_token = file_get_contents($access_token_url); $access_token_arr = json_decode($access_token, true); //將返回的json字符串轉(zhuǎn)為數(shù)組 ?>
在這段代碼中,我們通過(guò)用戶(hù)成功授權(quán)后返回的code,再將code傳給微信服務(wù)器,從而獲取access_token和openid。
3、獲取用戶(hù)基本信息
<?php $access_token = $access_token_arr['access_token']; $openid = $access_token_arr['openid']; $user_info_url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $access_token . '&openid=' . $openid . '&lang=zh_CN'; //獲取用戶(hù)信息的鏈接 $user_info = file_get_contents($user_info_url); $user_info_arr = json_decode($user_info, true); //將返回的json字符串轉(zhuǎn)為數(shù)組 ?>
在這段代碼中,我們通過(guò)access_token和openid去獲取用戶(hù)的基本信息,如用戶(hù)昵稱(chēng)、性別、城市等。需要注意的是,在獲取用戶(hù)基本信息前,我們需要確保用戶(hù)已經(jīng)授權(quán)scope為snsapi_userinfo的權(quán)限。
4、完整的登錄示例代碼
<?php if (!isset($_GET['code']) || empty($_GET['code'])) { //第一步:用戶(hù)同意授權(quán),獲取code $appid = 'your_appid'; $redirect_uri = urlencode('http://yourdomain.com/login.php'); $scope = 'snsapi_userinfo'; $url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' . $appid . '&redirect_uri=' . $redirect_uri . '&response_type=code&scope=' . $scope . '&state=STATE#wechat_redirect'; header('Location:' . $url); exit; } else { //第二步:通過(guò)code換取網(wǎng)頁(yè)授權(quán)access_token以及openid,再獲取用戶(hù)信息 $appid = 'your_appid'; $secret = 'your_appsecret'; $code = $_GET['code']; $access_token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $appid . '&secret=' . $secret . '&code=' . $code . '&grant_type=authorization_code'; $access_token = file_get_contents($access_token_url); $access_token_arr = json_decode($access_token, true); $access_token = $access_token_arr['access_token']; $openid = $access_token_arr['openid']; $user_info_url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $access_token . '&openid=' . $openid . '&lang=zh_CN'; $user_info = file_get_contents($user_info_url); $user_info_arr = json_decode($user_info, true); //TODO:在這里可以將用戶(hù)信息存入數(shù)據(jù)庫(kù),供之后使用 //...... } ?>
三、小結(jié)
如上所述,通過(guò)簡(jiǎn)單的幾步,我們就可以使用PHP語(yǔ)言來(lái)實(shí)現(xiàn)微信登錄功能。本文只介紹了最基本的微信登錄實(shí)現(xiàn)方法,實(shí)際運(yùn)用中還有更多需要注意的問(wèn)題,如用戶(hù)權(quán)限的判斷、授權(quán)的有效期限等等。希望本文能對(duì)需要實(shí)現(xiàn)微信登錄的開(kāi)發(fā)者們提供一些幫助。