1 <?php
2 3 4
5 namespace Team3\PayU\Communication;
6
7 use Buzz\Client\ClientInterface;
8 use Buzz\Message\RequestInterface;
9 use Team3\PayU\Communication\ClientInterface as PayUClientInterface;
10 use Buzz\Exception\ClientException;
11 use Buzz\Message\Response;
12 use Psr\Log\LoggerInterface;
13 use Team3\PayU\Communication\CurlRequestBuilder\CurlRequestBuilderInterface;
14 use Team3\PayU\Communication\Request\PayURequestInterface;
15 use Team3\PayU\Communication\Sender\Sender;
16 use Team3\PayU\Communication\Sender\SenderInterface;
17 use Team3\PayU\Configuration\ConfigurationInterface;
18
19 20 21 22 23 24
25 class ClientAdapter implements PayUClientInterface
26 {
27 28 29
30 private $sender;
31
32 33 34
35 private $requestBuilder;
36
37 38 39
40 private $logger;
41
42 43 44 45 46
47 public function __construct(
48 SenderInterface $sender,
49 CurlRequestBuilderInterface $requestBuilder,
50 LoggerInterface $logger
51 ) {
52 $this->sender = $sender;
53 $this->requestBuilder = $requestBuilder;
54 $this->logger = $logger;
55 }
56
57 58 59 60 61 62 63
64 public function sendRequest(
65 ConfigurationInterface $configuration,
66 PayURequestInterface $request
67 ) {
68 $curlRequest = $this->requestBuilder->build($configuration, $request);
69 $this->logRequest($curlRequest);
70 $response = $this->sender->send($curlRequest, $configuration->getCredentials());
71 $this->logResponse($curlRequest, $response);
72
73 return $response;
74 }
75
76 77 78
79 private function logRequest(RequestInterface $request)
80 {
81 $this
82 ->logger
83 ->debug(sprintf(
84 'Sending request to host:%s resource:%s with content "%s"',
85 $request->getHost(),
86 $request->getResource(),
87 $request->getContent()
88 ));
89 }
90
91 92 93 94
95 private function logResponse(
96 RequestInterface $request,
97 Response $response
98 ) {
99 $this
100 ->logger
101 ->debug(sprintf(
102 'Request to %s%s with content "%s" was send and response with content "%s" and status %d received',
103 $request->getHost(),
104 $request->getResource(),
105 $request->getContent(),
106 $response->getContent(),
107 $response->getStatusCode()
108 ));
109 }
110 }
111