easyswoole - 基于swoole扩展实现的一款高性能php框架

Oauth

OAuth在"客戶端"與"服務提供商"之間,設置了一個授權層(authorization layer)。"客戶端"不能直接登錄"服務提供商",只能登錄授權層,以此將用戶與客戶端區分開來。"客戶端"登錄授權層所用的令牌(token),與用戶的密碼不同。用戶可以在登錄的時候,指定授權層令牌的權限范圍和有效期。

需要用戶自行補充oauth的認證流程,方便自己更加快速的接入。

安裝

請在EasySwoole根目錄下執行以下命令

composer require easyswoole/o-auth

詳情

根據Oauth協議,分別有如下調用方法。

  • getAuthUrl() 獲取授權地址
  • getAccessToken($storeState = null, $state = null, $code = null) 獲取AccessToken(只返回access_token)
  • getAccessTokenResult() 執行getAccessToken方法后,此方法獲取原結果
  • getUserInfo(string $accessToken) 獲取用戶信息
  • validateAccessToken(string $accessToken) 驗證token是否有效
  • refreshToken(string $refreshToken = null) 刷新token 返回bool
  • getRefreshTokenResult() 執行refreshToken方法后,此方法獲取原結果

示例代碼

微信

class WeiXin extends \EasySwoole\Http\AbstractInterface\Controller
{
    public function index()
    {
        $config = new \EasySwoole\OAuth\WeiXin\Config();
        $config->setAppId('appid');
        $config->setState('easyswoole');
        $config->setRedirectUri('redirect_uri');

        $oauth = new \EasySwoole\OAuth\WeiXin\OAuth($config);
        $url = $oauth->getAuthUrl();

        return $this->response()->redirect($url);
    }

    public function callback()
    {
        $params = $this->request()->getQueryParams();

        $config = new \EasySwoole\OAuth\WeiXin\Config();
        $config->setAppId('appid');
        $config->setSecret('secret');
        $config->setOpenIdMode(\EasySwoole\OAuth\WeiXin\Config::OPEN_ID); // 可設置UNION_ID 默認為OPEN_ID

        $oauth = new \EasySwoole\OAuth\WeiXin\OAuth($config);
        $accessToken = $oauth->getAccessToken('easyswoole', $params['state'], $params['code']);
        $refreshToken = $oauth->getAccessTokenResult()['refresh_token'];

        $userInfo = $oauth->getUserInfo($accessToken);
        var_dump($userInfo);

        if (!$oauth->validateAccessToken($accessToken)) echo 'access_token 驗證失敗!' . PHP_EOL;

        if (!$oauth->refreshToken($refreshToken)) echo 'access_token 續期失敗!' . PHP_EOL;

    }
}

QQ

class QQ extends \EasySwoole\Http\AbstractInterface\Controller
{
    public function index()
    {
        $config = new \EasySwoole\OAuth\QQ\Config();
        $config->setAppId('appid');
        $config->setState('easyswoole');
        $config->setRedirectUri('redirect_uri');

        $oauth = new \EasySwoole\OAuth\QQ\OAuth($config);
        $url = $oauth->getAuthUrl();

        return $this->response()->redirect($url);
    }

    public function callback()
    {
        $params = $this->request()->getQueryParams();

        $config = new \EasySwoole\OAuth\QQ\Config();
        $config->setAppId('appid');
        $config->setAppKey('appkey');
        $config->setRedirectUri('redirect_uri');
        $config->setOpenIdMode(\EasySwoole\OAuth\QQ\Config::OPEN_ID); // 可設置UNION_ID 默認為OPEN_ID

        $oauth = new \EasySwoole\OAuth\QQ\OAuth($config);
        $accessToken = $oauth->getAccessToken('easyswoole', $params['state'], $params['code']);
        $refreshToken = $oauth->getAccessTokenResult()['refresh_token'];

        $userInfo = $oauth->getUserInfo($accessToken);
        var_dump($userInfo);

        if (!$oauth->validateAccessToken($accessToken)) echo 'access_token 驗證失敗!' . PHP_EOL;

        if (!$oauth->refreshToken($refreshToken)) echo 'access_token 續期失敗!' . PHP_EOL;

    }
}

微博

class Weibo extends \EasySwoole\Http\AbstractInterface\Controller
{
    public function index()
    {
        $config = new \EasySwoole\OAuth\Weibo\Config();
        $config->setClientId('clientid');
        $config->setState('easyswoole');
        $config->setRedirectUri('redirect_uri');

        $oauth = new \EasySwoole\OAuth\Weibo\OAuth($config);
        $url = $oauth->getAuthUrl();

        return $this->response()->redirect($url);
    }

