disktag = $tag; $this->auth_url = 'https://websv.aliyundrive.com/token/refresh'; $this->api_url = 'https://api.aliyundrive.com/v2'; $res = $this->get_access_token(getConfig('refresh_token', $tag)); $this->default_drive_id = getConfig('default_drive_id', $tag); } public function isfine() { if (!$this->access_token) return false; else return true; } public function show_base_class() { return get_class(); //$tmp[0] = get_class(); //$tmp[1] = get_class($this); //return $tmp; } public function list_files($path = '/') { $files = $this->list_path($path); return $this->files_format($files); } protected function files_format($files) { //return $files; if ($files['type']=='file') { $tmp['type'] = 'file'; $tmp['id'] = $files['file_id']; if (isset($files['name'])) $tmp['name'] = $files['name']; elseif (isset($files['file_name'])) $tmp['name'] = $files['file_name']; $tmp['time'] = $files['updated_at']; $tmp['size'] = $files['size']; $tmp['mime'] = $files['file']['mimeType']; $tmp['url'] = $files['download_url']; $tmp['content'] = $files['content']; if (isset($files['exist'])) $tmp['exist'] = $files['exist']; if (isset($files['rapid_upload'])) $tmp['rapid_upload'] = $files['rapid_upload']; } elseif ($files['type']=='folder'||isset($files['items'])) { $tmp['type'] = 'folder'; $tmp['id'] = $files['file_id']; if (isset($files['name'])) $tmp['name'] = $files['name']; elseif (isset($files['file_name'])) $tmp['name'] = $files['file_name']; $tmp['time'] = $files['updated_at']; $tmp['size'] = $files['size']; //$tmp['page'] = $files['folder']['page']; foreach ($files['items'] as $file) { if ($file['type']=='file') { $tmp['list'][$file['name']]['type'] = 'file'; $tmp['list'][$file['name']]['url'] = $file['download_url']; $tmp['list'][$file['name']]['mime'] = $file['file']['content_type']; } elseif ($file['type']=='folder') { $tmp['list'][$file['name']]['type'] = 'folder'; } //$tmp['id'] = $file['parent_file_id']; $tmp['list'][$file['name']]['id'] = $file['file_id']; $tmp['list'][$file['name']]['name'] = $file['name']; $tmp['list'][$file['name']]['time'] = $file['updated_at']; $tmp['list'][$file['name']]['size'] = $file['size']; $tmp['childcount']++; } } elseif (isset($files['code'])) { return $files; } //error_log(json_encode($tmp)); return $tmp; } protected function list_path($path = '/') { global $exts; while (substr($path, -1)=='/') $path = substr($path, 0, -1); //$files = getcache('path_' . $path, $this->disktag); //if (!$files) { //if (!($files = getcache('path_' . $path, $this->disktag))) { if ($path == '/' || $path == '') { $files = $this->fileList('root'); //error_log('root_id' . $files['id']); $files['file_id'] = 'root'; $files['type'] = 'folder'; } else { $tmp = splitlast($path, '/'); $parent_path = $tmp[0]; $filename = urldecode($tmp[1]); $parent_folder = $this->list_path($parent_path); foreach ($parent_folder['items'] as $item) { if ($item['name']==$filename) { if ($item['type']=='folder') { $files = $this->fileList($item['file_id']); $files['type'] = 'folder'; $files['file_id'] = $item['file_id']; $files['name'] = $item['name']; $files['time'] = $item['updated_at']; $files['size'] = $item['size']; } else $files = $item; } } //echo $files['name']; } if ($files['type']=='file') { if (in_array(splitlast($files['name'],'.')[1], $exts['txt'])) { if (!(isset($files['content'])&&$files['content']['stat']==200)) { $content1 = curl('GET', $files['download_url']); $files['content'] = $content1; savecache('path_' . $path, $files, $this->disktag); } } } if (!$files) { $files['error']['code'] = 'Not Found'; $files['error']['message'] = 'Not Found'; $files['error']['stat'] = 404; } elseif (isset($files['stat'])) { $tmp['error']['stat'] = $files['stat']; $files['error']['code'] = 'Error'; $files['error']['message'] = $files['body']; } else { savecache('path_' . $path, $files, $this->disktag, 600); } //} //error_log('path:' . $path . ', files:' . json_encode($files)); return $files; } protected function fileGet($file_id) { $url = $this->api_url . '/file/get'; $header["content-type"] = "application/json; charset=utf-8"; $header['authorization'] = 'Bearer ' . $this->access_token; $data['drive_id'] = $this->default_drive_id; $data['file_id'] = $file_id; $res = curl('POST', $url, json_encode($data), $header); if ($res['stat']==200) return json_decode($res['body'], true); else return $res; } protected function fileList($parent_file_id) { $url = $this->api_url . '/file/list'; $header["content-type"] = "application/json; charset=utf-8"; $header['authorization'] = 'Bearer ' . $this->access_token; $data['limit'] = 50; $data['marker'] = NULL; $data['drive_id'] = $this->default_drive_id; $data['parent_file_id'] = $parent_file_id; $data['image_thumbnail_process'] = 'image/resize,w_160/format,jpeg'; $data['image_url_process'] = 'image/resize,w_1920/format,jpeg'; $data['video_thumbnail_process'] = 'video/snapshot,t_0,f_jpg,w_300'; $data['fields'] = '*'; $data['order_by'] = 'updated_at'; $data['order_direction'] = 'DESC'; $res = curl('POST', $url, json_encode($data), $header); if ($res['stat']==200) return json_decode($res['body'], true); else return $res; } public function Rename($file, $newname) { $url = $this->api_url . '/file/update'; $header["content-type"] = "application/json; charset=utf-8"; $header['authorization'] = 'Bearer ' . $this->access_token; $data['check_name_mode'] = 'refuse'; $data['drive_id'] = $this->default_drive_id; $data['file_id'] = $file['id']; $data['name'] = $newname; //$data['parent_file_id'] = 'root'; $result = curl('POST', $url, json_encode($data), $header); //savecache('path_' . $file['path'], json_decode('{}',true), $this->disktag, 1); //error_log('decode:' . json_encode($result)); return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']); //return output($result['body'], $result['stat']); } public function Delete($file) { $url = $this->api_url . '/batch'; $header["content-type"] = "application/json; charset=utf-8"; $header['authorization'] = 'Bearer ' . $this->access_token; $data['resource'] = 'file'; $data['requests'][0]['url'] = '/file/delete'; $data['requests'][0]['method'] = 'DELETE'; $data['requests'][0]['id'] = $file['id']; $data['requests'][0]['headers']['Content-Type'] = 'application/json'; $data['requests'][0]['body']['drive_id'] = $this->default_drive_id; $data['requests'][0]['body']['file_id'] = $file['id']; $result = curl('POST', $url, json_encode($data), $header); //savecache('path_' . $file['path'], json_decode('{}',true), $this->disktag, 1); //error_log('result:' . json_encode($result)); //return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']); $res = json_decode($result['body'], true)['responses'][0]; if (isset($res['status'])) return output($res['id'], $res['status']); else return output($result['body'], $result['stat']); } public function Encrypt($folder, $passfilename, $pass) { $existfile = $this->list_path($folder['path'] . '/' . $passfilename); if (isset($existfile['type'])) { // 删掉原文件 $this->Delete(['id'=>$existfile['file_id']]); } if (!$folder['id']) { $res = $this->list_path($folder['path']); //error_log('res:' . json_encode($res)); $folder['id'] = $res['file_id']; } $tmp = '/tmp/' . $passfilename; file_put_contents($tmp, $pass); $result = $this->tmpfileCreate($folder['id'], $tmp, $passfilename); if ($result['stat']==201) { //error_log('1,url:' . $url .' res:' . json_encode($result)); $res = json_decode($result['body'], true); $url = $res['part_info_list'][0]['upload_url']; if (!$url) { // 无url,应该算秒传 return output('no up url', 200); } $file_id = $res['file_id']; $upload_id = $res['upload_id']; $result = curl('PUT', $url, $pass, [], 1); if ($result['stat']==200) { // 块1传好 $tmp1['part_number'] = 1; $tmp1['etag'] = $result['returnhead']['ETag']; $result = $this->fileComplete($file_id, $upload_id, [ $tmp1 ]); return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']); } } //error_log('2,url:' . $url .' res:' . json_encode($result)); return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']); } public function Move($file, $folder) { if (!$folder['id']) { $res = $this->list_path($folder['path']); //error_log('res:' . json_encode($res)); $folder['id'] = $res['file_id']; } $url = $this->api_url . '/batch'; $header["content-type"] = "application/json; charset=utf-8"; $header['authorization'] = 'Bearer ' . $this->access_token; $data['resource'] = 'file'; $data['requests'][0]['url'] = '/file/move'; $data['requests'][0]['method'] = 'POST'; $data['requests'][0]['id'] = $file['id']; $data['requests'][0]['headers']['Content-Type'] = 'application/json'; $data['requests'][0]['body']['drive_id'] = $this->default_drive_id; $data['requests'][0]['body']['file_id'] = $file['id']; $data['requests'][0]['body']['auto_rename'] = true; $data['requests'][0]['body']['to_parent_file_id'] = $folder['id']; $result = curl('POST', $url, json_encode($data), $header); //savecache('path_' . $file['path'], json_decode('{}',true), $this->disktag, 1); //error_log('result:' . json_encode($result)); return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']); } public function Copy($file) { if (!$file['id']) { $oldfile = $this->list_path($file['path'] . '/' . $file['name']); //error_log('res:' . json_encode($res)); //$file['id'] = $res['file_id']; } else { $oldfile = $this->fileGet($file['id']); } $url = $this->api_url . '/file/create'; $header["content-type"] = "application/json; charset=utf-8"; $header['authorization'] = 'Bearer ' . $this->access_token; $data['check_name_mode'] = 'auto_rename'; // ignore, auto_rename, refuse. $data['content_hash'] = $oldfile['content_hash']; $data['content_hash_name'] = 'sha1'; $data['content_type'] = $oldfile['content_type']; $data['drive_id'] = $this->default_drive_id; $data['ignoreError'] = false; $data['name'] = $oldfile['name']; $data['parent_file_id'] = $oldfile['parent_file_id']; $data['part_info_list'][0]['part_number'] = 1; $data['size'] = $oldfile['size']; $data['type'] = 'file'; $result = curl('POST', $url, json_encode($data), $header); if ($result['stat']==201) { //error_log('1,url:' . $url .' res:' . json_encode($result)); $res = json_decode($result['body'], true); $url = $res['part_info_list'][0]['upload_url']; if (!$url) { // 无url,应该算秒传 return output('no up url', 200); } else { return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']); } /*$file_id = $res['file_id']; $upload_id = $res['upload_id']; $result = curl('PUT', $url, $content, [], 1); if ($result['stat']==200) { // 块1传好 $etag = $result['returnhead']['ETag']; $result = $this->fileComplete($file_id, $upload_id, $etag); if ($result['stat']!=200) return output($result['body'], $result['stat']); else return output('success', 0); }*/ } //error_log('2,url:' . $url .' res:' . json_encode($result)); return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']); } public function Edit($file, $content) { $tmp = splitlast($file['path'], '/'); $folderpath = $tmp[0]; $filename = $tmp[1]; $existfile = $this->list_path($file['path']); if (isset($existfile['type'])) { // 删掉原文件 $this->Delete(['id'=>$existfile['file_id']]); } $tmp1 = '/tmp/' . $filename; file_put_contents($tmp1, $content); $result = $this->tmpfileCreate($this->list_path($folderpath)['file_id'], $tmp1, $filename); if ($result['stat']==201) { //error_log('1,url:' . $url .' res:' . json_encode($result)); $res = json_decode($result['body'], true); $url = $res['part_info_list'][0]['upload_url']; if (!$url) { // 无url,应该算秒传 return output('no up url', 0); } $file_id = $res['file_id']; $upload_id = $res['upload_id']; $result = curl('PUT', $url, $content, [], 1); if ($result['stat']==200) { // 块1传好 $tmp2['part_number'] = 1; $tmp2['etag'] = $result['returnhead']['ETag']; $result = $this->fileComplete($file_id, $upload_id, [ $tmp2 ]); if ($result['stat']!=200) return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']); else return output('success', 0); } } //error_log('2,url:' . $url .' res:' . json_encode($result)); return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']); } public function Create($folder, $type, $name, $content = '') { if (!$folder['id']) { $res = $this->list_path($folder['path']); //error_log('res:' . json_encode($res)); $folder['id'] = $res['file_id']; } if ($type=='folder') { $result = $this->folderCreate($folder['id'], $name); //error_log('res:' . json_encode($result)); return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']); } if ($type=='file') { $tmp = '/tmp/' . $name; file_put_contents($tmp, $content); $result = $this->tmpfileCreate($folder['id'], $tmp, $name); if ($result['stat']==201) { //error_log('1,url:' . $url .' res:' . json_encode($result)); $res = json_decode($result['body'], true); if (isset($res['exist'])&&$res['exist']!=false) { // 已经有 //error_log('exist:' . json_encode($res)); return output('{"type":"file","name":"' . $name . '", "exist":true}', 200); } if (isset($res['rapid_upload'])&&$res['rapid_upload']!=false) { // 秒传 //error_log('rapid up:' . json_encode($res)); return output('{"type":"file","name":"' . $name . '", "rapid_upload":true}', 200); } $url = $res['part_info_list'][0]['upload_url']; $file_id = $res['file_id']; $upload_id = $res['upload_id']; $result = curl('PUT', $url, $content, [], 1); //error_log('2,url:' . $url .' res:' . json_encode($result)); if ($result['stat']==200) { // 块1传好 $tmp1['part_number'] = 1; $tmp1['etag'] = $result['returnhead']['ETag']; $result = $this->fileComplete($file_id, $upload_id, [ $tmp1 ]); //error_log('3,url:' . $url .' res:' . json_encode($result)); return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']); } } //error_log('4,url:' . $url .' res:' . json_encode($result)); return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']); } return output('Type not folder or file.', 500); } protected function folderCreate($parentId, $folderName) { if (strrpos($folderName, '/')) { $tmp = splitlast($folderName, '/'); $parentId = json_decode($this->folderCreate($parentId, $tmp[0])['body'], true)['file_id']; $folderName = $tmp[1]; } $url = $this->api_url . '/file/create'; $header["content-type"] = "application/json; charset=utf-8"; $header['authorization'] = 'Bearer ' . $this->access_token; $data['check_name_mode'] = 'refuse'; // ignore, auto_rename, refuse. $data['drive_id'] = $this->default_drive_id; $data['name'] = $folderName; $data['parent_file_id'] = $parentId; $data['type'] = 'folder'; return curl('POST', $url, json_encode($data), $header); } protected function fileCreate($parentId, $fileName, $sha1, $size) { $url = $this->api_url . '/file/create'; $header["content-type"] = "application/json; charset=utf-8"; $header['authorization'] = 'Bearer ' . $this->access_token; $data['check_name_mode'] = 'refuse'; // ignore, auto_rename, refuse. $data['content_hash'] = $sha1; $data['content_hash_name'] = 'sha1'; $data['content_type'] = ''; $data['drive_id'] = $this->default_drive_id; $data['ignoreError'] = false; $data['name'] = $fileName; $data['parent_file_id'] = $parentId; $data['part_info_list'][0]['part_number'] = 1; $data['size'] = (int)$size; $data['type'] = 'file'; return curl('POST', $url, json_encode($data), $header); } protected function tmpfileCreate($parentId, $tmpFilePath, $tofileName = '') { $sha1 = sha1_file($tmpFilePath); if ($tofileName == '') $tofileName = splitlast($tmpFilePath, '/')[1]; $url = $this->api_url . '/file/create'; $header["content-type"] = "application/json; charset=utf-8"; $header['authorization'] = 'Bearer ' . $this->access_token; $data['check_name_mode'] = 'refuse'; // ignore, auto_rename, refuse. $data['content_hash'] = $sha1; $data['content_hash_name'] = 'sha1'; $data['content_type'] = 'text/plain'; // now only txt $data['drive_id'] = $this->default_drive_id; $data['ignoreError'] = false; $data['name'] = $tofileName; $data['parent_file_id'] = $parentId; $data['part_info_list'][0]['part_number'] = 1; // now only txt $data['size'] = filesize($tmpFilePath); $data['type'] = 'file'; return curl('POST', $url, json_encode($data), $header); } protected function fileComplete($file_id, $upload_id, $etags) { $url = $this->api_url . '/file/complete'; $header["content-type"] = "application/json; charset=utf-8"; $header['authorization'] = 'Bearer ' . $this->access_token; $data['drive_id'] = $this->default_drive_id; $data['file_id'] = $file_id; $data['ignoreError'] = false; foreach ($etags as $etag) { $data['part_info_list'][$etag['part_number'] - 1]['part_number'] = $etag['part_number']; $data['part_info_list'][$etag['part_number'] - 1]['etag'] = $etag['etag']; } $data['upload_id'] = $upload_id; return curl('POST', $url, json_encode($data), $header); } public function get_thumbnails_url($path = '/') { $res = $this->list_path($path); $thumb_url = $res['thumbnail']; return $thumb_url; } public function bigfileupload($path) { if (isset($_POST['uploadid'])) { // Complete $result = $this->fileComplete($_POST['fileid'], $_POST['uploadid'], $_POST['etag']); return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']); } else { if ($_POST['upbigfilename']=='') return output('error: no file name', 400); if (!is_numeric($_POST['filesize'])) return output('error: no file size', 400); if (!isset($_POST['filesha1'])) return output('error: no file sha1', 400); $tmp = splitlast($_POST['upbigfilename'], '/'); if ($tmp[1]!='') { $fileinfo['name'] = $tmp[1]; if ($_SERVER['admin']) $fileinfo['path'] = $tmp[0]; } else { $fileinfo['name'] = $_POST['upbigfilename']; } $fileinfo['size'] = $_POST['filesize']; $fileinfo['filelastModified'] = $_POST['filelastModified']; if ($_SERVER['admin']) { $filename = $fileinfo['name']; } else { $tmp1 = splitlast($fileinfo['name'], '.'); if ($tmp1[0]==''||$tmp1[1]=='') $filename = $_POST['filesha1']; else $filename = $_POST['filesha1'] . '.' . $tmp1[1]; } /*if ($fileinfo['size']>10*1024*1024) { $cachefilename = spurlencode( $fileinfo['path'] . '/.' . $fileinfo['filelastModified'] . '_' . $fileinfo['size'] . '_' . $fileinfo['name'] . '.tmp', '/'); $getoldupinfo=$this->list_path(path_format($path . '/' . $cachefilename)); //echo json_encode($getoldupinfo, JSON_PRETTY_PRINT); if ($getoldupinfo['type']=='file'&&$getoldupinfo['size']<5120) { $getoldupinfo_j = curl('GET', $getoldupinfo['url']); $getoldupinfo = json_decode($getoldupinfo_j['body'], true); //if ( json_decode( curl('GET', $getoldupinfo['uploadUrl'])['body'], true)['@odata.context']!='' ) return output($getoldupinfo_j['body'], $getoldupinfo_j['stat']); } }*/ $parent = $this->list_path($path . '/' . $fileinfo['path']); if (isset($parent['file_id'])) { $parent_file_id = $parent['file_id']; } else { $res = $this->folderCreate($this->list_path($path)['file_id'], $fileinfo['path']); //error_log($res['body']); $parent_file_id = json_decode($res['body'], true)['file_id']; } $response = $this->fileCreate($parent_file_id, $filename, $_POST['filesha1'], $fileinfo['size']); $res = json_decode($response['body'], true); if (isset($res['exist'])) { // 已经有 //error_log('exist:' . json_encode($res)); return output(json_encode($this->files_format(json_decode($response['body'], true))), $response['stat']); //return output('{"type":"file","name":"' . $_POST['upbigfilename'] . '", "exist":true}', 200); } if (isset($res['rapid_upload'])&&$res['rapid_upload']!=false) { // 秒传 //error_log('rapid up:' . json_encode($res)); return output(json_encode($this->files_format(json_decode($response['body'], true))), $response['stat']); //return output('{"type":"file","name":"' . $_POST['upbigfilename'] . '", "rapid upload":true}', 200); } //if ($response['stat']<500) { // $responsearry = json_decode($response['body'], true); // if (isset($responsearry['error'])) return output($response['body'], $response['stat']); // $fileinfo['uploadUrl'] = $responsearry['uploadUrl']; // if ($fileinfo['size']>10*1024*1024) $this->MSAPI('PUT', path_format($path . '/' . $cachefilename), json_encode($fileinfo, JSON_PRETTY_PRINT), $this->access_token); //} return output($response['body'], $response['stat']); } } public function AddDisk() { global $constStr; global $EnvConfigs; $envs = ''; foreach ($EnvConfigs as $env => $v) if (isCommonEnv($env)) $envs .= '\'' . $env . '\', '; $url = path_format($_SERVER['PHP_SELF'] . '/'); if (isset($_GET['install0']) && $_POST['disktag_add']!='') { $_POST['disktag_add'] = preg_replace('/[^0-9a-zA-Z|_]/i', '', $_POST['disktag_add']); $f = substr($_POST['disktag_add'], 0, 1); if (strlen($_POST['disktag_add'])==1) $_POST['disktag_add'] .= '_'; if (isCommonEnv($_POST['disktag_add'])) { return message('Do not input ' . $envs . '
', 'Error', 201); } elseif (!(('a'<=$f && $f<='z') || ('A'<=$f && $f<='Z'))) { return message('Please start with letters
', 'Error', 201); } $tmp['refresh_token'] = $_POST['refresh_token']; $res = curl('POST', $this->auth_url, json_encode($tmp), ["content-type"=>"application/json; charset=utf-8"]); //return output($res['body']); if ($res['stat']!=200) { return message($res['body'], $res['stat'], $res['stat']); } //var_dump($res['body']); $result = json_decode($res['body'], true); $tmp = null; foreach ($EnvConfigs as $env => $v) if (isInnerEnv($env)) $tmp[$env] = ''; $tmp['refresh_token'] = $result['refresh_token']; $tmp['default_drive_id'] = $result['default_drive_id']; $tmp['default_sbox_drive_id'] = $result['default_sbox_drive_id']; $tmp['token_expires'] = time()+7*24*60*60; $tmp['Driver'] = 'Aliyundrive'; $tmp['disktag_add'] = $_POST['disktag_add']; $tmp['diskname'] = $_POST['diskname']; $response = setConfigResponse( setConfig($tmp, $this->disktag) ); if (api_error($response)) { $html = api_error_msg($response); $title = 'Error'; return message($html, $title, 201); } else { savecache('access_token', $result['access_token'], $this->disktag, $result['expires_in'] - 60); $str .= ' '; return message($str, getconstStr('WaitJumpIndex'), 201); } /*$api = $this->api_url . '/user/get'; $header['authorization'] = 'Bearer ' . $this->access_token; return json_encode(curl('GET', $api, '', $header));*/ } $html = '
' . getconstStr('DiskTag') . ': (' . getConfig('disktag') . ')
' . getconstStr('DiskName') . ':

填入refresh_token:

'; $title = 'Select Account Type'; return message($html, $title, 201); } protected function get_access_token($refresh_token) { if (!($this->access_token = getcache('access_token', $this->disktag))) { $p=0; $tmp1['refresh_token'] = $refresh_token; while ($response['stat']==0&&$p<3) { $response = curl('POST', $this->auth_url, json_encode($tmp1), ["content-type"=>"application/json; charset=utf-8"]); $p++; } error_log(json_encode($response)); if ($response['stat']==200) $ret = json_decode($response['body'], true); if (!isset($ret['access_token'])) { error_log('failed to get [' . $this->disktag . '] access_token. response' . json_encode($ret)); $response['body'] = json_encode(json_decode($response['body']), JSON_PRETTY_PRINT); $response['body'] .= '\nfailed to get [' . $this->disktag . '] access_token.'; return $response; } $tmp = $ret; $tmp['access_token'] = '******'; $tmp['refresh_token'] = '******'; error_log('[' . $this->disktag . '] Get access token:' . json_encode($tmp, JSON_PRETTY_PRINT)); $this->access_token = $ret['access_token']; savecache('access_token', $this->access_token, $this->disktag, $ret['expires_in'] - 300); if (time()>getConfig('token_expires', $this->disktag)) setConfig([ 'refresh_token' => $ret['refresh_token'], 'token_expires' => time()+7*24*60*60 ], $this->disktag); return true; } return true; } }