1 <?php
2 3 4
5 namespace Team3\PayU\Communication\CurlRequestBuilder;
6
7 use Buzz\Message\Request;
8 use Team3\PayU\Communication\Request\PayURequestInterface;
9 use Team3\PayU\Configuration\ConfigurationInterface;
10 use Team3\PayU\Serializer\SerializerInterface;
11
12 13 14
15 class CurlRequestBuilder implements CurlRequestBuilderInterface
16 {
17 const CONTENT_TYPE = 'application/json';
18
19 20 21
22 private $serializer;
23
24 25 26
27 public function __construct(SerializerInterface $serializer)
28 {
29 $this->serializer = $serializer;
30 }
31
32 33 34 35 36 37
38 public function build(
39 ConfigurationInterface $configuration,
40 PayURequestInterface $request
41 ) {
42 $curlRequest = new Request();
43
44 if (PayURequestInterface::METHOD_POST === $request->getMethod()) {
45 $curlRequest->setContent(
46 $this->serializer->toJson($request->getDataObject())
47 );
48 }
49
50 $curlRequest->setHost(sprintf(
51 '%s://%s/',
52 $configuration->getProtocol(),
53 $configuration->getDomain()
54 ));
55 $curlRequest->setResource(sprintf(
56 '%s/%s/%s',
57 $configuration->getPath(),
58 $configuration->getVersion(),
59 $request->getPath()
60 ));
61 $curlRequest->setMethod($request->getMethod());
62 $this->addHeaders($curlRequest, $configuration);
63
64 return $curlRequest;
65 }
66
67 68 69 70
71 private function addHeaders(
72 Request $curlRequest,
73 ConfigurationInterface $configuration
74 ) {
75 $authorization = sprintf(
76 'Basic %s',
77 base64_encode(
78 sprintf(
79 '%s:%s',
80 $configuration->getCredentials()->getMerchantPosId(),
81 $configuration->getCredentials()->getPrivateKey()
82 )
83 )
84 );
85 $curlRequest->addHeaders([
86 'Authorization' => $authorization,
87 'Content-Type' => self::CONTENT_TYPE,
88 'Accept' => self::CONTENT_TYPE,
89 ]);
90 }
91 }
92