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