namet/socialite

a OAuth2 client package, with QQ|Wechat|Weibo|Github|Baidu|OSChina inside

v0.6 2021-03-16 23:14 UTC

This package is auto-updated.

Last update: 2024-05-17 06:01:16 UTC


README

社会化登陆扩展包

当前可用

  • 微信(非扫码登陆)
  • 微博
  • 百度
  • Github
  • OSChina (0.5版本后可用)
  • QQ (0.5版本后可用)

安装

PHP版本 安装方式
5.5 ~ 7.1 composer require namet/socialite:"v0.5" -vvv
>= 7.2 composer require namet/socialite -vvv

使用方法

  1. 配置信息
<?php

$config = [
    // 必填项
    'appid' => YOUR_CLIENT_ID,
    'secret' => YOUR_SECRET,
    'redirect_uri' => YOUR_CALLBACK_URL,
    // 选填项
    'scope' => 'SCOPE', // 详情请参照各个开放平台的文档
    'state' => STATE,   // 传过去的参数,服务端也会原样返回,用于防止CSRF
];
  1. 获取实例,并跳转至认证服务器地址,以微信登陆为例:
<?php
use Namet\Socialite\OAuth;

// 当前支持的驱动有:
// wechat(网页微信接入,非�扫码登陆)、weibo(新浪微博)、gitub(Github)、baidu(百度)、qq(QQ)、oschina(开源中国OSChina)
/* Step1: 获取OAuth实例 */

// 获取实例 方法1:
$oauth = new OAuth('wechat', $config);
// 或者使用 方法2:
$oauth = new OAuth();
$oauth->driver('wechat')->config($config);

/* Step2: 跳转到认证服务器 */
// 直接跳转至认证服务器,传入true或者不传参数
$oauth->authorize(true);
// 输出跳转到认证服务器的地址
echo $oauth->authorize(false);
  1. 在回调地址中获取Code,然后换取Access_token,再获取用户信息
<?php
use Namet\Socialite\OAuth;
use Namet\Socialite\SocialiteException;

try {
    // 获取oauth实例
    $oauth = new OAuth('wechat', $config);

    // 是否开启所有请求结果日志记录,⚠️默认是false
    $oauth->log(true);
    // 若要自定义日志记录方法,请实现 \Namet\Socialite\LogInterface接口
    // 调用handler::handle($data)的参数为一个数组,其结构为:
    // array (
    //    'driver' => 驱动名称,
    //    'request_time' => 请求发送时间 (microtime(true) 方法),
    //    'response_time' => 接收到相应时间 (microtime(true) 方法),
    //    'method' => 调用方式 get/post,
    //    'params' => 请求参数,
    //    'response' => 原始返回数据(字符串),
    // )
    $oauth->setLogHandler(new otherHandler());

    // 获取当前驱动名
    $oauth->getDriver(); // 当前结果有:wechat、weibo、github、baidu

    // 一次性获取全部常用信息 (⚠️ 0.4版本及之后新增),格式为:
    // array (
    //    'uid' => 该平台的唯一id 可以此来区分用户,
    //    'uname' => 用户昵称,
    //    'avatar' => 头像url,
    //    'access_token' => access_token值,
    //    'expire_time' => token过期时间 (有的接口没有该字段,默认为''),
    //    'refresh_token' => refresh_token值 (有的接口没有该字段,默认为''),
    // )

    // 直接获取用户信息数组, 格式为:
    // array (
    //    'uid' => 该平台的唯一id 可以此来区分用户,
    //    'uname' => 用户昵称,
    //    'avatar' => 头像url,
    //    'email' => '邮箱',
    // )
    $user = $oauth->getUserInfo();

    // 获取认证服务器返回的原始用户信息,数组形式
    // 详细请见各个平台的文档
    $original = $oauth->getOriginalUserInfo();

    // 获取用户access_token(返回值是string类型)
    $access_token = $oauth->getToken();

    // 获取认真服务器返回的code(返回值是string类型)
    $code = $oauth->getCode();

    // 刷新access_token �⚠️当前只有wechat、baidu、qq有该接口
    $oauth->refreshToken();
    $new_token = $oauth->getToken();

    // 验证access_token是否有效。若已无效,当传入参数为false时,返回结果为false;反之则会抛出异常
    $bool = $oauth->checkToken(false); // ⚠️只有当driver为wechat的时候才可以使用此方法

    // 获取请求服务端返回的原始数据信息(数组形式)
    // 当不传入$key参数时, 获取所有返回数据(二维数组)
    // $key可以:token(换取access_token时返回数据)、
    //          user(获取用户信息时返回数据)、
    //          refresh(刷新token时返回数据)、
    //          check(验证oken时返回数据,`⚠️目前仅有wechat提供接口,其他不可用`)
    // 当$key对应数据不存在时,返回的是空数组
    $response = $oauth->getResponse($key);

} catch(SocialiteException $e) {
    // 所有报错信息都将抛出异常,捕获后可进行处理
    echo $e->getMessage();
}

扩展驱动

  1. 首先需要自定义驱动实现\Namet\Socialite\DriverInterface接口
  2. 在获取OAuth实例之后进行驱动注册。(获取新OAuth实例时不需要再次注册。😊)
<?php
use Namet\Socialite\OAuth;

$oauth = new OAuth;
// 注册驱动
$oauth->registerDriver('new_driver', \NAMESPACE\TO\NEW_DRIVER::class);
// 使用注册后的驱动
$oauth->driver('new_driver')->config($new_config);
...

后续开发计划

  • 增加Google、Microsoft、Linkedin�

LICENSE

MIT