-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathClient.php
61 lines (48 loc) · 1.55 KB
/
Client.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?php declare (strict_types=1);
namespace Entrydo\Infrastructure\Swapcard;
use GuzzleHttp\Client as GuzzleClient;
use GuzzleHttp\Exception\ClientException;
use Nette\Utils\Json;
class Client
{
/** @var string */
private $apiKey;
/** @var bool */
private $testMode;
public function __construct(string $apiKey, bool $testMode)
{
$this->apiKey = $apiKey;
$this->testMode = $testMode;
}
public function sendAttendeeRequest(AttendeeRequest $request): int
{
$guzzleClient = $this->createGuzzleClient();
$body = Json::encode($request->getData());
try {
$response = $guzzleClient->post(Endpoint::ATTENDEE, [
'body' => $body,
]);
$result = Json::decode($response->getBody()->getContents());
return (int) $result->id;
} catch (ClientException $e) {
$response = $e->getResponse();
if ($response) {
$result = Json::decode($response->getBody()->getContents());
if (isset($result->data->id)) {
return (int) $result->data->id;
}
}
throw $e;
}
}
private function createGuzzleClient(): GuzzleClient
{
return new GuzzleClient([
'base_uri' => $this->testMode ? Endpoint::TEST_URL : Endpoint::PRODUCTION_URL,
'headers' => [
'content-type' => 'application/json',
'authorization' => 'Bearer ' . $this->apiKey,
],
]);
}
}