PHP实现微信网页授权登陆

原创 2018年04月16日 10:26:19

公司要求有微信授权,自己研究了下,框架是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进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。

<?php
namespace 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'); 
                    }
                }                
            }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);
    }
}
                

微信网页授权视频教程

微信网页授权视频教程讲师介绍: 向军,项目总监,从事IT行业10年以上,服务过acer、fluke、中国石油、光大银行、丰田汽车、三星电子、保洁公司等企业。精PHP/MySQL、C/C++/VC++、...
  • CSDNedu
  • CSDNedu
  • 2018年02月09日 11:38
  • 45

微信网页二维码授权登陆

一、首先要了解微信网页授权登录肯定是先去官网看文档。网页授权获取用户基本信息     二、文档里面无非就是几步操作:           下面这个图有必要复制过来,作为一个程序猿,接第三方的功能还是要...
  • gbjian008
  • gbjian008
  • 2016年01月13日 14:09
  • 3646

微信或企业微信实现扫码登录的三种方式

最近在做公司的一个项目,通过微信或企业微信扫码登录PC管理后台,替代传统的账号、密码登录。 为了完成这个功能,疯狂百度各种扫码登录的技术文章,能实现微信或企业微信扫码登录的方式可以说有三种: ...
  • u012729832
  • u012729832
  • 2017年09月17日 21:53
  • 4123

微信OAuth2网页授权登陆接口

微信OAuth2网页授权登陆接口,微信OAuth2网页授权登陆接口,在你的网站上放上可以扫码登陆,会不会吸引更多用户去注册,现在你只需要简单的配制一下就可以轻松实现,还不快点拿走,微信扫码登陆接口开发...
  • u013032788
  • u013032788
  • 2017年05月31日 21:01
  • 894

iOS实现微信授权登陆

微信是一个在开发中经常会使用到的平台,比如微信登录、授权、支付、分享。今天我们来看看如何在自己的应用里面集成微信授权。 1、微信授权的定义 微信OAuth2.0授权登录让微信用户使用微信身份安...
  • u012960049
  • u012960049
  • 2016年07月13日 16:13
  • 1830

php微信企业号获取用户OpenId

用户点击授权页面,scope不需要进入确认授权页面, 直接采用采用的 scope 为 snsapi_base的时候没有影响,直接获取用户 OpenId;snsapi_base (不弹出授权页面,直接...
  • nvzizhou
  • nvzizhou
  • 2016年10月19日 17:08
  • 3685

微信授权登录实现

微信授权登录。和其它授权类似,需要去官方渠道注册开发者账号,微信授权登录需要到微信公众平台申请. 假设获取到了公众平台appid。 和扫码类似,进入微信指定的一个链接。 但是授权登录...
  • TivonaLH
  • TivonaLH
  • 2017年03月09日 09:46
  • 6294

关于PHP实现扫码登录

首先,我来讲题下我做这个功能的原因。 因为公司接了某企业的一个单子,微信开放平台本来是提供第三方登录的,但是他们并没有给我们的域名授权,然而,授权审核需要7天。于是,我决定采用微信端公众平台的授权获...
  • qq_31343581
  • qq_31343581
  • 2017年03月04日 11:15
  • 2278

微信公众平台OAuth2.0网页授权php示例

1、配置授权回调页面域名,如 www.aaa.com   2、模拟公众号的第三方网页,fn_system.php Php代码     if(emptyempty($_SESSI...
  • czh0423
  • czh0423
  • 2015年09月08日 16:57
  • 931

PHP实现微信网页登陆授权开发

官方开发文档地址 https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify...
  • vailook
  • vailook
  • 2016年09月02日 09:29
  • 14469
收藏助手
不良信息举报
您举报文章:PHP实现微信网页授权登陆
举报原因:
原因补充:

(最多只允许输入30个字)