lingo: distinguish machine and human payment return urls (#8350)

Tests added
This commit is contained in:
Serghei Mihai 2015-10-13 12:29:53 +02:00 committed by Frédéric Péters
parent 017dfb0789
commit e9102a2b20
2 changed files with 32 additions and 8 deletions

View File

@ -19,7 +19,7 @@ from django.conf.urls import patterns, url, include
from combo.urls_utils import decorated_includes, manager_required
from .views import (RegiesApiView, AddBasketItemApiView, PayView, CallbackView,
ItemDownloadView, ItemView)
ReturnView, ItemDownloadView, ItemView)
from .manager_views import (RegieListView, RegieCreateView, RegieUpdateView,
RegieDeleteView)
@ -38,6 +38,7 @@ urlpatterns = patterns('',
name='api-add-basket-item'),
url('^lingo/pay$', PayView.as_view(), name='lingo-pay'),
url(r'^lingo/callback/(?P<regie_pk>\w+)/$', CallbackView.as_view(), name='lingo-callback'),
url(r'^lingo/return/(?P<regie_pk>\w+)/$', ReturnView.as_view(), name='lingo-return'),
url(r'^manage/lingo/', decorated_includes(manager_required,
include(lingo_manager_urls))),
url(r'^lingo/item/(?P<regie_id>[\w,-]+)/(?P<item_id>[\w,-]+)/pdf$',

View File

@ -141,11 +141,7 @@ class PayView(View):
reverse('lingo-callback', kwargs={'regie_pk': regie.id}))
(order_id, kind, data) = payment.request(total_amount,
email=request.user.email,
next_url=request.build_absolute_uri('/'),
accepturl=return_url,
declineurl=return_url,
exceptionurl=return_url,
cancelurl=return_url)
next_url=return_url)
transaction.order_id = order_id
transaction.save()
@ -178,7 +174,7 @@ class CallbackView(View):
assert transaction.regie == regie
if payment_response.result != eopayment.PAID:
return HttpResponseRedirect('/')
return HttpResponse()
for item in transaction.items.all():
item.payment_date = transaction.end_date
@ -192,7 +188,34 @@ class CallbackView(View):
for item in transaction.remote_items.split(','):
regie.pay_item(request, item)
return HttpResponseRedirect('/')
return HttpResponse()
class ReturnView(View):
def get(self, request, *args, **kwargs):
regie = Regie.objects.get(id=kwargs.get('regie_pk'))
payment = eopayment.Payment(regie.service, regie.service_options)
try:
payment_response = payment.response(request.environ['QUERY_STRING'])
except:
# if eopayment can't get response from query string redirect to
# homepage
return HttpResponseRedirect('/')
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}))
class ItemDownloadView(View):