From 07d74878c5db9d3b21a7ee8925353271f3532322 Mon Sep 17 00:00:00 2001 From: Thomas Steen Rasmussen Date: Sun, 29 May 2016 10:43:38 +0200 Subject: [PATCH] working on coinify payments --- shop/models.py | 1 + shop/templates/coinify_thanks.html | 13 +++++++++++++ shop/views.py | 24 ++++++++++-------------- 3 files changed, 24 insertions(+), 14 deletions(-) create mode 100644 shop/templates/coinify_thanks.html diff --git a/shop/models.py b/shop/models.py index 112e13a7..e0856334 100644 --- a/shop/models.py +++ b/shop/models.py @@ -240,6 +240,7 @@ class CoinifyAPIInvoice(CreatedUpdatedModel): class CoinifyCallback(CreatedUpdatedModel): payload = JSONField() + order = models.ForeignKey('shop.Order') def __str__(self): return 'callback at %s' % self.created diff --git a/shop/templates/coinify_thanks.html b/shop/templates/coinify_thanks.html new file mode 100644 index 00000000..ce820c1e --- /dev/null +++ b/shop/templates/coinify_thanks.html @@ -0,0 +1,13 @@ +{% extends 'shop_base.html' %} +{% load bootstrap3 %} + +{% block shop_content %} +

Thank you for your payment!

+

+{% if order.paid %} +Thank you for your payment. Your order has been marked as paid. +{% else %} +Thank you for your payment. Your order will be marked as paid as soon as we register a callback from our payment provider.

+{% endif %} +

+{% endblock %} diff --git a/shop/views.py b/shop/views.py index d9ce3aa5..1e217196 100644 --- a/shop/views.py +++ b/shop/views.py @@ -306,20 +306,10 @@ class EpayCallbackView(View): return HttpResponse('OK') -class EpayThanksView(LoginRequiredMixin, EnsureUserOwnsOrderMixin, DetailView): +class EpayThanksView(LoginRequiredMixin, EnsureUserOwnsOrderMixin, EnsureClosedOrderMixin, DetailView): model = Order template_name = 'epay_thanks.html' - def dispatch(self, request, *args, **kwargs): - order = self.get_object() - if order.open: - ### this order is open, what is the user doing here? - return HttpResponseRedirect(reverse_lazy('shop:order_detail', kwargs={'pk': order.pk})) - - return super(EpayThanksView, self).dispatch( - request, *args, **kwargs - ) - class BankTransferView(LoginRequiredMixin, EnsureUserOwnsOrderMixin, EnsureUnpaidOrderMixin, EnsureOrderHasProductsMixin, DetailView): model = Order @@ -375,9 +365,9 @@ class CoinifyRedirectView(LoginRequiredMixin, EnsureUserOwnsOrderMixin, EnsureUn return context -class CoinifyCallbackView(View): +class CoinifyCallbackView(SingleObjectMixin, View): def post(self, request, *args, **kwargs): - # Get the signature from the HTTP or email headers + # Get the signature from the HTTP headers signature = request.META['HTTP_X_COINIFY_CALLBACK_SIGNATURE'] sdk = CoinifyCallback( settings.COINIFY_API_KEY, @@ -387,7 +377,8 @@ class CoinifyCallbackView(View): if sdk.validate_callback(request.body, signature): # callback is valid, save it to db callbackobject = CoinifyCallback.objects.create( - payload=request.body + payload=request.body, + order=self.get_object() ) # parse json @@ -411,3 +402,8 @@ class CoinifyCallbackView(View): else: HttpResponseBadRequest('something is fucky') + +class CoinifyThanksView(LoginRequiredMixin, EnsureUserOwnsOrderMixin, EnsureClosedOrderMixin, DetailView): + model = Order + template_name = 'coinify_thanks.html' +