Completed
Push — master ( fab3d2...ef4dfb )
by Janusz
01:54
created

HttpClient::getClient()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 0
Metric Value
dl 0
loc 8
ccs 0
cts 5
cp 0
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 4
nc 2
nop 0
crap 6
1
<?php
2
3
namespace Ittoolspl\Smslabs;
4
5
use GuzzleHttp\Client;
6
use Ittoolspl\Smslabs\Exception\InvalidResponseException;
7
8
class HttpClient
9
{
10
    const API_URL = 'https://api.smslabs.net.pl/apiSms';
11
12
    /**
13
     * @var string
14
     */
15
    private $appKey = null;
16
17
    /**
18
     * @var string
19
     */
20
    private $secretKey = null;
21
22
    /**
23
     * @var Client
24
     */
25
    private $client = null;
26
27
    /**
28
     * HttpClient constructor.
29
     * @param string $appKey
30
     * @param string $secretKey
31
     */
32
    public function __construct($appKey, $secretKey)
33
    {
34
        $this->appKey    = $appKey;
35
        $this->secretKey = $secretKey;
36
    }
37
38
    /**
39
     * @param string $url
40
     * @param array $data
41
     * @param string $method
42
     * @return array
43
     * @throws InvalidResponseException
44
     */
45
    public function sendRequest($url, $data = null, $method = 'GET')
46
    {
47
        $this->validateMethod($method);
48
49
        $response = $this->getClient()->request($method, self::API_URL.$url, [
50
            'auth' => [$this->appKey, $this->secretKey],
51
            'form_params' => $data,
52
        ]);
53
54
        if ($response->getStatusCode() != 200) {
55
            throw new InvalidResponseException();
56
        }
57
58
        $bodyJson = (string)$response->getBody();
59
60
        $bodyArr = \GuzzleHttp\json_decode($bodyJson, true);
61
62
        if (!array_key_exists('data', $bodyArr)) {
63
            throw new InvalidResponseException('Missing data property in response');
64
        }
65
66
        return $bodyArr['data'];
67
    }
68
69
    /**
70
     * @param string $method
71
     * @return bool
72
     */
73
    private function validateMethod($method)
74
    {
75
        if (!in_array($method, ['POST', 'PUT', 'GET', 'DELETE'])) {
76
            throw new \InvalidArgumentException('Invalid method');
77
        }
78
79
        return true;
80
    }
81
82
    /**
83
     * @return Client
84
     */
85
    public function getClient()
86
    {
87
        if ($this->client === null) {
88
            $this->client = new Client();
89
        }
90
91
        return $this->client;
92
    }
93
94
    /**
95
     * @param Client $client
96
     */
97
    public function setClient($client)
98
    {
99
        $this->client = $client;
100
    }
101
102
    /**
103
     * @return string
104
     */
105
    public function getAppKey(): string
106
    {
107
        return $this->appKey;
108
    }
109
110
    /**
111
     * @param string $appKey
112
     */
113
    public function setAppKey(string $appKey)
114
    {
115
        $this->appKey = $appKey;
116
    }
117
118
    /**
119
     * @return string
120
     */
121
    public function getSecretKey(): string
122
    {
123
        return $this->secretKey;
124
    }
125
126
    /**
127
     * @param string $secretKey
128
     */
129
    public function setSecretKey(string $secretKey)
130
    {
131
        $this->secretKey = $secretKey;
132
    }
133
    
134
}
135