PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.29.0
GiveWP – Donation Plugin and Fundraising Platform v2.29.0
4.16.7.1 4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 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
AccessToken.php 3 years ago AuthorizationInjector.php 3 years ago PayPalHttpClient.php 3 years ago
AuthorizationInjector.php
117 lines
1 <?php
2
3 namespace Give\PaymentGateways\PayPalCommerce\PayPalCheckoutSdk;
4
5 use Give\Helpers\ArrayDataSet;
6 use Give\PaymentGateways\PayPalCommerce\Models\MerchantDetail;
7 use Give\PaymentGateways\PayPalCommerce\RefreshToken;
8 use Give\PaymentGateways\PayPalCommerce\Repositories\MerchantDetails;
9 use PayPalCheckoutSdk\Core\AccessTokenRequest;
10 use PayPalCheckoutSdk\Core\PayPalEnvironment;
11 use PayPalCheckoutSdk\Core\RefreshTokenRequest;
12 use PayPalHttp\HttpClient;
13 use PayPalHttp\HttpRequest;
14 use PayPalHttp\Injector;
15
16 /**
17 * Class AuthorizationInjector
18 *
19 * This class set Authorization in http request header if missing.
20 * Authorization header build with merchant access token.
21 * Fresh Merchant access token will be fetched from PayPal if expired, for http request.
22 *
23 * @since 2.25.0
24 *
25 * @see \PayPalCheckoutSdk\Core\AuthorizationInjector
26 */
27 class AuthorizationInjector implements Injector
28 {
29 private $client;
30 private $environment;
31 private $refreshToken;
32 public $accessToken;
33
34 /**
35 * Class constructor.
36 *
37 * @since 2.25.0
38 */
39 public function __construct(HttpClient $client, PayPalEnvironment $environment, $refreshToken)
40 {
41 $this->client = $client;
42 $this->environment = $environment;
43 $this->refreshToken = $refreshToken;
44 }
45
46 /**
47 * Adds an Authorization header to the request.
48 *
49 * @since 2.25.0
50 */
51 public function inject($request)
52 {
53 if (! $this->hasAuthHeader($request) && ! $this->isAuthRequest($request)) {
54 if (is_null($this->accessToken) || $this->accessToken->isExpired()) {
55 $this->accessToken = $this->fetchAccessToken();
56 }
57 $request->headers['Authorization'] = 'Bearer ' . $this->accessToken->token;
58 }
59 }
60
61 /**
62 * Returns an AccessToken.
63 *
64 * @since 2.25.0
65 */
66 protected function fetchAccessToken(): AccessToken
67 {
68 $accessTokenResponse = $this->client->execute(new AccessTokenRequest($this->environment, $this->refreshToken));
69 $accessToken = $accessTokenResponse->result;
70
71 $this->registerRefreshTokenCronJob($accessToken);
72
73 return AccessToken::fromObject($accessToken);
74 }
75
76 /**
77 * Return true if the request is an AccessTokenRequest or RefreshTokenRequest.
78 *
79 * @since 2.25.0
80 */
81 private function isAuthRequest($request): bool
82 {
83 return $request instanceof AccessTokenRequest || $request instanceof RefreshTokenRequest;
84 }
85
86 /**
87 * Return true if the request has an Authorization header.
88 *
89 * @since 2.25.0
90 */
91 private function hasAuthHeader(HttpRequest $request): bool
92 {
93 return array_key_exists("Authorization", $request->headers);
94 }
95
96 /**
97 * Should save new access token and add a cron job to refresh token.
98 *
99 * @since 2.25.0
100 *
101 * @return void
102 */
103 private function registerRefreshTokenCronJob($accessToken)
104 {
105 $refreshToken = give(RefreshToken::class);
106 $merchantDetail = give(MerchantDetail::class);
107 $merchantDetailRepository = give(MerchantDetails::class);
108 $accessToken = ArrayDataSet::camelCaseKeys($accessToken);
109
110 $merchantDetail->setTokenDetails($accessToken);
111 $merchantDetailRepository->save($merchantDetail);
112
113 $refreshToken->deleteRefreshTokenCronJob();
114 $refreshToken->registerCronJobToRefreshToken($accessToken['expires_in']);
115 }
116 }
117