PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.19.2
GiveWP – Donation Plugin and Fundraising Platform v2.19.2
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 / Gateways / PayPalStandard / Controllers / PayPalStandardWebhook.php
give / src / PaymentGateways / Gateways / PayPalStandard / Controllers Last commit date
PayPalStandardWebhook.php 4 years ago
PayPalStandardWebhook.php
154 lines
1 <?php
2
3 namespace Give\PaymentGateways\Gateways\PayPalStandard\Controllers;
4
5 use Give\PaymentGateways\Gateways\PayPalStandard\PayPalStandard;
6 use Give\PaymentGateways\Gateways\PayPalStandard\Webhooks\WebhookRegister;
7 use Give\PaymentGateways\Gateways\PayPalStandard\Webhooks\WebhookValidator;
8
9 /**
10 * This class use to handle PayPal ipn.
11 *
12 * @since 2.19.0
13 */
14 class PayPalStandardWebhook
15 {
16
17 /**
18 * @var WebhookValidator
19 */
20 private $webhookValidator;
21
22 public function __construct(WebhookValidator $webhookValidator)
23 {
24 $this->webhookValidator = $webhookValidator;
25 }
26
27 /**
28 * Handle PayPal ipn
29 *
30 * @since 2.19.0
31 */
32 public function handle()
33 {
34 $eventData = file_get_contents('php://input');
35 $eventData = wp_parse_args($eventData);
36
37 if ( ! $this->webhookValidator->verifyEventSignature($eventData)) {
38 wp_die('Forbidden', 404);
39 }
40
41 $donationId = isset($eventData['custom']) ? absint($eventData['custom']) : 0;
42 $txnType = $eventData['txn_type'];
43
44 // ipn verification can be disabled in GiveWP (<=2.15.0).
45 // This check will prevent anonymous requests from editing donation, if ipn verification disabled.
46 if ( ! $this->verifyDonationId($donationId)) {
47 wp_die('Forbidden', 404);
48 }
49
50 $this->recordIpn($eventData, $donationId);
51 $this->recordIpnInDonation($donationId);
52
53 /* @var WebhookRegister $webhookRegisterer */
54 $webhookRegisterer = give(WebhookRegister::class);
55 if ($webhookRegisterer->hasEventRegistered($txnType)) {
56 $webhookRegisterer->getEventHandler($txnType)->processEvent((object)$eventData);
57 }
58
59 $this->supportLegacyActions($txnType, $eventData, $donationId);
60
61 exit;
62 }
63
64 /**
65 * @param array $eventData
66 * @param int $donationId
67 *
68 * @since 2.19.0
69 */
70 private function recordIpn(array $eventData, $donationId)
71 {
72 update_option(
73 'give_last_paypal_ipn_received',
74 [
75 'auth_status' => 'VERIFIED',
76 'transaction_id' => isset($eventData['txn_id']) ? $eventData['txn_id'] : 'N/A',
77 'payment_id' => $donationId,
78 ],
79 false
80 );
81 }
82
83 /**
84 * @since 2.19.0
85 *
86 * @param int $donationId
87 */
88 private function recordIpnInDonation($donationId)
89 {
90 $currentTimestamp = current_time('timestamp');
91
92 give_insert_payment_note(
93 $donationId,
94 sprintf(
95 __('IPN received on %1$s at %2$s', 'give'),
96 date_i18n('m/d/Y', $currentTimestamp),
97 date_i18n('H:i', $currentTimestamp)
98 )
99 );
100
101 give_update_meta($donationId, 'give_last_paypal_ipn_received', $currentTimestamp);
102 }
103
104 /**
105 * @param $donationId
106 *
107 * @return bool
108 */
109 private function verifyDonationId($donationId)
110 {
111 return $donationId && PayPalStandard::id() === give_get_payment_gateway($donationId);
112 }
113
114 /**
115 * @since 2.19.0
116 *
117 * @param string $txnType
118 * @param array $eventData
119 * @param int $donationId
120 *
121 * @return void
122 */
123 private function supportLegacyActions($txnType, array $eventData, $donationId)
124 {
125 if (has_action('give_paypal_' . $txnType)) {
126 /**
127 * Fires while processing PayPal IPN $txnType.
128 *
129 * Allow PayPal IPN types to be processed separately.
130 *
131 * @since 1.0
132 *
133 * @param int $donationId donation id.
134 *
135 * @param array $eventData Encoded data.
136 */
137 do_action("give_paypal_{$txnType}", $eventData, $donationId);
138 } else {
139 /**
140 * Fires while process PayPal IPN.
141 *
142 * Fallback to web accept just in case the txn_type isn't present.
143 *
144 * @since 1.0
145 *
146 * @param int $donationId donation id.
147 *
148 * @param array $eventData Encoded data.
149 */
150 do_action('give_paypal_web_accept', $eventData, $donationId);
151 }
152 }
153 }
154