    public function callback()
    {
        $params = $this->request()->getQueryParams();

        $config = new \EasySwoole\OAuth\Weibo\Config();
        $config->setClientId('clientid');
        $config->setClientSecret('secret');
        $config->setRedirectUri('redirect_uri');

        $oauth = new \EasySwoole\OAuth\Weibo\OAuth($config);
        $accessToken = $oauth->getAccessToken('easyswoole', $params['state'], $params['code']);

        $userInfo = $oauth->getUserInfo($accessToken);
        var_dump($userInfo);

        if (!$oauth->validateAccessToken($accessToken)) echo 'access_token 驗證失敗!' . PHP_EOL;
    }
}

支付寶

class AliPay extends \EasySwoole\Http\AbstractInterface\Controller
{
    public function index()
    {
        $config = new \EasySwoole\OAuth\AliPay\Config();
        $config->setState('easyswoole');
        $config->setAppId('appid');
        $config->setRedirectUri('redirect_uri');

        // 使用沙箱環境測試開發的時候 把OAuth的源碼文件里面的 API_DOMAIN 和 AUTH_DOMAIN 進行修改
        $oauth = new \EasySwoole\OAuth\AliPay\OAuth($config);
        $url = $oauth->getAuthUrl();
        return $this->response()->redirect($url);
    }

    public function callback()
    {
        $params = $this->request()->getQueryParams();

        $config = new \EasySwoole\OAuth\AliPay\Config();
        $config->setAppId('appid');
//        $config->setAppPrivateKey('私鑰');
        $config->setAppPrivateKeyFile('私鑰文件'); // 私鑰文件(非遠程) 此方法與上個方法二選一

        $oauth = new \EasySwoole\OAuth\AliPay\OAuth($config);
        $accessToken = $oauth->getAccessToken('easyswoole', $params['state'], $params['auth_code']);
        $refreshToken = $oauth->getAccessTokenResult()['alipay_system_oauth_token_response']['refresh_token'];

        $userInfo = $oauth->getUserInfo($accessToken);
        var_dump($userInfo);

        if (!$oauth->validateAccessToken($accessToken)) echo 'access_token 驗證失敗!' . PHP_EOL;
        var_dump($oauth->getAccessTokenResult());

        if (!$oauth->refreshToken($refreshToken)) echo 'access_token 續期失敗!' . PHP_EOL;
        var_dump($oauth->getRefreshTokenResult());
    }
}

Github

class Github extends \EasySwoole\Http\AbstractInterface\Controller
{
    public function index()
    {
        $config = new \EasySwoole\OAuth\Github\Config();
        $config->setClientId('clientid');
        $config->setRedirectUri('redirect_uri');
        $config->setState('easyswoole');
        $oauth = new \EasySwoole\OAuth\Github\OAuth($config);
        $this->response()->redirect($oauth->getAuthUrl());
    }

    public function callback()
    {
        $params = $this->request()->getQueryParams();
        $config = new \EasySwoole\OAuth\Github\Config();
        $config->setClientId('clientid');
        $config->setClientSecret('secret');
        $config->setRedirectUri('redirect_uri');

        $oauth = new \EasySwoole\OAuth\Github\OAuth($config);
        $accessToken = $oauth->getAccessToken('easyswoole', $params['state'], $params['code']);
        $userInfo = $oauth->getUserInfo($accessToken);
        var_dump($userInfo);

        if (!$oauth->validateAccessToken($accessToken)) echo 'access_token 驗證失敗!' . PHP_EOL;
    }
}

Gitee

class Gitee extends \EasySwoole\Http\AbstractInterface\Controller
{
    public function index()
    {
        $config = new \EasySwoole\OAuth\Gitee\Config();
        $config->setState('easyswoole');
        $config->setClientId('clientid');
        $config->setRedirectUri('redirect_uri');
        $oauth = new \EasySwoole\OAuth\Gitee\OAuth($config);
        $this->response()->redirect($oauth->getAuthUrl());
    }

