PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.17.3
GiveWP – Donation Plugin and Fundraising Platform v2.17.3
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 / DonationProcessor.php
give / src / PaymentGateways / PayPalCommerce Last commit date
DataTransferObjects 4 years ago Models 4 years ago Repositories 4 years ago Webhooks 4 years ago AccountAdminNotices.php 4 years ago AdminSettingFields.php 4 years ago AdvancedCardFields.php 4 years ago AjaxRequestHandler.php 4 years ago DonationDetailsPage.php 4 years ago DonationFormPaymentMethod.php 4 years ago DonationProcessor.php 4 years ago PayPalClient.php 4 years ago PayPalCommerce.php 4 years ago RefreshToken.php 4 years ago RefundPaymentHandler.php 4 years ago ScriptLoader.php 4 years ago Utils.php 4 years ago onBoardingRedirectHandler.php 4 years ago
DonationProcessor.php
154 lines
1 <?php
2
3 namespace Give\PaymentGateways\PayPalCommerce;
4
5 use Give\PaymentGateways\PayPalCommerce\Models\PayPalOrder;
6 use PayPalCheckoutSdk\Orders\OrdersGetRequest;
7
8 /**
9 * Class DonationProcessor
10 * @package Give\PaymentGateways\PayPalCommerce
11 *
12 * @since 2.9.0
13 */
14 class DonationProcessor
15 {
16 /**
17 * @var array
18 */
19 private $donationFormData;
20
21 /**
22 * @var int
23 */
24 private $formId;
25
26 /**
27 * Handle donation form submission.
28 *
29 * @since 2.9.0
30 *
31 * @param array $donationFormData
32 *
33 */
34 public function handle($donationFormData)
35 {
36 $this->donationFormData = (array)$donationFormData;
37
38 if ( ! $this->isOneTimeDonation()) {
39 return;
40 }
41
42 $this->formId = absint($this->donationFormData['post_data']['give-form-id']);
43
44 $donationData = [
45 'price' => $this->donationFormData['price'],
46 'give_form_title' => $this->donationFormData['post_data']['give-form-title'],
47 'give_form_id' => $this->formId,
48 'give_price_id' => isset($this->donationFormData['post_data']['give-price-id']) ? $this->donationFormData['post_data']['give-price-id'] : '',
49 'date' => $this->donationFormData['date'],
50 'user_email' => $this->donationFormData['user_email'],
51 'purchase_key' => $this->donationFormData['purchase_key'],
52 'currency' => give_get_currency(),
53 'user_info' => $this->donationFormData['user_info'],
54 'status' => 'pending',
55 'gateway' => $this->donationFormData['gateway'],
56 ];
57
58 $donationId = give_insert_payment($donationData);
59
60 if ( ! $donationId) {
61 $this->redirectBackToDonationForm();
62 }
63
64 $this->redirectDonorToSuccessPage($donationId);
65
66 exit();
67 }
68
69 /**
70 * Return back to donation form page after logging error.
71 *
72 * @since 2.9.0
73 */
74 private function redirectBackToDonationForm()
75 {
76 // Record the error.
77 give_record_gateway_error(
78 esc_html__('Payment Error', 'give'),
79 /* translators: %s: payment data */
80 sprintf(
81 esc_html__(
82 'The payment creation failed before processing the PayPalCommerce gateway request. Payment data: %s',
83 'give'
84 ),
85 print_r($this->donationFormData, true)
86 )
87 );
88
89 give_set_error(
90 'give',
91 esc_html__('An error occurred while processing your payment. Please try again.', 'give')
92 );
93
94 // Problems? Send back.
95 give_send_back_to_checkout();
96 }
97
98 /**
99 * Redirect donor to success page.
100 *
101 * @since 2.9.0
102 *
103 * @param int $donationId
104 *
105 */
106 private function redirectDonorToSuccessPage($donationId)
107 {
108 $orderDetailRequest = new OrdersGetRequest($this->donationFormData['post_data']['payPalOrderId']);
109 $orderDetails = (array)give(PayPalClient::class)->getHttpClient()->execute($orderDetailRequest)->result;
110
111 $order = PayPalOrder::fromArray($orderDetails);
112
113 give_insert_payment_note(
114 $donationId,
115 sprintf(
116 __('Transaction Successful. PayPal Transaction ID: %1$s PayPal Order ID: %2$s', 'give'),
117 $order->payment->id,
118 $order->id
119 )
120 );
121 give_set_payment_transaction_id($donationId, $order->payment->id);
122 give('payment_meta')->update_meta($donationId, '_give_order_id', $order->id);
123
124 // Do not need to set donation to complete if already completed by PayPal webhook.
125 if ('COMPLETED' === $order->payment->status) {
126 give_update_payment_status($donationId);
127 }
128
129 wp_safe_redirect(
130 add_query_arg(
131 ['payment-confirmation' => 'paypal-commerce'],
132 give_get_success_page_url()
133 )
134 );
135
136 exit();
137 }
138
139 /**
140 * Return whether or not donation is onetime.
141 *
142 * @since 2.9.0
143 *
144 * @return bool
145 */
146 private function isOneTimeDonation()
147 {
148 return array_key_exists('post_data', $this->donationFormData) && array_key_exists(
149 'payPalOrderId',
150 $this->donationFormData['post_data']
151 );
152 }
153 }
154