from django.urls import reverse from django.views.decorators.csrf import csrf_exempt from django.shortcuts import render, get_object_or_404, redirect from django.http.response import HttpResponse from tpv.forms import UpdateEmailForm from tpv.models import PaymentTPV from tpv.redsys import RedsysClient from tpv.utils import pay_order, validate_payment_for_order from tpv.signals import redsys_payment_accepted, redsys_payment_rejected def payment_accepted(request, order): order = get_object_or_404(PaymentTPV, hash=order) return render( request, template_name="tpv/order_created.html", context={ "order": order, }, ) def payment_rejected(request, order): order = get_object_or_404(PaymentTPV, hash=order) return render( request, template_name="tpv/order_created.html", context={ "order": order, }, ) @csrf_exempt def webhook(request, order): order = get_object_or_404(PaymentTPV, hash=order) try: amount_paid = validate_payment_for_order(request, order) pay_order(order, amount_paid) redsys_payment_accepted.send_robust(PaymentTPV.__class__, hash=order.hash) return HttpResponse(status=200) except Exception as e: order.status = PaymentTPV.StatusChoices.ERROR order.observations = str(e) order.save() redsys_payment_rejected.send_robust(PaymentTPV.__class__, hash=order.hash) return HttpResponse(status=409) def order_created(request, order): order = get_object_or_404(PaymentTPV, hash=order) client = RedsysClient() parameters = client.get_body_for_order(order) return render( request, template_name="tpv/order_created.html", context={ "form": UpdateEmailForm({"contact_email": order.contact_email}), "action": reverse("tpv:order_created", kwargs={"order": order.hash}), "order": order, "signature_version": parameters.get("Ds_SignatureVersion"), "merchant_parameters": parameters.get("Ds_MerchantParameters"), "signature": parameters.get("Ds_Signature"), "redsys_target_url": client.get_target_url(), }, )