PluginProbe ʕ •ᴥ•ʔ
Booking for Appointments and Events Calendar – Amelia / trunk
Booking for Appointments and Events Calendar – Amelia vtrunk
2.4.4 2.4.3 2.4.2 2.4.1 2.4 trunk 1.2.1 1.2.10 1.2.11 1.2.12 1.2.13 1.2.14 1.2.15 1.2.16 1.2.17 1.2.18 1.2.19 1.2.2 1.2.20 1.2.21 1.2.22 1.2.23 1.2.24 1.2.25 1.2.26 1.2.27 1.2.28 1.2.29 1.2.3 1.2.30 1.2.31 1.2.32 1.2.33 1.2.34 1.2.35 1.2.36 1.2.37 1.2.38 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 2.0 2.0.1 2.0.2 2.1 2.1.1 2.1.2 2.1.3 2.2 2.2.1 2.3
ameliabooking / src / Infrastructure / Services / Payment / SquareMiddlewareService.php
ameliabooking / src / Infrastructure / Services / Payment Last commit date
CurrencyService.php 6 months ago SquareMiddlewareService.php 3 months ago SquareService.php 6 months ago StarterPaymentService.php 6 months ago
SquareMiddlewareService.php
175 lines
1 <?php
2
3 /**
4 * @copyright © Melograno Ventures. All rights reserved.
5 * @licence See LICENCE.md for license details.
6 */
7
8 namespace AmeliaBooking\Infrastructure\Services\Payment;
9
10 use AmeliaBooking\Domain\Services\Settings\SettingsService;
11
12 /**
13 * Class SquareMiddlewareService
14 */
15 class SquareMiddlewareService
16 {
17 /**
18 * @var string
19 */
20 private $middlewareApiUrl;
21
22 /**
23 * SquareMiddlewareService constructor.
24 *
25 * @param SettingsService $settingsService
26 */
27 public function __construct(SettingsService $settingsService)
28 {
29 $squareSettings = $settingsService->getCategorySettings('payments')['square'];
30 $this->middlewareApiUrl = $squareSettings['testMode'] ?
31 'https://middleware-dev.wpamelia.com/' : AMELIA_MIDDLEWARE_URL;
32 }
33
34 /**
35 *
36 * @return boolean
37 *
38 * @throws \Exception
39 */
40 public function decrypt($savedAccessToken)
41 {
42 $ch = curl_init($this->middlewareApiUrl . 'square/decrypt');
43
44 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
45
46 curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
47
48 curl_setopt(
49 $ch,
50 CURLOPT_POSTFIELDS,
51 [
52 'access_token' => $savedAccessToken['access_token'],
53 'refresh_token' => $savedAccessToken['refresh_token']
54 ]
55 );
56
57 $response = curl_exec($ch);
58
59 if ($response && curl_getinfo($ch, CURLINFO_HTTP_CODE) === 200) {
60 $response = json_decode($response, true);
61 set_transient(
62 'amelia_square_access_token',
63 ['access_token' => $response['result']['access_token'], 'refresh_token' => $response['result']['refresh_token']],
64 604800
65 );
66 } else {
67 $response = null;
68 }
69
70 return $response['result'];
71 }
72
73 /**
74 *
75 * @return array
76 *
77 * @throws \Exception
78 */
79 public function getAccessToken($savedAccessToken)
80 {
81 $accessToken = get_transient('amelia_square_access_token');
82 if ($accessToken === false) {
83 $accessToken = $this->decrypt($savedAccessToken);
84 }
85 return $accessToken;
86 }
87
88 /**
89 *
90 * @return boolean
91 *
92 * @throws \Exception
93 */
94 public function disconnectAccount($savedAccessToken, $testMode)
95 {
96 $accessToken = $this->getAccessToken($savedAccessToken);
97
98 $ch = curl_init($this->middlewareApiUrl . 'square/revoke?testMode=' . $testMode);
99
100 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
101
102 curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
103
104 curl_setopt(
105 $ch,
106 CURLOPT_POSTFIELDS,
107 [
108 'access_token' => $accessToken['access_token'],
109 ]
110 );
111
112 $response = curl_exec($ch);
113
114 return true;
115 }
116
117
118 /**
119 *
120 * @param string $savedAccessToken
121 * @param bool $testMode
122 *
123 * @return array|null
124 *
125 * @throws \Exception
126 */
127 public function refreshAccessToken($savedAccessToken, $testMode)
128 {
129 $accessToken = $this->getAccessToken($savedAccessToken);
130
131 $ch = curl_init($this->middlewareApiUrl . 'square/refresh?testMode=' . $testMode);
132
133 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
134
135 curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
136
137 curl_setopt(
138 $ch,
139 CURLOPT_POSTFIELDS,
140 [
141 'refresh_token' => $accessToken['refresh_token'],
142 ]
143 );
144
145 $response = curl_exec($ch);
146
147 if ($response && curl_getinfo($ch, CURLINFO_HTTP_CODE) === 200) {
148 $response = json_decode($response, true);
149 } else {
150 $response = null;
151 }
152
153 return $response;
154 }
155
156 public function getAuthUrl($testMode)
157 {
158 $ch = curl_init(
159 $this->middlewareApiUrl . 'square/authorization/url?testMode=' . $testMode . '&admin_ajax_url=' . urlencode(admin_url('admin-ajax.php', ''))
160 );
161
162 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
163
164 $response = curl_exec($ch);
165
166 $url = null;
167 if ($response) {
168 $response = json_decode($response, true);
169 $url = $response['result'];
170 }
171
172 return $url;
173 }
174 }
175