微信扫码登录已成为许多网站和应用的常见登录方式之一。在本文中,我们将介绍如何使用ThinkPHP 6框架来实现微信扫码登录功能。通过本文的指导,您将能够快速搭建一个安全可靠的微信扫码登录系统。
一、准备工作
在开始之前,确保您已经满足以下几个条件:
1. 拥有一个有效的微信开放平台账号,并创建一个新的网站应用。
2. 安装好了最新稳定版本的ThinkPHP 6框架。
3. 了解ThinkPHP 6的基本使用方法和目录结构。
二、获取微信开放平台的应用信息
1. 登录微信开放平台,进入“应用管理”页面。
2. 创建一个新的网站应用,并填写相关信息。
3. 在应用详情页面中,获取到“AppID”和“AppSecret”。
三、
编写控制器代码
public function index(){
$user = session('member_id');
if($user){
$this->error('你已登录,请勿重复登录');
}else{
$appid = "你的appid";
$rand_code = 'M' . time() . rand('100001', '999999'); //随机字符串
$str = "https://你的域名/login/getToken?rand_code=".$rand_code;//返回参数的地址
$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';
// 图片分辨率
$size = 4;
// 第一个参数可以放置链接或者内容
$qRcode->png($url, false, $level,$size);
$imageString = base64_encode(ob_get_contents());
ob_end_clean();
// return "";
return $imageString;
}
//处理返回信息
public function getToken(){
$code = $this->request->get('code');//微信返回的信息
$promo_code = $this->request->get('rand_code');
$appid = "你的appid";
$secret = "你的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和access_token查询用户信息
$access_token = $json_obj['access_token'];
$openid = $json_obj['openid'];
//将用户信息存入数据库
$mess['username'] = '微信用户'.$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. 在项目的view目录下创建一个login目录,并在其中创建一个index.html文件:
微信扫码登录
使用微信扫描二维码登录
五、测试运行
1. 在浏览器中访问http://localhost/myproject/login,将会看到一个二维码。
2. 扫码完成后会回调到getToken方法,并显示“登录成功!”的提示。
注意事项:
1. 在使用微信扫码登录时,确保网站已经备案并配置了HTTPS安全证书,以保证数据传输过程的安全性。
2. 验证用户信息时,根据业务需求进行合理的校验与逻辑处理,比如保存用户信息到数据库或进行权限控制等。
3.
公众号必须是服务号,才能开通网页授权接口
如没特殊注明,文章均为方维网络原创,转载请注明来自https://www.szfangwei.cn/news/6967.html