mirror of
				https://gitee.com/ledc/IYUUAutoReseed
				synced 2025-10-31 00:39:50 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			100 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | ||
| /**
 | ||
|  * IYUU用户注册、认证
 | ||
|  */
 | ||
| namespace IYUU\Library;
 | ||
| 
 | ||
| use Curl\Curl;
 | ||
| 
 | ||
| class Oauth
 | ||
| {
 | ||
|     // 合作的站点
 | ||
|     public static $sites = ['ourbits','hddolby','hdhome','pthome'];
 | ||
|     // 爱语飞飞token
 | ||
|     public static $token = '';
 | ||
|     // 合作站点用户id
 | ||
|     public static $user_id = 0;
 | ||
|     // 合作站点密钥
 | ||
|     public static $passkey = '';
 | ||
|     // 合作站名字
 | ||
|     public static $site = '';
 | ||
|     // 登录缓存路径
 | ||
|     public static $SiteLoginCache = ROOT_PATH.DS.'config'.DS.'siteLoginCache_{}.json';
 | ||
|     /**
 | ||
|      * 从配置文件内读取爱语飞飞token作为鉴权参数
 | ||
|      */
 | ||
|     public static function getSign()
 | ||
|     {
 | ||
|         global $configALL;
 | ||
|         // 爱语飞飞
 | ||
|         $token = isset($configALL['iyuu.cn']) && $configALL['iyuu.cn'] ? $configALL['iyuu.cn'] : '';
 | ||
|         if (empty($token) || strlen($token)<46) {
 | ||
|             echo "缺少辅种接口请求参数:爱语飞飞token \n";
 | ||
|             echo "请访问https://iyuu.cn 用微信扫码申请,并填入配置文件config.php内。\n\n";
 | ||
|             exit(1);
 | ||
|         }
 | ||
|         return $token;
 | ||
|     }
 | ||
|     /**
 | ||
|      * 用户注册与登录
 | ||
|      * 作用:在服务器端实现微信用户与合作站点用户id的关联
 | ||
|      * 参数:爱语飞飞token + 合作站点用户id + sha1(合作站点密钥passkey) + 合作站点标识
 | ||
|      */
 | ||
|     public static function login($apiUrl = '', $sites = array())
 | ||
|     {
 | ||
|         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 $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);
 | ||
|     }
 | ||
| }
 |