lingo: return url redirects to the page that initiated the payment (#9854)
This commit is contained in:
parent
72c4b68247
commit
967a9c0681
|
@ -3,6 +3,7 @@
|
|||
<h2>{% trans "Basket" %}</h2>
|
||||
<form action="{% url 'lingo-pay' %}" method="POST">
|
||||
{% csrf_token %}
|
||||
<input type="hidden" name="next_url" value="{{ cell.page.get_online_url }}" />
|
||||
<ul>
|
||||
{% for item in items %}
|
||||
<li><label><input type="checkbox" name="item" value="{{ item.id }}" checked/> {{ item.subject }}: {{ item.amount }} €</label> (<a href="{{ item.source_url}}">voir</a>)</li>
|
||||
|
|
|
@ -117,6 +117,7 @@ class AddBasketItemApiView(View):
|
|||
class PayView(View):
|
||||
def post(self, request, *args, **kwargs):
|
||||
regie_id = request.POST.get('regie')
|
||||
next_url = request.POST.get('next_url')
|
||||
if regie_id:
|
||||
regie = Regie.objects.get(pk=regie_id)
|
||||
if regie.is_remote():
|
||||
|
@ -164,6 +165,11 @@ class PayView(View):
|
|||
next_url=return_url)
|
||||
transaction.order_id = order_id
|
||||
transaction.save()
|
||||
if next_url:
|
||||
# store the next url in session in order to be able to redirect to
|
||||
# it if payment is canceled
|
||||
request.session.setdefault('lingo_next_url',
|
||||
{})[transaction.order_id] = request.build_absolute_uri(next_url)
|
||||
|
||||
# XXX: mark basket items as being processed (?)
|
||||
|
||||
|
@ -236,17 +242,11 @@ class ReturnView(View):
|
|||
|
||||
transaction = Transaction.objects.get(order_id=payment_response.order_id)
|
||||
|
||||
if transaction.items:
|
||||
# redirect to first transaction local item view
|
||||
return HttpResponseRedirect(reverse('view-item',
|
||||
kwargs={'regie_id': regie.pk,
|
||||
'item_id': transaction.items[0].id}))
|
||||
if transaction.remote_items:
|
||||
# redirect to first transaction remote item view
|
||||
item = transaction.remote_items.split(',')[0]
|
||||
return HttpResponseRedirect(reverse('view-item',
|
||||
kwargs={'regie_id': regie.pk,
|
||||
'item_id': item.id}))
|
||||
if request.session.get('lingo_next_url'):
|
||||
redirect_url = request.session['lingo_next_url'].get(transaction.order_id, '/')
|
||||
return HttpResponseRedirect(redirect_url)
|
||||
|
||||
return HttpResponseRedirect('/')
|
||||
|
||||
|
||||
class ItemDownloadView(View):
|
||||
|
|
|
@ -149,3 +149,7 @@ def test_payment_callback(regie, user):
|
|||
content_type='text/html')
|
||||
assert post_resp.status_code == 200
|
||||
assert Transaction.objects.get(order_id=transaction_id).status == 3
|
||||
|
||||
# call return view
|
||||
get_resp = client.get(reverse('lingo-return', kwargs={'regie_pk': regie.pk}), data)
|
||||
assert get_resp.status_code == 302
|
||||
|
|
Loading…
Reference in New Issue