$value) { $normalizedHeaders[str_replace('_', '-', strtolower($key))] = $value; } $headerKeys = [ 'transmissionId' => 'paypal-transmission-id', 'transmissionTime' => 'paypal-transmission-time', 'transmissionSig' => 'paypal-transmission-sig', 'certUrl' => 'paypal-cert-url', 'authAlgo' => 'paypal-auth-algo', ]; $payPalHeaders = new self(); $missingKeys = []; foreach ($headerKeys as $property => $expectedKey) { if (isset($normalizedHeaders[$expectedKey])) { $payPalHeaders->$property = $normalizedHeaders[$expectedKey]; } else { $missingKeys[] = $expectedKey; } } if ( ! empty($missingKeys)) { PaymentGatewayLog::error( 'Missing PayPal webhook header', [ 'missingKeys' => $missingKeys, 'headers' => $headers, ] ); throw new HttpHeaderException("Missing PayPal headers: " . implode(', ', $missingKeys)); } return $payPalHeaders; } }