    public function callback()
    {
        $params = $this->request()->getQueryParams();

        $config = new \EasySwoole\OAuth\Gitee\Config();
        $config->setClientId('client_id');
        $config->setClientSecret('secret');
        $config->setRedirectUri('redirect_uri');

        $oauth = new \EasySwoole\OAuth\Gitee\OAuth($config);
        $accessToken = $oauth->getAccessToken('easyswoole', $params['state'], $params['code']);
        $userInfo = $oauth->getUserInfo($accessToken);
        var_dump($userInfo);

        if (!$oauth->validateAccessToken($accessToken)) echo 'access_token 驗證失敗!' . PHP_EOL;
        var_dump($oauth->getAccessTokenResult());
    }
}
主站蜘蛛池模板: 耐火砖厂家价格-郑州荣盛窑炉耐火材料有限公司 | 湖南长沙手术室、实验室、无尘室、洁净室、无尘车间的净化工程装修公司-福临建设 | 威学一百-专注国际学校择校备考-DSE-A-level-雅思-托福-OSSD-港澳台联考-AP-IGCSE-IB-AMC-多邻国-PTE-SAT-SSAT-小语种(如日语,韩语,德语,法语,西班牙语,意大利语,俄语,泰语)等考试培训,为出国留学学生提供个性化定制性学习方案,线下实体面授+线上网络课程, 提供一对一,小班课等多种班型 | 网站建设-百度SEO关键词优化与企业全网营销推广服务-启源信息 | 企好网 - 中国B2B产业互联网践行者|百度爱采购官方授权一级服务商 | 泉州小吃培训_福建泉州本地特色小吃培训班|厨师技术培训学校-魅力小吃培训服务机构 | 康复器材,康复设备_常州市友邦医疗康复器材有限公司 | 耐火砖厂家价格-郑州荣盛窑炉耐火材料有限公司 | 延吉新闻网 - 未来之选·就是延吉 [YanJinews.com] | 气体检测仪,多功能气体检测仪,四合一检测仪,氯气检测仪,有机挥发气体检测仪,气体报警器-南京诺邦电子科技有限公司 | 土石_泥石分离机_无轴滚筒筛_振动筛 - 巩义市鑫利重工机械制造有限公司 | 南洋电线电缆|中压交联电缆|高压电力电缆-NAN南洋电缆 | 生态护坡砖_护坡砖_合肥植草砖-巢湖市华林新型建材有限公司 | 上海惠涵实业有限公司-德国进口风机,德国Elektror依莱克罗风机 上海画册设计-上海宣传册设计-产品手册设计-企业画册设计公司 | 长春市龙飞数码印务有限公司,龙飞印务,长春商务印刷,长春精品包装,长春数码快印 | 湖南净声源环保科技有限公司是一家专业从事噪声治理和建筑声学设计生态环境综合治理服务的企业,专业从事株洲电梯隔音治理,湘潭中央空调降噪处理,衡阳邵阳冷却塔噪音治理,岳阳常德大型风机噪声隔音降噪,张家界空压机噪声治理,益阳配电房变压器噪声治理,专业郴州永州工厂企业车间噪声治理,怀化娄底专业机械设备减振降治理,武汉噪音治理隔音降噪公司,孝感噪音治理,立式球磨机的噪声控制,专业隔音降噪公司,、以及各类机械动力设备减振降噪噪声治理的公司,同时为客户提供咨询与解决方案 | 石家庄LED显示屏|石家庄显示屏|河北显示屏升级改造|石家庄科航光电科技有限公司_石家庄科航光电科技有限公司 | 武汉弹簧-污水厂弹簧-耐高温弹簧-武汉市伟锋弹簧厂 | 新2025澳门天天开好彩生肖对照表,2025新澳精准正版免费,2025新澳今晚开奖资料大全,新澳门四肖期期准免费,新澳门今晚9点30分开奖结果 | 暖气片-工程暖气片厂家【专注工程暖气片30年】-北铸暖气片 | 压瓦机|C型钢机|彩钢设备|C/Z互换檩条机-河北玉发压瓦机 | 河北瑞峰医疗-河北护理床-河北医用病床-河北养老院护理床-河北护理床厂家-河北病床厂家-河北瑞峰医疗 | 西门子伺服电机维修_西门子变频器维修_西门子伺服驱动器维修_数控系统维修_PL维修-上海仰光电子 西克制冷官网│制冷机组冷风机冷库设备厂家-西克制冷(无锡)有限公司_西克制冷(无锡)有限公司 | 世界地图,卫星地图,99地图网,微笑如歌 - www.99ditu.com | 塑料植草格_停车场植草格_消防车道植草格厂家_山东朋联建材 | 山东啤酒箱塑料提手_注塑产品加工_手提绳厂家-淄博浩晨包装制品有限公司 | 联塑管代理,联塑管厂家批发,中财管总代理,康泰管代理,康泰管厂家批发-邯郸市中枢贸易有限公司 | 全自动高速点胶机,锡膏喷印机系列,点胶阀核心配件厂家-博宁 | 植绒布工厂,植绒布现货批发-深圳市金峰盛植绒制品有限公司 | 柱状_椰壳_蜂窝_果壳_粉状活性炭_活性炭厂家 - 銮桦净化 | 和远智能-和远智能科技股份有限公司 | 郑州四棉纺织有限公司-现代化纺织企业 | 泰州光明会计师事务所有限公司-财务业务审计,会计服务业务及资产评估业务的专业服务机构 | 铁谷网-垂直于铸造产业链服务平台、原材料采购网、行业资讯网 | 油压缓冲器-缓冲器-重庆佑旺机械有限公司[官网]西捷克重庆办事处 | 领先的一站式_专利申请代理知识产权服务平台_乐知网 | 领先的木工机械生产厂家,原木加工流水线,立式带锯机,数控木工跑车-邢台亚士达机械制造有限公司 | 云德律师事务所_全国律师服务咨询服务企业 | 小鼠实验(试验)用臭氧发生器_进口臭氧发生器 - 北京同林臭氧实验网 | 山东长青石油液压机械有限公司-致力于石油机械设备的研发制造,提供定制服务 | 土工布厂家,山东土工布厂家_价格低-山东莱芜「中德利」 |