PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.25.0
GiveWP – Donation Plugin and Fundraising Platform v2.25.0
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 / Controller / PayPalWebhooks.php
give / src / Controller Last commit date
Form.php 4 years ago PayPalWebhooks.php 4 years ago
PayPalWebhooks.php
103 lines
1 <?php
2
3 namespace Give\Controller;
4
5 use Give\Framework\Exceptions\Primitives\Exception;
6 use Give\PaymentGateways\PayPalCommerce\DataTransferObjects\PayPalWebhookHeaders;
7 use Give\PaymentGateways\PayPalCommerce\Repositories\MerchantDetails;
8 use Give\PaymentGateways\PayPalCommerce\Repositories\Webhooks;
9 use Give\PaymentGateways\PayPalCommerce\Webhooks\WebhookRegister;
10
11 class PayPalWebhooks
12 {
13 /**
14 * @since 2.8.0
15 *
16 * @var MerchantDetails
17 */
18 private $merchantRepository;
19
20 /**
21 * @var Webhooks
22 */
23 private $webhookRepository;
24
25 /**
26 * @since 2.9.0
27 *
28 * @var WebhookRegister
29 */
30 private $webhookRegister;
31
32 /**
33 * PayPalWebhooks constructor.
34 *
35 * @since 2.8.0
36 *
37 * @param MerchantDetails $merchantRepository
38 * @param WebhookRegister $register
39 * @param Webhooks $webhookRepository
40 */
41 public function __construct(
42 MerchantDetails $merchantRepository,
43 WebhookRegister $register,
44 Webhooks $webhookRepository
45 ) {
46 $this->merchantRepository = $merchantRepository;
47 $this->webhookRegister = $register;
48 $this->webhookRepository = $webhookRepository;
49 }
50
51 /**
52 * Handles all webhook event requests. First it verifies that authenticity of the event with
53 * PayPal, and then it passes the event along to the appropriate listener to finish.
54 *
55 * @since 2.8.0
56 *
57 * @throws Exception
58 */
59 public function handle()
60 {
61 if ( ! $this->merchantRepository->accountIsConnected()) {
62 return;
63 }
64
65 $merchantDetails = $this->merchantRepository->getDetails();
66
67 $event = json_decode(file_get_contents('php://input'), false);
68
69 // If we receive an event that we're not expecting, just ignore it
70 if ( ! $this->webhookRegister->hasEventRegistered($event->event_type)) {
71 return;
72 }
73
74 $payPalHeaders = PayPalWebhookHeaders::fromHeaders(getallheaders());
75
76 if ( ! $this->webhookRepository->verifyEventSignature($merchantDetails->accessToken, $event, $payPalHeaders)) {
77 give_record_gateway_error(
78 'Failed webhook event verification',
79 print_r(
80 [
81 'merchant' => $merchantDetails,
82 'event' => $event,
83 'headers' => getallheaders(),
84 ],
85 true
86 )
87 );
88 throw new Exception('Failed event verification');
89 }
90
91 try {
92 $this->webhookRegister
93 ->getEventHandler($event->event_type)
94 ->processEvent($event);
95 } catch (Exception $exception) {
96 $eventType = empty($event->event_type) ? 'Unknown' : $event->event_type;
97 give_record_gateway_error("Error processing webhook: {$eventType}", print_r($event, true));
98
99 throw $exception;
100 }
101 }
102 }
103