账户中心 退出系统
开发文档 资讯·分享 技术交流 会员登录
phpGrace GSCMS 公众号系统
公众号网页授权

公众号网页授权说明

如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。

网页授权回调域名说明

1、在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的配置选项中,修改授权回调域名。请注意,这里填写的是域名(是一个字符串),而不是URL,因此请勿加 http:// 等协议头; 
2、授权回调域名配置规范为全域名,比如需要网页授权的域名为:www.qq.com,配置以后此域名下面的页面http://www.qq.com/music.html 、 http://www.qq.com/login.html 都可以进行OAuth2.0鉴权。但http://pay.qq.com 、 http://music.qq.com 、 http://qq.com无法进行OAuth2.0鉴权 。

实现步骤

1、判断用户是否登录;
2、跳转到微信授权页面;
3、用户同意授权返回开发者指定页面,在此页面校验数据并利用 openid 获取用户信息;

完整代码

<?php
class indexController extends grace{

    public $graceWeChat;

    public function __construct(){
        parent::__construct();
        $this->graceWeChat = new \phpGrace\tools\graceWeChat();
    }

    public function index(){}

    // 账户中心
    public function account(){
        $sessionOpenid = getSession('openid');
        if(empty($sessionOpenid)){
            // 微信登录接口返回页
            $backUrl = 'https://scms.hcoder.net/test/index/loginBack';
            $this->graceWeChat->login($backUrl);
        }else{
            echo '您已经登录, openid : '.$sessionOpenid;
        }
    }

    // 公众号登录成功返回页面
    public function loginBack(){
        // 检查 url 参数
        if(empty($_GET['code']) || empty($_GET['state'])){exit('参数错误,请返回重试!E01');}
        // 检查 status 参数
        $wxLoginState = getSession('wxLoginState');
        if(empty($wxLoginState)){exit('参数错误,请重试!E02');}
        if($wxLoginState != $_GET['state']){exit('参数错误,请重试!E03');}
        // 获取用户信息
        $user = $this->graceWeChat->loginBack();
        if(empty($user) || empty($user['openid'])){exit('登录失败');}
        //获取用户信息 [ 用户全部信息 对象形式]
        $user = $this->graceWeChat->getUser($user['openid']);
        // 利用 session 记录 openid
        \setSession('openid', $user->openid);
        print_r($user);
        // 跳转回账户中心页面
        //header('location:/test/index/account');
    }
}

以上演示代码运行过程 :
1 访问 index 控制器 account 方法,如 : http://域名/分组/index/account
2 account 方法利用 session 检查用户是否登录;
3 未登录利用 graceWeChat 对象的 login 函数跳转到公众号登录页面进行登录;
4 登录后携带登录数据返回开发者网站;
5 利用 graceWeChat 对象的 loginBack 函数和 getUser 函数获取登录信息和用户数据;
6 记录 session 数据,完成登录功能;