diff --git a/common/components/SkinSystem/Api.php b/common/components/SkinSystem/Api.php index 14bbfd1..4237eac 100644 --- a/common/components/SkinSystem/Api.php +++ b/common/components/SkinSystem/Api.php @@ -8,21 +8,26 @@ class Api { const BASE_DOMAIN = 'http://skinsystem.ely.by'; - public function textures($username) : array { + /** + * @param string $username + * @throws \GuzzleHttp\Exception\GuzzleException + * + * @return array + */ + public function textures(string $username): array { $response = $this->getClient()->get($this->getBuildUrl('/textures/' . $username)); - $textures = json_decode($response->getBody(), true); - return $textures; + return json_decode($response->getBody(), true); } - protected function getBuildUrl(string $url) : string { + protected function getBuildUrl(string $url): string { return self::BASE_DOMAIN . $url; } /** * @return GuzzleClient */ - protected function getClient() : GuzzleClient { + protected function getClient(): GuzzleClient { return Yii::$app->guzzle; } diff --git a/common/models/Textures.php b/common/models/Textures.php index 3bb3333..85ec58c 100644 --- a/common/models/Textures.php +++ b/common/models/Textures.php @@ -4,6 +4,8 @@ namespace common\models; use common\components\SkinSystem\Api as SkinSystemApi; use DateInterval; use DateTime; +use GuzzleHttp\Exception\RequestException; +use Yii; class Textures { @@ -57,9 +59,20 @@ class Textures { } } - public function getTextures() { - $api = new SkinSystemApi(); - return $api->textures($this->account->username); + public function getTextures(): array { + try { + $textures = $this->getSkinsystemApi()->textures($this->account->username); + } catch (RequestException $e) { + Yii::warning('Cannot get textures from skinsystem.ely.by. Exception message is ' . $e->getMessage()); + $textures = [ + 'SKIN' => [ + 'url' => 'http://skins.minecraft.net/MinecraftSkins/' . $this->account->username . '.png', + 'hash' => md5(uniqid('random, please', true)), + ], + ]; + } + + return $textures; } public static function encrypt(array $data) { @@ -70,4 +83,8 @@ class Textures { return json_decode(base64_decode($string), $assoc); } + protected function getSkinsystemApi(): SkinSystemApi { + return new SkinSystemApi(); + } + }