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