<?php
// 1. Terima payload
$payload = json_decode(
file_get_contents('php://input'),
true
);
// 2. Ambil signature dari header
$receivedSignature =
$_SERVER['HTTP_X_SIGNATURE'] ?? '';
// 3. Buat expected signature
$webhookSecret = env('WEBHOOK_SECRET');
$expectedSignature = hash('sha256',
sprintf(
'%s:%s:%s:%s',
$payload['data']['ref_id'] ?? '',
$payload['data']['invoice'],
$payload['data']['status'],
$webhookSecret
)
);
// 4. Verifikasi (timing-safe)
if (!hash_equals(
$expectedSignature,
$receivedSignature
)) {
http_response_code(401);
echo json_encode([
'error' => 'Invalid signature'
]);
exit;
}
// 5. Signature valid! Proses data
$event = $payload['event'];
$data = $payload['data'];
switch ($event) {
case 'order.completed':
// Update status order
// Kirim notifikasi customer
break;
case 'order.canceled':
// Handle canceled
break;
}
http_response_code(200);
echo json_encode(['status' => 'ok']);