Passed
Push — master ( a8ff8f...cbaed7 )
by payever
02:47
created

ThirdPartyApiClient::getThirdPartyBaseUrl()   A

Complexity

Conditions 5
Paths 6

Size

Total Lines 17
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 11
c 1
b 0
f 0
dl 0
loc 17
rs 9.6111
cc 5
nc 6
nop 0
1
<?php
2
/**
3
 * PHP version 5.4 and 7
4
 *
5
 * @package   Payever\ThirdParty
6
 * @author    Hennadii.Shymanskyi <[email protected]>
7
 * @copyright 2017-2019 payever GmbH
8
 * @license   MIT <https://opensource.org/licenses/MIT>
9
 */
10
11
namespace Payever\ExternalIntegration\ThirdParty;
12
13
use Payever\ExternalIntegration\Core\Authorization\OauthToken;
14
use Payever\ExternalIntegration\Core\CommonApiClient;
15
use Payever\ExternalIntegration\Core\Http\RequestBuilder;
16
use Payever\ExternalIntegration\Core\Http\ResponseEntity\DynamicResponse;
17
use Payever\ExternalIntegration\ThirdParty\Base\ThirdPartyApiClientInterface;
18
use Payever\ExternalIntegration\ThirdParty\Http\RequestEntity\SubscriptionRequestEntity;
19
use Payever\ExternalIntegration\ThirdParty\Http\ResponseEntity\BusinessResponseEntity;
20
use Payever\ExternalIntegration\ThirdParty\Http\ResponseEntity\SubscriptionResponseEntity;
21
22
/**
23
 * Class ThirdPartyApiClient
24
 *
25
 * PHP version 5.4 and 7
26
 *
27
 * @package   Payever\ThirdParty
28
 * @author    Hennadii.Shymanskyi <[email protected]>
29
 * @copyright 2017-2019 payever GmbH
30
 * @license   MIT <https://opensource.org/licenses/MIT>
31
 */
32
class ThirdPartyApiClient extends CommonApiClient implements ThirdPartyApiClientInterface
33
{
34
    const SUB_URL_BUSINESS_INFO = 'api/business/%s/plugins';
35
    const SUB_URL_SUBSCRIPTION = 'api/business/%s/plugins/subscription/%s';
36
37
    /**
38
     * @inheritdoc
39
     *
40
     * @throws \Exception
41
     */
42
    public function getBusinessRequest()
43
    {
44
        $this->configuration->assertLoaded();
45
46
        $request = RequestBuilder::get($this->getBusinessInfoUrl($this->configuration->getBusinessUuid()))
47
            ->addRawHeader(
48
                $this->getToken(OauthToken::SCOPE_PAYMENT_ACTIONS)->getAuthorizationString()
49
            )
50
            ->setResponseEntity(new BusinessResponseEntity())
51
            ->build()
52
        ;
53
54
        $response = $this->getHttpClient()->execute($request);
55
56
        return $response;
57
    }
58
59
    /**
60
     * @inheritdoc
61
     *
62
     * @throws \Exception
63
     */
64
    public function getSubscriptionStatus(SubscriptionRequestEntity $subscriptionRequestEntity)
65
    {
66
        $this->configuration->assertLoaded();
67
68
        $this->fillSubscriptionEntityFromConfiguration($subscriptionRequestEntity);
69
70
        $url = $this->getSubscriptionUrl($subscriptionRequestEntity);
71
72
        $request = RequestBuilder::get($url)
73
            ->addRawHeader(
74
                $this->getToken(OauthToken::SCOPE_PAYMENT_ACTIONS)->getAuthorizationString()
75
            )
76
            ->setResponseEntity(new SubscriptionResponseEntity())
77
            ->build()
78
        ;
79
80
        return $this->getHttpClient()->execute($request);
81
    }
82
83
    /**
84
     * @inheritdoc
85
     *
86
     * @throws \Exception
87
     */
88
    public function subscribe(SubscriptionRequestEntity $subscriptionRequestEntity)
89
    {
90
        $this->configuration->assertLoaded();
91
92
        $this->fillSubscriptionEntityFromConfiguration($subscriptionRequestEntity);
93
94
        $url = $this->getSubscriptionUrl($subscriptionRequestEntity);
95
96
        $request = RequestBuilder::post($url)
97
            ->contentTypeIsJson()
98
            ->addRawHeader(
99
                $this->getToken(OauthToken::SCOPE_PAYMENT_ACTIONS)->getAuthorizationString()
100
            )
101
            ->setRequestEntity($subscriptionRequestEntity)
102
            ->setResponseEntity(new SubscriptionResponseEntity())
103
            ->build()
104
        ;
105
106
        return $this->getHttpClient()->execute($request);
107
    }
108
109
    /**
110
     * @inheritdoc
111
     *
112
     * @throws \Exception
113
     */
114
    public function unsubscribe(SubscriptionRequestEntity $subscriptionRequestEntity)
115
    {
116
        $this->configuration->assertLoaded();
117
118
        $this->fillSubscriptionEntityFromConfiguration($subscriptionRequestEntity);
119
120
        $url = $this->getSubscriptionUrl($subscriptionRequestEntity);
121
122
        $request = RequestBuilder::delete($url)
123
            ->addRawHeader(
124
                $this->getToken(OauthToken::SCOPE_PAYMENT_ACTIONS)->getAuthorizationString()
125
            )
126
            ->setRequestEntity($subscriptionRequestEntity)
127
            ->setResponseEntity(new DynamicResponse())
128
            ->build()
129
        ;
130
131
        return $this->getHttpClient()->execute($request);
132
    }
133
134
    /**
135
     * @param SubscriptionRequestEntity $subscriptionRequestEntity
136
     *
137
     * @return string
138
     */
139
    protected function getSubscriptionUrl(SubscriptionRequestEntity $subscriptionRequestEntity)
140
    {
141
        return $this->getBaseUrl()
142
            . sprintf(
143
                static::SUB_URL_SUBSCRIPTION,
144
                $subscriptionRequestEntity->getBusinessUuid(),
145
                $subscriptionRequestEntity->getThirdPartyName()
146
            );
147
    }
148
149
    /**
150
     * @param string $businessUuid
151
     *
152
     * @return string
153
     */
154
    protected function getBusinessInfoUrl($businessUuid)
155
    {
156
        return $this->getBaseUrl()
157
            . sprintf(static::SUB_URL_BUSINESS_INFO, $businessUuid);
158
    }
159
160
    /**
161
     * @param SubscriptionRequestEntity $subscriptionRequestEntity
162
     */
163
    private function fillSubscriptionEntityFromConfiguration(SubscriptionRequestEntity $subscriptionRequestEntity)
164
    {
165
        if (!$subscriptionRequestEntity->getBusinessUuid()) {
166
            $subscriptionRequestEntity->setBusinessUuid($this->configuration->getBusinessUuid());
167
        }
168
        if (!$subscriptionRequestEntity->getThirdPartyName()) {
169
            $subscriptionRequestEntity->setThirdPartyName($this->configuration->getChannelSet());
170
        }
171
    }
172
}
173