微信掃碼登錄已成爲許多(duō)網站和(hé)應用(yòng)的(de)常見登錄方式之一。在本文中,我們将介紹如何使用(yòng)ThinkPHP 6框架來(lái)實現微信掃碼登錄功能。通(tōng)過本文的(de)指導,您将能夠快(kuài)速搭建一個(gè)安全可(kě)靠的(de)微信掃碼登錄系統。
一、準備工作
在開始之前,确保您已經滿足以下(xià)幾個(gè)條件:
1. 擁有一個(gè)有效的(de)微信開放平台賬号,并創建一個(gè)新的(de)網站應用(yòng)。
2. 安裝好了(le)最新穩定版本的(de)ThinkPHP 6框架。
3. 了(le)解ThinkPHP 6的(de)基本使用(yòng)方法和(hé)目錄結構。
二、獲取微信開放平台的(de)應用(yòng)信息
1. 登錄微信開放平台,進入“應用(yòng)管理(lǐ)”頁面。
2. 創建一個(gè)新的(de)網站應用(yòng),并填寫相關信息。
3. 在應用(yòng)詳情頁面中,獲取到“AppID”和(hé)“AppSecret”。
三、
編寫控制器代碼
public function index(){
$user = session('member_id');
if($user){
$this->error('你已登錄,請勿重複登錄');
}else{
$appid = "你的(de)appid";
$rand_code = 'M' . time() . rand('100001', '999999'); //随機字符串
$str = "https://你的(de)域名/login/getToken?rand_code=".$rand_code;//返回參數的(de)地址
$redirect_uri=urlencode($str);
$scope = 'snsapi_base';//不需要授權
$url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' . $appid . '&redirect_uri=' . $redirect_uri . '&response_type=code&scope=' . $scope . '&state=123#wechat_redirect';
$img = $this->signPng($url);
}
// 渲染模闆輸出
return view('', compact('ewm','img','rand_code'));
}
/**
* 生成二維碼
* @return \think\Response
*/
public function signPng($url){
header("Content-Type:image/png");
// 引入插件
require_once fw_root().'extend/Phpqrcode/phpqrcode.php';
$qRcode = new \QRcode();
ob_start();
// 糾錯級别:L、M、Q、H
$level = 'L';
// 圖片分(fēn)辨率
$size = 4;
// 第一個(gè)參數可(kě)以放置鏈接或者内容
$qRcode->png($url, false, $level,$size);
$imageString = base64_encode(ob_get_contents());
ob_end_clean();
// return "";
return $imageString;
}
//處理(lǐ)返回信息
public function getToken(){
$code = $this->request->get('code');//微信返回的(de)信息
$promo_code = $this->request->get('rand_code');
$appid = "你的(de)appid";
$secret = "你的(de)AppSecret";
$get_token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $appid . '&secret=' . $secret . '&code=' . $code . '&grant_type=authorization_code';
$data = fopen($get_token_url, "rb");
$data = stream_get_contents($data);
@fclose($data);
$json_obj = json_decode($data, true);
//根據openid和(hé)access_token查詢用(yòng)戶信息
$access_token = $json_obj['access_token'];
$openid = $json_obj['openid'];
//将用(yòng)戶信息存入數據庫
$mess['username'] = '微信用(yòng)戶'.$openid;
$mess['status'] = 1;
$mess['code'] = $promo_code;
$mess['create_time'] = time();
$member_id = Db::name('member')->save($mess);
return view('login_return');
}
//判斷登錄狀态
public function login_status() {
$rand_code = $this->request->get('rand_code');
$member_id = Db::name('member')->where(['code' => $rand_code])->find();
if($member_id){
session('member_id',$member_id['username']);
$result['code'] = 1;
$result['msg'] = '登錄成功';
}else{
$result['code'] = 0;
}
return json($result);
}
四、創建視圖文件
1. 在項目的(de)view目錄下(xià)創建一個(gè)login目錄,并在其中創建一個(gè)index.html文件:
微信掃碼登錄
使用(yòng)微信掃描二維碼登錄
五、測試運行
1. 在浏覽器中訪問http://localhost/myproject/login,将會看到一個(gè)二維碼。
2. 掃碼完成後會回調到getToken方法,并顯示“登錄成功!”的(de)提示。
注意事項:
1. 在使用(yòng)微信掃碼登錄時(shí),确保網站已經備案并配置了(le)HTTPS安全證書(shū),以保證數據傳輸過程的(de)安全性。
2. 驗證用(yòng)戶信息時(shí),根據業務需求進行合理(lǐ)的(de)校驗與邏輯處理(lǐ),比如保存用(yòng)戶信息到數據庫或進行權限控制等。
3.
公衆号必須是服務号,才能開通(tōng)網頁授權接口
如沒特殊注明(míng),文章(zhāng)均爲方維網絡原創,轉載請注明(míng)來(lái)自