PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.16.3
GiveWP – Donation Plugin and Fundraising Platform v4.16.3
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 / PayPalCommerce / DataTransferObjects / PayPalWebhookHeaders.php
give / src / PaymentGateways / PayPalCommerce / DataTransferObjects Last commit date
PayPalWebhookHeaders.php 1 year ago
PayPalWebhookHeaders.php
95 lines
1 <?php
2
3 namespace Give\PaymentGateways\PayPalCommerce\DataTransferObjects;
4
5 use Give\Framework\Exceptions\Primitives\HttpHeaderException;
6 use Give\Framework\PaymentGateways\Log\PaymentGatewayLog;
7
8 class PayPalWebhookHeaders
9 {
10 /**
11 * @since 2.9.0
12 * @var string
13 */
14 public $transmissionId;
15
16 /**
17 * @since 2.9.0
18 * @var string
19 */
20 public $transmissionTime;
21
22 /**
23 * @since 2.9.0
24 * @var string
25 */
26 public $transmissionSig;
27
28 /**
29 * @since 2.9.0
30 * @var string
31 */
32 public $certUrl;
33
34 /**
35 * @since 2.9.0
36 * @var string
37 */
38 public $authAlgo;
39
40 /**
41 * This grabs the headers from the webhook request to be used in the signature verification
42 *
43 * A strange thing here is that the headers are inconsistent between live and sandbox mode, so this also checks for
44 * both forms of the headers (studly case and all caps).
45 *
46 * @since 4.3.2 Normalize header keys to lowercase and replace underscores with hyphens.
47 * @since 2.9.0
48 *
49 * @param array $headers
50 *
51 * @return self
52 * @throws HttpHeaderException
53 */
54 public static function fromHeaders(array $headers)
55 {
56 $normalizedHeaders = [];
57 foreach ($headers as $key => $value) {
58 $normalizedHeaders[str_replace('_', '-', strtolower($key))] = $value;
59 }
60
61 $headerKeys = [
62 'transmissionId' => 'paypal-transmission-id',
63 'transmissionTime' => 'paypal-transmission-time',
64 'transmissionSig' => 'paypal-transmission-sig',
65 'certUrl' => 'paypal-cert-url',
66 'authAlgo' => 'paypal-auth-algo',
67 ];
68
69 $payPalHeaders = new self();
70 $missingKeys = [];
71
72 foreach ($headerKeys as $property => $expectedKey) {
73 if (isset($normalizedHeaders[$expectedKey])) {
74 $payPalHeaders->$property = $normalizedHeaders[$expectedKey];
75 } else {
76 $missingKeys[] = $expectedKey;
77 }
78 }
79
80 if ( ! empty($missingKeys)) {
81 PaymentGatewayLog::error(
82 'Missing PayPal webhook header',
83 [
84 'missingKeys' => $missingKeys,
85 'headers' => $headers,
86 ]
87 );
88
89 throw new HttpHeaderException("Missing PayPal headers: " . implode(', ', $missingKeys));
90 }
91
92 return $payPalHeaders;
93 }
94 }
95