lingo: distinguish machine and human payment return urls (#8350)
Tests added
This commit is contained in:
parent
017dfb0789
commit
e9102a2b20
|
@ -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$',
|
||||
|
|
|
@ -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):
|
||||
|
|
Loading…
Reference in New Issue