PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.13.3
GiveWP – Donation Plugin and Fundraising Platform v2.13.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 / 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 DonationFormPaymentMethod.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
331 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 || array_key_exists( 'error', $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 * @since 2.9.0
170 * @todo: handle payment create error on frontend.
171 *
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 'formTitle' => give_payment_gateway_item_title( [ 'post_data' => $postData ], 127 ),
182 'donationAmount' => isset( $postData['give-amount'] ) ?
183 (float) apply_filters(
184 'give_donation_total',
185 give_maybe_sanitize_amount(
186 $postData['give-amount'],
187 [ 'currency' => give_get_currency( $formId ) ]
188 )
189 ) :
190 '0.00',
191 'payer' => [
192 'firstName' => $postData['give_first'],
193 'lastName' => $postData['give_last'],
194 'email' => $postData['give_email'],
195 'address' => $this->getDonorAddressFromPostedDataForPaypalOrder( $postData ),
196 ],
197 'application_context' => [
198 'shipping_preference' => 'NO_SHIPPING',
199 ],
200 ];
201
202 try {
203 $result = give( PayPalOrder::class )->createOrder( $data );
204
205 wp_send_json_success(
206 [
207 'id' => $result,
208 ]
209 );
210 } catch ( \Exception $ex ) {
211 wp_send_json_error(
212 [
213 'error' => json_decode( $ex->getMessage(), true ),
214 ]
215 );
216 }
217 }
218
219 /**
220 * Approve order.
221 *
222 * @since 2.9.0
223 * @todo: handle payment capture error on frontend.
224 *
225 */
226 public function approveOrder() {
227 $this->validateFrontendRequest();
228
229 $orderId = give_clean( $_GET['order'] );
230
231 try {
232 $result = give( PayPalOrder::class )->approveOrder( $orderId );
233 wp_send_json_success(
234 [
235 'order' => $result,
236 ]
237 );
238 } catch ( \Exception $ex ) {
239 wp_send_json_error(
240 [
241 'error' => json_decode( $ex->getMessage(), true ),
242 ]
243 );
244 }
245 }
246
247 /**
248 * Return on boarding trouble notice.
249 *
250 * @since 2.9.6
251 */
252 public function onBoardingTroubleNotice() {
253 if ( ! current_user_can( 'manage_give_settings' ) ) {
254 wp_die();
255 }
256
257 /* @var AdminSettingFields $adminSettingFields */
258 $adminSettingFields = give( AdminSettingFields::class );
259
260 $actionList = sprintf(
261 '<ol><li>%1$s</li><li>%2$s</li><li>%3$s</li></ol>',
262 esc_html__(
263 'Make sure to complete the entire PayPal process. Do not close the window until you have finished the process.',
264 'give'
265 ),
266 esc_html__(
267 'The last screen of the PayPal connect process includes a button to be sent back to your site. It is important you click this and do not close the window yourself.',
268 'give'
269 ),
270 esc_html__(
271 'If you’re still having problems connecting: ',
272 'give'
273 ) . $adminSettingFields->getAdminGuidanceNotice( false )
274 );
275
276 $standardError = sprintf(
277 '<div id="give-paypal-onboarding-trouble-notice" class="give-hidden"><p class="error-message">%1$s</p><p>%2$s</p></div>',
278 esc_html__( 'Having trouble connecting to PayPal?', 'give' ),
279 $actionList
280 );
281
282 wp_send_json_success( $standardError );
283 }
284
285 /**
286 * Validate admin ajax request.
287 *
288 * @since 2.9.0
289 */
290 private function validateAdminRequest() {
291 if ( ! current_user_can( 'manage_give_settings' ) ) {
292 wp_die();
293 }
294 }
295
296 /**
297 * Validate frontend ajax request.
298 *
299 * @since 2.9.0
300 */
301 private function validateFrontendRequest() {
302 $formId = absint( $_POST['give-form-id'] );
303
304 if ( ! $formId || ! give_verify_donation_form_nonce( give_clean( $_POST['give-form-hash'] ), $formId ) ) {
305 wp_die();
306 }
307 }
308
309 /**
310 * @since 2.11.1
311 *
312 * @param array $postedData
313 *
314 * @return array
315 */
316 private function getDonorAddressFromPostedDataForPaypalOrder( $postedData ) {
317 if ( ! $this->settings->canCollectBillingInformation() ) {
318 return [];
319 }
320
321 $address['address_line1'] = ! empty( $postedData['card_address'] ) ? $postedData['card_address'] : '';
322 $address['address_line_2'] = ! empty( $postedData['card_address_2'] ) ? $postedData['card_address_2'] : '';
323 $address['admin_line_1'] = ! empty( $postedData['card_city'] ) ? $postedData['card_city'] : '';
324 $address['admin_line_2'] = ! empty( $postedData['card_state'] ) ? $postedData['card_state'] : '';
325 $address['postal_code'] = ! empty( $postedData['card_zip'] ) ? $postedData['card_zip'] : '';
326 $address['country_code'] = ! empty( $postedData['billing_country'] ) ? $postedData['billing_country'] : '';
327
328 return $address;
329 }
330 }
331