Passed
Branch master (776013)
by payever
03:51
created

ThirdPartyApiClient::getBusinessRequest()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 15
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 8
dl 0
loc 15
rs 10
c 0
b 0
f 0
cc 1
nc 1
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\ClientConfiguration;
15
use Payever\ExternalIntegration\Core\CommonApiClient;
16
use Payever\ExternalIntegration\Core\Http\RequestBuilder;
17
use Payever\ExternalIntegration\Core\Http\ResponseEntity\DynamicResponse;
18
use Payever\ExternalIntegration\ThirdParty\Base\ThirdPartyApiClientInterface;
19
use Payever\ExternalIntegration\ThirdParty\Http\RequestEntity\SubscriptionRequestEntity;
20
use Payever\ExternalIntegration\ThirdParty\Http\ResponseEntity\BusinessResponseEntity;
21
use Payever\ExternalIntegration\ThirdParty\Http\ResponseEntity\SubscriptionResponseEntity;
22
23
/**
24
 * Class ThirdPartyApiClient
25
 *
26
 * PHP version 5.4 and 7
27
 *
28
 * @package   Payever\ThirdParty
29
 * @author    Hennadii.Shymanskyi <[email protected]>
30
 * @copyright 2017-2019 payever GmbH
31
 * @license   MIT <https://opensource.org/licenses/MIT>
32
 */
33
class ThirdPartyApiClient extends CommonApiClient implements ThirdPartyApiClientInterface
34
{
35
    const URL_THIRD_PARTY_LIVE = 'https://third-party.payever.org/';
36
    const URL_THIRD_PARTY_SANDBOX = 'https://third-party.test.devpayever.com/';
37
38
    const SUB_URL_BUSINESS_INFO = 'api/business/%s/plugins';
39
    const SUB_URL_SUBSCRIPTION = 'api/business/%s/plugins/subscription/%s';
40
41
    /**
42
     * @return string
43
     */
44
    public function getThirdPartyBaseUrl()
45
    {
46
        switch ($this->configuration->getApiMode()) {
47
            case ClientConfiguration::API_MODE_SANDBOX:
48
                $url = $this->configuration->getCustomApiUrl() ?: static::URL_THIRD_PARTY_SANDBOX;
49
                break;
50
            case ClientConfiguration::API_MODE_LIVE:
51
            default:
52
                $url = static::URL_THIRD_PARTY_LIVE;
53
                break;
54
        }
55
56
        if (substr($url, -1) != '/') {
57
            $url .= '/';
58
        }
59
60
        return $url;
61
    }
62
63
    /**
64
     * @inheritdoc
65
     *
66
     * @throws \Exception
67
     */
68
    public function getBusinessRequest()
69
    {
70
        $this->configuration->assertLoaded();
71
72
        $request = RequestBuilder::get($this->getBusinessInfoUrl($this->configuration->getBusinessUuid()))
73
            ->addRawHeader(
74
                $this->getToken(OauthToken::SCOPE_PAYMENT_ACTIONS)->getAuthorizationString()
75
            )
76
            ->setResponseEntity(new BusinessResponseEntity())
77
            ->build()
78
        ;
79
80
        $response = $this->getHttpClient()->execute($request);
81
82
        return $response;
83
    }
84
85
    /**
86
     * @inheritdoc
87
     *
88
     * @throws \Exception
89
     */
90
    public function getSubscriptionStatus(SubscriptionRequestEntity $subscriptionRequestEntity)
91
    {
92
        $this->configuration->assertLoaded();
93
94
        $this->fillSubscriptionEntityFromConfiguration($subscriptionRequestEntity);
95
96
        $url = $this->getSubscriptionUrl($subscriptionRequestEntity);
97
98
        $request = RequestBuilder::get($url)
99
            ->addRawHeader(
100
                $this->getToken(OauthToken::SCOPE_PAYMENT_ACTIONS)->getAuthorizationString()
101
            )
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 subscribe(SubscriptionRequestEntity $subscriptionRequestEntity)
115
    {
116
        $this->configuration->assertLoaded();
117
118
        $this->fillSubscriptionEntityFromConfiguration($subscriptionRequestEntity);
119
120
        $url = $this->getSubscriptionUrl($subscriptionRequestEntity);
121
122
        $request = RequestBuilder::post($url)
123
            ->contentTypeIsJson()
124
            ->addRawHeader(
125
                $this->getToken(OauthToken::SCOPE_PAYMENT_ACTIONS)->getAuthorizationString()
126
            )
127
            ->setRequestEntity($subscriptionRequestEntity)
128
            ->setResponseEntity(new SubscriptionResponseEntity())
129
            ->build()
130
        ;
131
132
        return $this->getHttpClient()->execute($request);
133
    }
134
135
    /**
136
     * @inheritdoc
137
     *
138
     * @throws \Exception
139
     */
140
    public function unsubscribe(SubscriptionRequestEntity $subscriptionRequestEntity)
141
    {
142
        $this->configuration->assertLoaded();
143
144
        $this->fillSubscriptionEntityFromConfiguration($subscriptionRequestEntity);
145
146
        $url = $this->getSubscriptionUrl($subscriptionRequestEntity);
147
148
        $request = RequestBuilder::delete($url)
149
            ->addRawHeader(
150
                $this->getToken(OauthToken::SCOPE_PAYMENT_ACTIONS)->getAuthorizationString()
151
            )
152
            ->setRequestEntity($subscriptionRequestEntity)
153
            ->setResponseEntity(new DynamicResponse())
154
            ->build()
155
        ;
156
157
        return $this->getHttpClient()->execute($request);
158
    }
159
160
    /**
161
     * @param SubscriptionRequestEntity $subscriptionRequestEntity
162
     *
163
     * @return string
164
     */
165
    protected function getSubscriptionUrl(SubscriptionRequestEntity $subscriptionRequestEntity)
166
    {
167
        return $this->getThirdPartyBaseUrl()
168
            . sprintf(
169
                static::SUB_URL_SUBSCRIPTION,
170
                $subscriptionRequestEntity->getBusinessUuid(),
171
                $subscriptionRequestEntity->getThirdPartyName()
172
            );
173
    }
174
175
    /**
176
     * @param string $businessUuid
177
     *
178
     * @return string
179
     */
180
    protected function getBusinessInfoUrl($businessUuid)
181
    {
182
        return $this->getThirdPartyBaseUrl()
183
            . sprintf(static::SUB_URL_BUSINESS_INFO, $businessUuid);
184
    }
185
186
    /**
187
     * @param SubscriptionRequestEntity $subscriptionRequestEntity
188
     */
189
    private function fillSubscriptionEntityFromConfiguration(SubscriptionRequestEntity $subscriptionRequestEntity)
190
    {
191
        if (!$subscriptionRequestEntity->getBusinessUuid()) {
192
            $subscriptionRequestEntity->setBusinessUuid($this->configuration->getBusinessUuid());
193
        }
194
        if (!$subscriptionRequestEntity->getThirdPartyName()) {
195
            $subscriptionRequestEntity->setThirdPartyName($this->configuration->getChannelSet());
196
        }
197
    }
198
}
199