• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP实现微信网页授权登陆

php 搞代码 4年前 (2022-01-22) 81次浏览 已收录 0个评论

这篇文章主要介绍的内容是关于PHP实现微信网页授权登陆,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

公司要求有微信授权,自己研究了下,框架是tp3.2.

官方开发文档地址

https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316505&token=&lang=zh_CN;

1.识别浏览器,普通浏览器跳到登陆页面;微信打开的话,发起微信网页授权登陆,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;

2.通过code参数加上AppID和AppSecret等,通过API换取access_token;

3.通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。

<?phpnamespace Home\Controller;use Think\Controller;class CommonController extends Controller {    /*    * 自动执行    */    public function _initialize(){        //判断是否在微信打开        $ua = $_SERVER['HTTP_USER_AGENT'];        //MicroMessenger 是android/iphone版微信所带的        //Windows Phone 是winphone版微信带的  (这个标识会误伤winphone普通浏览器的访问)        if(strpos($ua, 'MicroMessenger') == false && strpos($ua, 'Windows Phone') == false){            //普通浏览器            if(!$_SESSION['username']) {                header('Location:xxx');            }        }else{              //微信浏览器            $users = M('User');            $appid = 'xxx';            $secret = 'xxx';            if(!$_SESSION['username']) {                //微信网页授权                $redirect_uri = urlencode ('http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);                $url ="https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=$redirect_uri&response_type=code&scope=snsapi_userinfo&state=1&connect_redirect=1#wechat_redirect";                header("Location:".$url);                $code = $_GET["code"];                //第一步:取得openid                $oauth2Url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$secret&code=$code&grant_type=authorization_code";                $oauth2 = $this->getJson($oauth2Url);                //第二步:根据全局access_token和openid查询用户信息                $access_token = $oauth2["access_token"];                $openid = $oauth2['openid'];                $get_user_info_url = "https://api.weixin.qq.com/sns/userinfo?access_token=$access_token&openid=$openid&lang=zh_CN";                $userinfo = $this->getJson($get_user_info_url);                //save用户信息                if($userinfo['openid']){                    $username = $userinfo['openid'];                    $nickname = $userinfo['nickname'];                    $headimg = $userinfo['headimgurl'];                    $province = $userinfo['province'];                    $city = $userinfo['city'];                    $sex = $userinfo['sex'];                    $user = $users->where(array('username' => $username))->find();                    if ($user) {                        $users->where(array('username' => $username))->save(array('nickname' => $nickname, 'avatar' => $headimg, 'lasttime' => time()));                    }else{                        $users->add(array('username' => $username, 'nickname' => $nickname, 'avatar' => $headimg, 'province' => $province, 'city' => $city, 'gender' => $sex, 'regtime' => time(), 'lasttime' => time()));                        // $data = array('username' => $username, 'nickname' => $nickname, 'avatar' => $headimg, 'province' => $province, 'city' => $city, 'gender' => $sex, 'regtime' => time(), 'lasttime' => time());                    }                    $_SESSION['username'] = $username;                    if($user['tel'] == NULL){                        //如果用户手机号为空的话跳转到绑定手机号页面                        header('Location:xxx');           <i>*本5文来源gaodai$ma#com搞$$代**码)网@</i><img>搞代码gaodaima</img>          }                }                            }else{                $user = D('User')->getUserInfo();  //getUserInfo()是model根据session('username')获取用户数据的方法                if($user['tel'] == NULL){                    header('Location:xxx');                }            }            //获取接口调用凭证access_token            $accessurl = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$secret;            $access_token = S('access_token');            if(!$access_token){                $access = $this->getJson($accessurl);                if(!empty($access['access_token'])){                    S('access_token',$access['access_token'],$access['expires_in']);                }            }            //分享            /*$share = new WechatShare($appid, $_SESSION['username']);            $this->shareScript = $share->getSgin($access_token);            $this->assign('shareScript', $this->shareScript);            $this->assign('sharewechaid', $_SESSION['username']);            if($_GET['sharewechaid']){                $this->assign('getsharewechaid', $_GET['sharewechaid']);            }*/         }    }    public function getJson($url){        $ch = curl_init();        curl_setopt($ch, CURLOPT_URL, $url);        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);        $output = curl_exec($ch);        curl_close($ch);        return json_decode($output, true);    }}
<br />

相关推荐:

php实现一个日志功能

php实现产品加入购物车功能(1)_php实例

php实现微信模板消息推送

以上就是PHP实现微信网页授权登陆的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP实现微信网页授权登陆

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址