HootsuiteLogic.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <?php
  2. namespace App\Http\Logics\Admin;
  3. use App\Http\Models\HootsuiteUser;
  4. use GuzzleHttp\Client;
  5. use Illuminate\Support\Facades\Log;
  6. class HootsuiteLogic
  7. {
  8. public $clientId = 'c1ada351-6797-406e-8706-342af91ecad5';
  9. public $clientSecret = 'R-6nps.tHElD';
  10. public function accessToken(HootsuiteUser $user)
  11. {
  12. if (!$user) {
  13. throw new \Exception('获取token hootsuite用户信息不存在');
  14. }
  15. if ($user->access_token_expired > time()) {
  16. return $user->access_token;
  17. }
  18. $client = new Client();
  19. $authorization = base64_encode(sprintf('%s:%s', $this->clientId, $this->clientSecret));
  20. try {
  21. $response = $client->request('POST', 'https://platform.hootsuite.com/oauth2/token', [
  22. 'headers' => [
  23. 'Authorization' => 'Basic ' . $authorization
  24. ],
  25. 'form_params' => [
  26. 'grant_type' => 'refresh_token',
  27. 'scope' => 'offline',
  28. 'refresh_token' => $user->refresh_token,
  29. ]
  30. ]);
  31. $result = json_decode($response->getBody()->getContents(), true);
  32. $user->update([
  33. 'access_token' => $result['access_token'],
  34. 'refresh_token' => $result['refresh_token'],
  35. 'access_token_expired' => time() + intval($result['expires_in']) - 120
  36. ]);
  37. return $result['access_token'];
  38. } catch (\Throwable $throwable) {
  39. Log::error(var_export($throwable->getMessage(),1));
  40. throw new \Exception('获取token refreshToken获取失败');
  41. }
  42. }
  43. public function uploadMedia($remoteImg, $accessToken)
  44. {
  45. Log::info('remoteImg='.$remoteImg);
  46. $mime = image_type_to_mime_type(exif_imagetype($remoteImg));
  47. $fileStr=file_get_contents($remoteImg);
  48. $fileSize = strlen($fileStr);
  49. $client = new Client();
  50. $response = $client->request('POST', 'https://platform.hootsuite.com/v1/media', [
  51. 'headers' => [
  52. 'Authorization' => sprintf('Bearer %s', $accessToken)
  53. ],
  54. 'json' => [
  55. 'sizeBytes' => $fileSize,
  56. 'mimeType' => $mime
  57. ]
  58. ]);
  59. $result = json_decode($response->getBody()->getContents(), true);
  60. $uploadUrl = $result['data']['uploadUrl'];
  61. // $mediaId = $result['data']['id'];
  62. $uploadResponse = $client->request('PUT', $uploadUrl, [
  63. 'headers' => [
  64. 'Content-Length' => $fileSize,
  65. 'Content-Type' => $mime
  66. ],
  67. 'body' => $fileStr,
  68. ]);
  69. // Log::info('uploadMedia');
  70. // Log::info(var_export($result,1));
  71. // Log::info(var_export($uploadResponse->getBody()->getContents(),1));
  72. $code = $uploadResponse->getStatusCode();
  73. if ($code == 200) {
  74. return $result['data']['id'];
  75. } else {
  76. throw new \Exception($code);
  77. }
  78. }
  79. }