access_token_expired > time()) { return $user->access_token; } $client = new Client(); $authorization = base64_encode(sprintf('%s:%s', $this->clientId, $this->clientSecret)); try { $response = $client->request('POST', 'https://platform.hootsuite.com/oauth2/token', [ 'headers' => [ 'Authorization' => 'Basic ' . $authorization ], 'form_params' => [ 'grant_type' => 'refresh_token', 'scope' => 'offline', 'refresh_token' => $user->refresh_token, ] ]); $result = json_decode($response->getBody()->getContents(), true); $user->update([ 'access_token' => $result['access_token'], 'refresh_token' => $result['refresh_token'], 'access_token_expired' => time() + intval($result['expires_in']) - 120 ]); return $result['access_token']; } catch (\Throwable $throwable) { Log::error(var_export($throwable->getMessage(),1)); throw new \Exception('获取token refreshToken获取失败'); } } public function uploadMedia($remoteImg, $accessToken) { Log::info('remoteImg='.$remoteImg); $mime = image_type_to_mime_type(exif_imagetype($remoteImg)); $fileStr=file_get_contents($remoteImg); $fileSize = strlen($fileStr); $client = new Client(); $response = $client->request('POST', 'https://platform.hootsuite.com/v1/media', [ 'headers' => [ 'Authorization' => sprintf('Bearer %s', $accessToken) ], 'json' => [ 'sizeBytes' => $fileSize, 'mimeType' => $mime ] ]); $result = json_decode($response->getBody()->getContents(), true); $uploadUrl = $result['data']['uploadUrl']; // $mediaId = $result['data']['id']; $uploadResponse = $client->request('PUT', $uploadUrl, [ 'headers' => [ 'Content-Length' => $fileSize, 'Content-Type' => $mime ], 'body' => $fileStr, ]); // Log::info('uploadMedia'); // Log::info(var_export($result,1)); // Log::info(var_export($uploadResponse->getBody()->getContents(),1)); $code = $uploadResponse->getStatusCode(); if ($code == 200) { return $result['data']['id']; } else { throw new \Exception($code); } } }