PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.5.0
GiveWP – Donation Plugin and Fundraising Platform v4.5.0
4.16.4 4.16.3 4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / src / PaymentGateways / PayPalCommerce / PayPalCheckoutSdk / AuthorizationInjector.php
give / src / PaymentGateways / PayPalCommerce / PayPalCheckoutSdk Last commit date
Requests 1 year ago AccessToken.php 3 years ago AuthorizationInjector.php 2 years ago PayPalHttpClient.php 2 years ago ProcessorResponseError.php 2 years ago
AuthorizationInjector.php
104 lines
1 <?php
2
3 namespace Give\PaymentGateways\PayPalCommerce\PayPalCheckoutSdk;
4
5 use Give\PaymentGateways\PayPalCommerce\RefreshToken;
6 use Give\PaymentGateways\PayPalCommerce\Repositories\MerchantDetails;
7 use Give\PaymentGateways\PayPalCommerce\Repositories\PayPalAuth;
8 use PayPalCheckoutSdk\Core\AccessTokenRequest;
9 use PayPalCheckoutSdk\Core\RefreshTokenRequest;
10 use PayPalHttp\HttpRequest;
11 use PayPalHttp\Injector;
12
13 /**
14 * Class AuthorizationInjector
15 *
16 * This class set Authorization in http request header if missing.
17 * Authorization header build with merchant access token.
18 * Fresh Merchant access token will be fetched from PayPal if expired, for http request.
19 *
20 * @since 2.32.0 Remove unnecessary properties and methods.
21 * @since 2.25.0
22 *
23 * @see \PayPalCheckoutSdk\Core\AuthorizationInjector
24 */
25 class AuthorizationInjector implements Injector
26 {
27 public $accessToken;
28
29 /**
30 * Adds an Authorization header to the request.
31 *
32 * @since 2.25.0
33 */
34 public function inject($request)
35 {
36 if (! $this->hasAuthHeader($request) && ! $this->isAuthRequest($request)) {
37 if (is_null($this->accessToken) || $this->accessToken->isExpired()) {
38 $this->accessToken = $this->fetchAccessToken();
39 }
40 $request->headers['Authorization'] = "Bearer {$this->accessToken->token}";
41 }
42 }
43
44 /**
45 * Returns an AccessToken.
46 *
47 * @since 2.32.0 use client credentials to fetch access token.
48 * @since 2.25.0
49 */
50 protected function fetchAccessToken(): AccessToken
51 {
52 $merchantDetail = give(MerchantDetails::class)->getDetails();
53 $accessToken = give(PayPalAuth::class)->getTokenFromClientCredentials(
54 $merchantDetail->clientId,
55 $merchantDetail->clientSecret
56 );
57
58 $this->registerRefreshTokenCronJob($accessToken);
59
60 return AccessToken::fromArray($accessToken);
61 }
62
63 /**
64 * Return true if the request is an AccessTokenRequest or RefreshTokenRequest.
65 *
66 * @since 2.25.0
67 */
68 private function isAuthRequest($request): bool
69 {
70 return $request instanceof AccessTokenRequest || $request instanceof RefreshTokenRequest;
71 }
72
73 /**
74 * Return true if the request has an Authorization header.
75 *
76 * @since 2.25.0
77 */
78 private function hasAuthHeader(HttpRequest $request): bool
79 {
80 return array_key_exists("Authorization", $request->headers);
81 }
82
83 /**
84 * Should save new access token and add a cron job to refresh token.
85 *
86 * @since 2.32.0 Get latest merchant details from database.
87 * @since 2.25.0
88 *
89 * @return void
90 */
91 private function registerRefreshTokenCronJob(array $accessToken)
92 {
93 $refreshToken = give(RefreshToken::class);
94 $merchantDetailRepository = give(MerchantDetails::class);
95 $merchantDetail = $merchantDetailRepository->getDetails();
96
97 $merchantDetail->setTokenDetails($accessToken);
98 $merchantDetailRepository->save($merchantDetail);
99
100 $refreshToken->deleteRefreshTokenCronJob();
101 $refreshToken->registerCronJobToRefreshToken($accessToken['expiresIn']);
102 }
103 }
104