PluginProbe
GiveWP – Donation Plugin and Fundraising Platform / 4.17.0
GiveWP – Donation Plugin and Fundraising Platform v4.17.0
4.17.0 4.16.9 4.16.8.1 4.16.8 4.16.7.2 4.16.7.1 4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 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 All 256 releases
give / src / PaymentGateways / Gateways / PayPalStandard / Actions / ProcessIpnDonationRefund.php

ProcessIpnDonationRefund.php in GiveWP – Donation Plugin and Fundraising Platform 4.17.0, at src/PaymentGateways/Gateways/PayPalStandard/Actions/ProcessIpnDonationRefund.php

74 lines 2.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Give\PaymentGateways\Gateways\PayPalStandard\Actions;
4
5 use Give\ValueObjects\Money;
6 use Give_Payment;
7 use stdClass;
8
9 /**
10 * @since 2.19.0
11 */
12 class ProcessIpnDonationRefund
13 {
14 /**
15 * @since 2.19.0
16 *
17 * @param stdClass $ipnEventData
18 * @param int $donationId
19 *
20 * @return void
21 */
22 public function __invoke(stdClass $ipnEventData, $donationId)
23 {
24 $donation = new Give_Payment($donationId);
25 if ($this->isPartialRefund($ipnEventData->mc_gross, $donation->currency, $donation->total)) {
26 $donation->add_note(
27 sprintf( /* translators: %s: Paypal parent transaction ID */
28 __('Partial PayPal refund processed: %s', 'give'),
29 $ipnEventData->parent_txn_id
30 )
31 );
32 } else {
33 $donation->add_note(
34 sprintf( /* translators: 1: Paypal parent transaction ID 2. Paypal reason code */
35 __('PayPal Payment #%1$s Refunded for reason: %2$s', 'give'),
36 $ipnEventData->parent_txn_id,
37 $ipnEventData->reason_code
38 )
39 );
40
41 $donation->add_note(
42 sprintf( /* translators: %s: Paypal transaction ID */
43 __('PayPal Refund Transaction ID: %s', 'give'),
44 $ipnEventData->txn_id
45 )
46 );
47
48 $donation->update_status('refunded');
49 }
50 }
51
52 /**
53 * @since 2.19.0
54 *
55 * @param string $refundedAmount
56 * @param $currency
57 * @param $donationAmount
58 *
59 * @return bool
60 */
61 protected function isPartialRefund($refundedAmount, $currency, $donationAmount)
62 {
63 $donationAmount = Money::of($donationAmount, $currency);
64 $refundedAmountOnPayPal = Money::of(
65 // PayPal Standard sends negative amount when refund payment.
66 // Check details https://developer.paypal.com/api/nvp-soap/ipn/IPNandPDTVariables/
67 $refundedAmount * -1,
68 $currency
69 );
70
71 return $refundedAmountOnPayPal->getMinorAmount() < $donationAmount->getMinorAmount();
72 }
73 }
74