From f5bc84e23d7419d800c3008c1c9402567fd91472 Mon Sep 17 00:00:00 2001 From: "iyuu.cn" <367013672@qq.com> Date: Sat, 14 Mar 2020 17:19:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=90=88=E4=BD=9C=E7=AB=99?= =?UTF-8?q?=E7=82=B9=E7=99=BB=E5=BD=95=E9=80=BB=E8=BE=91=EF=BC=8C=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E7=99=BB=E5=BD=95=E7=BC=93=E5=AD=98=EF=BC=8C=E5=87=8F?= =?UTF-8?q?=E5=B0=91=E8=AF=B7=E6=B1=82=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Library/Oauth.php | 89 ++++++++++++++++++++++++++----------------- 1 file changed, 55 insertions(+), 34 deletions(-) diff --git a/app/Library/Oauth.php b/app/Library/Oauth.php index 30e2af3..c6bdc8e 100644 --- a/app/Library/Oauth.php +++ b/app/Library/Oauth.php @@ -18,25 +18,8 @@ class Oauth public static $passkey = ''; // 合作站名字 public static $site = ''; - /** - * 初始化配置 - */ - public static function init() - { - global $configALL; - foreach (self::$sites as $name) { - if (isset($configALL[$name]['passkey']) && $configALL[$name]['passkey'] && isset($configALL[$name]['id']) && $configALL[$name]['id']) { - self::$token = self::getSign(); - self::$user_id = $configALL[$name]['id']; - self::$passkey = sha1($configALL[$name]['passkey']); // 避免泄露用户passkey秘钥 - self::$site = $name; - return true; - } - } - echo "-----缺少合作站点登录参数:token, user_id, passkey, site \n"; - echo "-----当前正在使用测试接口,功能可能会受到限制! \n\n"; - return false; - } + // 登录缓存路径 + public static $SiteLoginCache = ROOT_PATH.DS.'config'.DS.'siteLoginCache_{}.json'; /** * 从配置文件内读取爱语飞飞token作为鉴权参数 */ @@ -57,22 +40,60 @@ class Oauth * 作用:在服务器端实现微信用户与合作站点用户id的关联 * 参数:爱语飞飞token + 合作站点用户id + sha1(合作站点密钥passkey) + 合作站点标识 */ - public static function login($apiUrl = '') + public static function login($apiUrl = '', $sites = array()) { - $is_oauth = self::init(); - if ($is_oauth) { - $curl = new Curl(); - $curl->setOpt(CURLOPT_SSL_VERIFYPEER, false); - $data = [ - 'token' => self::$token, - 'id' => self::$user_id, - 'passkey'=> self::$passkey, - 'site' => self::$site, - ]; - $res = $curl->get($apiUrl, $data); - p($res->response); - return true; + global $configALL; + // 云端下发合作的站点标识 + self::$sites = $sites ? $sites : self::$sites; + $ret = false; + self::$token = self::getSign(); + foreach (self::$sites as $name) { + if (is_file(str_replace('{}', $name, self::$SiteLoginCache))){ + // 存在鉴权缓存 + $ret = true; + continue; + } + if (isset($configALL[$name]['passkey']) && $configALL[$name]['passkey'] && isset($configALL[$name]['id']) && $configALL[$name]['id']) { + self::$user_id = $configALL[$name]['id']; + self::$passkey = sha1($configALL[$name]['passkey']); // 避免泄露用户passkey秘钥 + self::$site = $name; + + $curl = new Curl(); + $curl->setOpt(CURLOPT_SSL_VERIFYPEER, false); + $data = [ + 'token' => self::$token, + 'id' => self::$user_id, + 'passkey'=> self::$passkey, + 'site' => self::$site, + ]; + $res = $curl->get($apiUrl, $data); + p($res->response); + + $rs = json_decode($res->response,true); + if (isset($rs['ret']) && $rs['ret'] == 200 && isset($rs['data']['success']) && $rs['data']['success']){ + self::setSiteLoginCache($name, $rs); + $ret = true; + }else{ + $msg = isset($rs['msg']) && $rs['msg'] ? $rs['msg'] : '远端服务器无响应,请稍后重试!'; + $msg = isset($rs['data']['errmsg']) && $rs['data']['errmsg'] ? $rs['data']['errmsg'] : $msg; + echo $msg . PHP_EOL; + } + } else { + echo $name.'合作站点参数配置不完整,请同时填写passkey和用户id。' . PHP_EOL; + echo '合作站点鉴权配置,请查阅:https://www.iyuu.cn/archives/337/'. PHP_EOL. PHP_EOL; + } } - return false; + return $ret; + } + /** + * 写鉴权成功配置 + */ + private static function setSiteLoginCache($key = '', $array = []) + { + $json = json_encode($array, JSON_UNESCAPED_UNICODE); + $myfile = str_replace('{}', $key, self::$SiteLoginCache); + $file_pointer = @fopen($myfile, "w"); + $worldsnum = @fwrite($file_pointer, $json); + @fclose($file_pointer); } }