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