Client::getContent()   A
last analyzed

Complexity

Conditions 4
Paths 17

Size

Total Lines 16
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 13
nc 17
nop 3
dl 0
loc 16
rs 9.8333
c 0
b 0
f 0
1
<?php
2
3
4
namespace carono\etxtru;
5
6
7
use function GuzzleHttp\Psr7\build_query;
8
9
class Client extends ClientAbstract
10
{
11
    public $apiKey;
12
    public $url = 'www.etxt.ru/api/json';
13
    public $method = 'POST';
14
    public $type = self::TYPE_MULTIPART;
15
    public $output_type = self::TYPE_JSON;
16
17
    protected function sign($method)
18
    {
19
        $baseParamsArr = [
20
            'token' => $this->apiKey,
21
            'method' => $method
22
        ];
23
        ksort($baseParamsArr);
24
        $params = '';
25
        foreach ($baseParamsArr as $key => $val) {
26
            $params .= ($key . '=' . $val);
27
        }
28
        return md5($params . md5($this->password . 'api-pass'));
29
    }
30
31
    /**
32
     * @param $urlRequest
33
     * @param array $data
34
     * @param string $responseClass
35
     * @return mixed
36
     */
37
    public function getContent($urlRequest, $data = [], $responseClass = Response::class)
38
    {
39
        try {
40
            $method = $urlRequest;
41
            $sign = $this->sign($method);
42
            $urlRequest = '?' . build_query(['token' => $this->apiKey, 'method' => $method, 'sign' => $sign]);
43
            $content = parent::getContent($urlRequest, $data);
44
            return self::stdClassToResponse($content, $responseClass);
45
        } catch (\Exception $e) {
46
			if ($this->request){
47
                $this->request->getBody()->rewind();
48
			}
49
            $response = new Response();
50
            $response->success = false;
51
            $response->error = $this->request ? $this->request->getBody()->getContents() : $e->getMessage();
52
            return $response;
53
        }
54
    }
55
56
    /**
57
     * @param $stdClass
58
     * @param $responseClass
59
     * @return ResponseAbstract
60
     */
61
    protected static function stdClassToResponse($stdClass, $responseClass)
62
    {
63
        /**
64
         * @var ResponseAbstract $response
65
         */
66
        $response = new $responseClass();
67
        foreach ($stdClass as $key => $value) {
68
            if (is_array($value) && method_exists($response, 'getResponseClass') && ($class = $response->getResponseClass($key))) {
69
                foreach ($value as $item) {
70
                    $response->{$key}[] = self::stdClassToResponse($item, $class);
71
                }
72
            } else {
73
                $response->$key = $value;
74
            }
75
        }
76
        $response->success = !(bool)$response->error;
77
        return $response;
78
    }
79
}