ThirdPartyApiClient   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 132
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 10
eloc 52
c 2
b 0
f 0
dl 0
loc 132
rs 10

8 Methods

Rating   Name   Duplication   Size   Complexity  
A getBusinessInfoUrl() 0 3 1
A fillSubscriptionEntityFromConfiguration() 0 7 3
A getSubscriptionStatus() 0 14 1
A subscribe() 0 16 1
A getConnectionUrl() 0 9 1
A unsubscribe() 0 14 1
A getBusinessRequest() 0 12 1
A getIntegrationUrl() 0 9 1
1
<?php
2
3
/**
4
 * PHP version 5.4 and 8
5
 *
6
 * @category  ThirdParty
7
 * @package   Payever\ThirdParty
8
 * @author    payever GmbH <[email protected]>
9
 * @author    Hennadii.Shymanskyi <[email protected]>
10
 * @copyright 2017-2021 payever GmbH
11
 * @license   MIT <https://opensource.org/licenses/MIT>
12
 * @link      https://docs.payever.org/shopsystems/api/getting-started
13
 */
14
15
namespace Payever\ExternalIntegration\ThirdParty;
16
17
use Payever\ExternalIntegration\Core\CommonProductsThirdPartyApiClient;
18
use Payever\ExternalIntegration\Core\Http\RequestBuilder;
19
use Payever\ExternalIntegration\Core\Http\ResponseEntity\DynamicResponse;
20
use Payever\ExternalIntegration\ThirdParty\Base\ThirdPartyApiClientInterface;
21
use Payever\ExternalIntegration\ThirdParty\Http\RequestEntity\SubscriptionRequestEntity;
22
use Payever\ExternalIntegration\ThirdParty\Http\ResponseEntity\BusinessResponseEntity;
23
use Payever\ExternalIntegration\ThirdParty\Http\ResponseEntity\SubscriptionResponseEntity;
24
25
class ThirdPartyApiClient extends CommonProductsThirdPartyApiClient implements ThirdPartyApiClientInterface
26
{
27
    const SUB_URL_BUSINESS_INFO = 'api/business/%s/plugins';
28
    const SUB_URL_CONNECTION = 'api/business/%s/connection/authorization/%s';
29
    const SUB_URL_INTEGRATION = 'api/business/%s/integration/%s';
30
31
    /**
32
     * @inheritdoc
33
     */
34
    public function getBusinessRequest()
35
    {
36
        $this->configuration->assertLoaded();
37
38
        $request = RequestBuilder::get($this->getBusinessInfoUrl($this->configuration->getBusinessUuid()))
39
            ->addRawHeader(
40
                $this->getToken()->getAuthorizationString()
41
            )
42
            ->setResponseEntity(new BusinessResponseEntity())
43
            ->build();
44
45
        return $this->executeRequest($request);
46
    }
47
48
    /**
49
     * @inheritdoc
50
     */
51
    public function getSubscriptionStatus(SubscriptionRequestEntity $requestEntity)
52
    {
53
        $this->configuration->assertLoaded();
54
55
        $this->fillSubscriptionEntityFromConfiguration($requestEntity);
56
57
        $request = RequestBuilder::get($this->getConnectionUrl($requestEntity))
58
            ->addRawHeader(
59
                $this->getToken()->getAuthorizationString()
60
            )
61
            ->setResponseEntity(new SubscriptionResponseEntity())
62
            ->build();
63
64
        return $this->executeRequest($request);
65
    }
66
67
    /**
68
     * @inheritdoc
69
     */
70
    public function subscribe(SubscriptionRequestEntity $requestEntity)
71
    {
72
        $this->configuration->assertLoaded();
73
74
        $this->fillSubscriptionEntityFromConfiguration($requestEntity);
75
76
        $request = RequestBuilder::post($this->getIntegrationUrl($requestEntity))
77
            ->contentTypeIsJson()
78
            ->addRawHeader(
79
                $this->getToken()->getAuthorizationString()
80
            )
81
            ->setRequestEntity($requestEntity)
82
            ->setResponseEntity(new SubscriptionResponseEntity())
83
            ->build();
84
85
        return $this->executeRequest($request);
86
    }
87
88
    /**
89
     * @inheritdoc
90
     */
91
    public function unsubscribe(SubscriptionRequestEntity $requestEntity)
92
    {
93
        $this->configuration->assertLoaded();
94
95
        $this->fillSubscriptionEntityFromConfiguration($requestEntity);
96
97
        $request = RequestBuilder::delete($this->getConnectionUrl($requestEntity))
98
            ->addRawHeader(
99
                $this->getToken()->getAuthorizationString()
100
            )
101
            ->setResponseEntity(new DynamicResponse())
102
            ->build();
103
104
        return $this->executeRequest($request);
105
    }
106
107
    /**
108
     * @param string $businessUuid
109
     *
110
     * @return string
111
     */
112
    protected function getBusinessInfoUrl($businessUuid)
113
    {
114
        return $this->getBaseUrl() . sprintf(static::SUB_URL_BUSINESS_INFO, $businessUuid);
115
    }
116
117
    /**
118
     * @param SubscriptionRequestEntity $requestEntity
119
     * @return string
120
     */
121
    protected function getConnectionUrl(SubscriptionRequestEntity $requestEntity)
122
    {
123
        $path = sprintf(
124
            static::SUB_URL_CONNECTION,
125
            $requestEntity->getBusinessUuid(),
126
            $requestEntity->getExternalId()
127
        );
128
129
        return $this->getBaseUrl() . $path;
130
    }
131
132
    /**
133
     * @param SubscriptionRequestEntity $requestEntity
134
     * @return string
135
     */
136
    protected function getIntegrationUrl(SubscriptionRequestEntity $requestEntity)
137
    {
138
        $path = sprintf(
139
            static::SUB_URL_INTEGRATION,
140
            $requestEntity->getBusinessUuid(),
141
            $requestEntity->getThirdPartyName()
142
        );
143
144
        return $this->getBaseUrl() . $path;
145
    }
146
147
    /**
148
     * @param SubscriptionRequestEntity $requestEntity
149
     */
150
    private function fillSubscriptionEntityFromConfiguration(SubscriptionRequestEntity $requestEntity)
151
    {
152
        if (!$requestEntity->getBusinessUuid()) {
153
            $requestEntity->setBusinessUuid($this->configuration->getBusinessUuid());
154
        }
155
        if (!$requestEntity->getThirdPartyName()) {
156
            $requestEntity->setThirdPartyName($this->configuration->getChannelSet());
157
        }
158
    }
159
}
160