最近小编接到一个项目需要使用微信公众平台,实现微信网页扫码登录。
首先到微信开放平台https://open./,在微信开放平台注册开发者帐号,并且提交审核网站应用。然后获得相应的AppID和AppSecret。
流程:
前端编写代码生成一个二维码,然后用一个微信号扫描二维码并且确认登录,确认登录后,网页将会重定向到回调地址,并且戴上code,state参数,我们通过code参数获取access_token,获取access_token地址(https://api./sns/oauth2/access_token?appid={APPID}&secret={APPSECRET}&code={CODE}&grant_type=authorization_code),根据access_token和Openid请求(https://api./sns/userinfo?access_token={ACCESS_TOKEN}&openid={OPENID}),然后就可以获取到登录的用户信息
前端代码如下:
login.html
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>微信扫码登录</title></head><body><div id="login_container"></div></body><script src="http://res./connect/zh_CN/htmledition/js/wxLogin.js"></script><input type="hidden" value="{$url}" id="url">{include file="public/css"}{include file="public/js"}<script>var url=$("#url").val();var obj = new WxLogin({id:"login_container", //展示二维码及相关信息的div的idappid: "wx***************b",//微信AppIDscope: "snsapi_login",//OAuth2.0协议标准指定参数redirect_uri: "http"+url, //回调地址state: "",//参数,可带可不带style: "",//样式 提供"black"、"white"可选,默认为黑色文字描述href: "" //自定义样式链接,第三方可根据实际需求覆盖默认样式。});</script></html>
用户扫码成功并且确认登录后,会带code和state重定向到回调地址,code是我们获取access_token的重要凭证,而access_token又是我们获取用户信息的唯一关键。
后台登录方法:
login.php
<?phpnamespace app\index\controller;use lib\WechatLogin;use \think\Request;class login extends \think\Controller{public function login(){$request = Request::instance();$code = $request->get("code");$WechatLogin = \think\Config::get("config.WechatLogin");$wechat = new WechatLogin($WechatLogin);$access_token = $wechat->get_access_token($code);//获取access_tokenif(isset($access_token["errcode"])){//判断是不是发生错误,避免超时导致程序有误$Error_return["Status"] = false;$Error_return["ResultCode"] = $access_token["errcode"];$Error_return["Msg"] = $access_token["errmsg"];return json_encode($Error_return,JSON_UNESCAPED_UNICODE);//将错误以json格式输出}$user = $wechat->get_user_massage($access_token);//获取用户信息var_dump($user);//打印用户信息//以下就是登录操作,具体怎么实施按需求编写}}
微信登录封装类:
WechatLogin.php
<?phpnamespace lib;/** 微信网页授权登录登录*/class WechatLogin{protected static $AppID = "wx***************b";//内置AppIDprotected static $AppSecret = "0*******************************0";//内置AppSecret/*** 实例化类时设置微信AppID和AppSecret,无此需求可删除* WechatLogin constructor.* @param $data*/public function __construct($data){self::instance($data);}/*** 设置微信AppID和AppSecret* @param $data*/protected static function instance($data){self::$AppID = $data["AppID"];self::$AppSecret = $data["AppSecret"];}/*** 获取access_token,用于获取用户信息* @param $code用户扫码登录成功后,回调带的code* @return mixed*/public function get_access_token($code){$AppID = self::$AppID;$AppSecret = self::$AppSecret;$url = "https://api./sns/oauth2/access_token?appid={$AppID}&secret={$AppSecret}&code={$code}&grant_type=authorization_code";return json_decode(self::get($url),true);}/*** 获取用户信息* @param $data 获取access_token后,返回的数组* @return mixed*/public function get_user_massage($data){$url = "https://api./sns/userinfo?access_token={$data["access_token"]}&openid={$data["openid"]}";return json_decode(self::get($url),true);}/*** 发起get请求* @param $url请求地址* @return false|mixed|string*/public static function get($url){// 1. 初始化$ch = curl_init();// 2. 设置选项,包括URLcurl_setopt($ch,CURLOPT_URL,$url);curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);curl_setopt($ch,CURLOPT_HEADER,0);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);// 3. 执行并获取HTML文档内容$output = curl_exec($ch);if($output === FALSE ){$output = json_encode(["errcode"=>40013,"errmsg" => curl_error($ch)],JSON_UNESCAPED_UNICODE);}// 4. 释放curl句柄curl_close($ch);return $output;//return file_get_contents($url); //返回json对象}}
作者:@(T_T)
欢迎关注,有问题一起学习,本文章如有错误,欢迎评论提出!
以上就是PHP微信开放平台-- tp5实现第三方网页微信扫码登录的详细内容!