Her webhook isteği, HMAC-SHA256 imzası taşıyan bir InzoPay-Signature başlığı içerir. Sahte istekleri önlemek için bunu her zaman doğrulayın.
InzoPay-Signature: t=1713000000,v1=abc123def456...Burada t Unix zaman damgası, v1 ise {timestamp}.{body} değerinin HMAC-SHA256'sıdır.
$sigHeader = $_SERVER['HTTP_INZOPAY_SIGNATURE'];
$body = file_get_contents('php://input');
$secret = 'whsec_your_signing_secret';
[$tPart, $v1Part] = explode(',', $sigHeader);
$timestamp = substr($tPart, 2);
$received = substr($v1Part, 3);
$expected = hash_hmac('sha256', $timestamp . '.' . $body, $secret);
if (!hash_equals($expected, $received)) {
http_response_code(400);
exit('Invalid signature');
}
// Request is authentic — process the event
$event = json_decode($body, true);Tekrar saldırılarını önlemek için zaman damgası 5 dakikadan eski olan istekleri reddedin:
if (abs(time() - (int)$timestamp) > 300) {
http_response_code(400);
exit('Timestamp too old');
}