PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.9.1
GiveWP – Donation Plugin and Fundraising Platform v2.9.1
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 / AjaxRequestHandler.php
give / src / PaymentGateways / PayPalCommerce Last commit date
DataTransferObjects 5 years ago Models 5 years ago Repositories 5 years ago Webhooks 5 years ago AccountAdminNotices.php 5 years ago AdminSettingFields.php 5 years ago AdvancedCardFields.php 5 years ago AjaxRequestHandler.php 5 years ago DonationDetailsPage.php 5 years ago DonationProcessor.php 5 years ago PayPalClient.php 5 years ago PayPalCommerce.php 5 years ago RefreshToken.php 5 years ago RefundPaymentHandler.php 5 years ago ScriptLoader.php 5 years ago Utils.php 5 years ago onBoardingRedirectHandler.php 5 years ago
AjaxRequestHandler.php
262 lines
1 <?php
2
3 namespace Give\PaymentGateways\PayPalCommerce;
4
5 use Give\ConnectClient\ConnectClient;
6 use Give\PaymentGateways\PayPalCommerce\Models\MerchantDetail;
7 use Give\PaymentGateways\PayPalCommerce\Repositories\MerchantDetails;
8 use Give\PaymentGateways\PayPalCommerce\Repositories\PayPalAuth;
9 use Give\PaymentGateways\PayPalCommerce\Repositories\Settings;
10 use Give\PaymentGateways\PayPalCommerce\Repositories\Webhooks;
11 use Give\PaymentGateways\PayPalCommerce\Repositories\PayPalOrder;
12
13 /**
14 * Class AjaxRequestHandler
15 * @package Give\PaymentGateways\PaypalCommerce
16 *
17 * @sicne 2.9.0
18 */
19 class AjaxRequestHandler {
20 /**
21 * @since 2.9.0
22 *
23 * @var Webhooks
24 */
25 private $webhooksRepository;
26
27 /**
28 * @since 2.9.0
29 *
30 * @var MerchantDetail
31 */
32 private $merchantDetails;
33
34 /**
35 * @since 2.9.0
36 *
37 * @var PayPalAuth
38 */
39 private $payPalAuth;
40
41 /**
42 * @since 2.9.0
43 *
44 * @var MerchantDetails
45 */
46 private $merchantRepository;
47
48 /**
49 * @since 2.9.0
50 *
51 * @var ConnectClient
52 */
53 private $refreshToken;
54
55 /**
56 * @since 2.9.0
57 *
58 * @var Settings
59 */
60 private $settings;
61
62 /**
63 * AjaxRequestHandler constructor.
64 *
65 * @since 2.9.0
66 *
67 * @param Webhooks $webhooksRepository
68 * @param MerchantDetail $merchantDetails
69 * @param MerchantDetails $merchantRepository
70 * @param RefreshToken $refreshToken
71 * @param Settings $settings
72 * @param PayPalAuth $payPalAuth
73 */
74 public function __construct(
75 Webhooks $webhooksRepository,
76 MerchantDetail $merchantDetails,
77 MerchantDetails $merchantRepository,
78 RefreshToken $refreshToken,
79 Settings $settings,
80 PayPalAuth $payPalAuth
81 ) {
82 $this->webhooksRepository = $webhooksRepository;
83 $this->merchantDetails = $merchantDetails;
84 $this->merchantRepository = $merchantRepository;
85 $this->refreshToken = $refreshToken;
86 $this->settings = $settings;
87 $this->payPalAuth = $payPalAuth;
88 }
89
90 /**
91 * give_paypal_commerce_user_onboarded ajax action handler
92 *
93 * @since 2.9.0
94 */
95 public function onBoardedUserAjaxRequestHandler() {
96 $this->validateAdminRequest();
97
98 $partnerLinkInfo = $this->settings->getPartnerLinkDetails();
99
100 $payPalResponse = $this->payPalAuth->getTokenFromAuthorizationCode(
101 give_clean( $_GET['authCode'] ),
102 give_clean( $_GET['sharedId'] ),
103 $partnerLinkInfo['nonce']
104 );
105
106 if ( ! $payPalResponse ) {
107 wp_send_json_error();
108 }
109
110 $this->settings->updateAccessToken( $payPalResponse );
111
112 give( RefreshToken::class )->registerCronJobToRefreshToken( $payPalResponse['expiresIn'] );
113
114 wp_send_json_success();
115 }
116
117 /**
118 * give_paypal_commerce_get_partner_url action handler
119 *
120 * @since 2.9.0
121 */
122 public function onGetPartnerUrlAjaxRequestHandler() {
123 $this->validateAdminRequest();
124
125 if ( empty( $country = $_GET['countryCode'] ) || ! isset( give_get_country_list()[ $country ] ) ) {
126 wp_send_json_error( 'Must include valid 2-character country code' );
127 }
128
129 $data = $this->payPalAuth->getSellerPartnerLink(
130 admin_url( 'edit.php?post_type=give_forms&page=give-settings&tab=gateways&section=paypal&group=paypal-commerce' ),
131 $country
132 );
133
134 if ( ! $data ) {
135 wp_send_json_error();
136 }
137
138 $this->settings->updateAccountCountry( $country );
139 $this->settings->updatePartnerLinkDetails( $data );
140
141 wp_send_json_success( $data );
142 }
143
144 /**
145 * give_paypal_commerce_disconnect_account ajax request handler.
146 *
147 * @since 2.9.0
148 */
149 public function removePayPalAccount() {
150 $this->validateAdminRequest();
151
152 // Remove the webhook from PayPal if there is one
153 if ( $webhookConfig = $this->webhooksRepository->getWebhookConfig() ) {
154 $this->webhooksRepository->deleteWebhook( $this->merchantDetails->accessToken, $webhookConfig->id );
155 $this->webhooksRepository->deleteWebhookConfig();
156 }
157
158 $this->merchantRepository->delete();
159 $this->merchantRepository->deleteAccountErrors();
160 $this->merchantRepository->deleteClientToken();
161 $this->refreshToken->deleteRefreshTokenCronJob();
162
163 wp_send_json_success();
164 }
165
166 /**
167 * Create order.
168 *
169 * @todo: handle payment create error on frontend.
170 *
171 * @since 2.9.0
172 */
173 public function createOrder() {
174 $this->validateFrontendRequest();
175
176 $postData = give_clean( $_POST );
177 $formId = absint( $postData['give-form-id'] );
178
179 $data = [
180 'formId' => $formId,
181 'donationAmount' => isset( $postData['give-amount'] ) ? (float) apply_filters( 'give_donation_total', give_maybe_sanitize_amount( $postData['give-amount'], [ 'currency' => give_get_currency( $formId ) ] ) ) : '0.00',
182 'payer' => [
183 'firstName' => $postData['give_first'],
184 'lastName' => $postData['give_last'],
185 'email' => $postData['give_email'],
186 ],
187 'application_context' => [
188 'shipping_preference' => 'NO_SHIPPING',
189 ],
190 ];
191
192 try {
193 $result = give( PayPalOrder::class )->createOrder( $data );
194
195 wp_send_json_success(
196 [
197 'id' => $result,
198 ]
199 );
200 } catch ( \Exception $ex ) {
201 wp_send_json_error(
202 [
203 'error' => json_decode( $ex->getMessage(), true ),
204 ]
205 );
206 }
207 }
208
209 /**
210 * Approve order.
211 *
212 * @todo: handle payment capture error on frontend.
213 *
214 * @since 2.9.0
215 */
216 public function approveOrder() {
217 $this->validateFrontendRequest();
218
219 $orderId = give_clean( $_GET['order'] );
220
221 try {
222 $result = give( PayPalOrder::class )->approveOrder( $orderId );
223 wp_send_json_success(
224 [
225 'order' => $result,
226 ]
227 );
228 } catch ( \Exception $ex ) {
229 wp_send_json_error(
230 [
231 'error' => json_decode( $ex->getMessage(), true ),
232 ]
233 );
234 }
235 }
236
237 /**
238 * Validate admin ajax request.
239 *
240 * @since 2.9.0
241 */
242 private function validateAdminRequest() {
243
244 if ( ! current_user_can( 'manage_give_settings' ) ) {
245 wp_die();
246 }
247 }
248
249 /**
250 * Validate frontend ajax request.
251 *
252 * @since 2.9.0
253 */
254 private function validateFrontendRequest() {
255 $formId = absint( $_POST['give-form-id'] );
256
257 if ( ! $formId || ! give_verify_donation_form_nonce( give_clean( $_POST['give-form-hash'] ), $formId ) ) {
258 wp_die();
259 }
260 }
261 }
262