PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.25.2
GiveWP – Donation Plugin and Fundraising Platform v2.25.2
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 / RefreshToken.php
give / src / PaymentGateways / PayPalCommerce Last commit date
Actions 4 years ago DataTransferObjects 4 years ago Exceptions 4 years ago Migrations 4 years ago Models 3 years ago PayPalCheckoutSdk 3 years ago Repositories 3 years ago Webhooks 4 years ago AccountAdminNotices.php 4 years ago AdminSettingFields.php 3 years ago AdvancedCardFields.php 4 years ago AjaxRequestHandler.php 3 years ago DonationDetailsPage.php 4 years ago DonationFormPaymentMethod.php 4 years ago PayPalClient.php 3 years ago PayPalCommerce.php 3 years ago RefreshToken.php 3 years ago RefundPaymentHandler.php 4 years ago ScriptLoader.php 4 years ago Utils.php 4 years ago onBoardingRedirectHandler.php 3 years ago
RefreshToken.php
147 lines
1 <?php
2
3 namespace Give\PaymentGateways\PayPalCommerce;
4
5 use Give\Framework\Exceptions\Primitives\Exception;
6 use Give\Log\Log;
7 use Give\PaymentGateways\PayPalCommerce\Models\MerchantDetail;
8 use Give\PaymentGateways\PayPalCommerce\Repositories\MerchantDetails;
9 use Give\PaymentGateways\PayPalCommerce\Repositories\PayPalAuth;
10
11 /**
12 * Class RefreshToken
13 *
14 * @since 2.9.0
15 */
16 class RefreshToken
17 {
18 /* @var MerchantDetail */
19 private $merchantDetail;
20
21 /**
22 * @since 2.9.0
23 *
24 * @var MerchantDetails
25 */
26 private $detailsRepository;
27
28 /**
29 * @since 2.9.0
30 *
31 * @var PayPalAuth
32 */
33 private $payPalAuth;
34
35 /**
36 * This time reduced from token expiration time to refresh token before it expires.
37 *
38 * @since 2.25.0
39 *
40 * @var int $expirationTimeOffset Expiration time offset in seconds.
41 */
42 private $expirationTimeOffset = 1800; // 30 minutes
43
44 /**
45 * RefreshToken constructor.
46 *
47 * @since 2.9.0
48 * @since 2.9.6 Add MerchantDetail constructor param.
49 *
50 * @param MerchantDetails $detailsRepository
51 * @param PayPalAuth $payPalAuth
52 * @param MerchantDetail $merchantDetail
53 */
54 public function __construct(
55 MerchantDetails $detailsRepository,
56 PayPalAuth $payPalAuth,
57 MerchantDetail $merchantDetail
58 ) {
59 $this->detailsRepository = $detailsRepository;
60 $this->payPalAuth = $payPalAuth;
61 $this->merchantDetail = $merchantDetail;
62 }
63
64 /**
65 * Return cron json name which uses to refresh token.
66 *
67 * @since 2.9.0
68 */
69 private function getCronJobHookName(): string
70 {
71 return 'give_paypal_commerce_refresh_token';
72 }
73
74 /**
75 * Register cron job to refresh access token.
76 * Note: only for internal use.
77 *
78 * @since 2.9.0
79 *
80 * @param string $tokenExpires
81 *
82 */
83 public function registerCronJobToRefreshToken($tokenExpires)
84 {
85 // Refresh token before half hours of expires date.
86 wp_schedule_single_event(
87 time() + ($tokenExpires - $this->expirationTimeOffset),
88 $this->getCronJobHookName()
89 );
90 }
91
92 /**
93 * Delete cron job which refresh access token.
94 * Note: only for internal use.
95 *
96 * @since 2.9.0
97 *
98 */
99 public function deleteRefreshTokenCronJob()
100 {
101 wp_clear_scheduled_hook($this->getCronJobHookName());
102 }
103
104 /**
105 * Refresh token.
106 * Note: only for internal use
107 *
108 * @since 2.25.0 Handle exception. Refresh access token every 5 minute on faliure.
109 * @since 2.9.6 Refresh token only if paypal merchant id exist.
110 * @since 2.9.0
111 */
112 public function refreshToken()
113 {
114 // Exit if account is not connected.
115 if (! $this->detailsRepository->accountIsConnected()) {
116 return;
117 }
118
119 // Default expiration date of access token.
120 // This is used when we are unable to get access token from PayPal.
121 $expiresIn = $this->expirationTimeOffset - 1500; // 5 minutes
122
123 try {
124 $tokenDetails = $this->payPalAuth->getTokenFromClientCredentials(
125 $this->merchantDetail->clientId,
126 $this->merchantDetail->clientSecret
127 );
128
129 $this->merchantDetail->setTokenDetails($tokenDetails);
130 $this->detailsRepository->save($this->merchantDetail);
131
132 $expiresIn = $tokenDetails['expiresIn'];
133 } catch (Exception $exception) {
134 give(Log::class)->warning(
135 'PayPal Commerce: Error refresh access token',
136 [
137 'category' => 'Payment Gateway',
138 'source' => 'Paypal Commerce',
139 'exception' => $exception,
140 ]
141 );
142 }
143
144 $this->registerCronJobToRefreshToken($expiresIn);
145 }
146 }
147