verify($signatureKey, $payload, $headers); } /** * Verify payload Signature * * @param string $signatureKey * @param string $data * @param array $headers * @throws SignatureVerificationException * @return bool */ private function verify(string $signatureKey, string $data, array $headers) { $calculatedSignature = (string)new SignatureCalculator($signatureKey, $data); if ($calculatedSignature !== $this->getPayloadSignature($headers)) { throw new SignatureVerificationException('Signature mismatched for payload'); } return true; } /** * Retrieve Signature from payload * * @param array $headers * @throws SignatureVerificationException * @return string */ private function getPayloadSignature(array $headers) { if (isset($headers['Signature']) && $headers['Signature']) { $signature = $headers['Signature']; } if (isset($headers['signature']) && $headers['signature']) { $signature = $headers['signature']; } if (empty($signature)) { throw new SignatureVerificationException('No signature was found for payload'); } return $signature; } }