75 lines
2.2 KiB
Python
75 lines
2.2 KiB
Python
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(),
|
|
},
|
|
)
|