import hashlib
import hmac
from django.conf import settings
from django.http import (
HttpResponseBadRequest,
HttpResponseForbidden,
JsonResponse,
)
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_POST
@csrf_exempt
@require_POST
def payment_webhook(request):
signature = request.headers.get("X-Webhook-Signature")
if not signature:
return HttpResponseBadRequest("Missing signature")
expected = hmac.new(
settings.WEBHOOK_SECRET.encode(),
request.body,
hashlib.sha256,
).hexdigest()
if not hmac.compare_digest(signature, expected):
return HttpResponseForbidden("Invalid signature")
return JsonResponse({"status": "accepted"})