lingo: use new eopayment common options for return/callback URLs (#9910)
This commit is contained in:
parent
967a9c0681
commit
465729829e
|
@ -38,6 +38,17 @@ except ImportError:
|
|||
|
||||
from .models import Regie, BasketItem, Transaction
|
||||
|
||||
def get_eopayment_object(request, regie):
|
||||
options = regie.service_options
|
||||
options.update({
|
||||
'automatic_return_url': request.build_absolute_uri(
|
||||
reverse('lingo-callback', kwargs={'regie_pk': regie.id})),
|
||||
'normal_return_url': request.build_absolute_uri(
|
||||
reverse('lingo-return', kwargs={'regie_pk': regie.id})),
|
||||
})
|
||||
return eopayment.Payment(regie.service, options)
|
||||
|
||||
|
||||
class RegiesApiView(ListView):
|
||||
model = Regie
|
||||
|
||||
|
@ -157,12 +168,9 @@ class PayView(View):
|
|||
if total_amount < regie.payment_min_amount:
|
||||
return HttpResponseForbidden()
|
||||
|
||||
payment = eopayment.Payment(regie.service, regie.service_options)
|
||||
return_url = request.build_absolute_uri(
|
||||
reverse('lingo-callback', kwargs={'regie_pk': regie.id}))
|
||||
payment = get_eopayment_object(request, regie)
|
||||
(order_id, kind, data) = payment.request(total_amount,
|
||||
email=request.user.email,
|
||||
next_url=return_url)
|
||||
email=request.user.email)
|
||||
transaction.order_id = order_id
|
||||
transaction.save()
|
||||
if next_url:
|
||||
|
@ -184,7 +192,7 @@ class PayView(View):
|
|||
class CallbackView(View):
|
||||
def handle_callback(self, request, backend_response, **kwargs):
|
||||
regie = Regie.objects.get(id=kwargs.get('regie_pk'))
|
||||
payment = eopayment.Payment(regie.service, regie.service_options)
|
||||
payment = get_eopayment_object(request, regie)
|
||||
payment_response = payment.response(backend_response)
|
||||
if not payment_response.result == eopayment.CANCELLED:
|
||||
# cancellation are not signed...
|
||||
|
@ -229,12 +237,21 @@ class CallbackView(View):
|
|||
|
||||
|
||||
class ReturnView(View):
|
||||
@csrf_exempt
|
||||
def dispatch(self, *args, **kwargs):
|
||||
return super(ReturnView, self).dispatch(*args, **kwargs)
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
return self.handle_return(request, request.environ['QUERY_STRING'], **kwargs)
|
||||
|
||||
def post(self, request, *args, **kwargs):
|
||||
return self.handle_return(request, request.body, **kwargs)
|
||||
|
||||
def handle_return(self, request, backend_response, **kwargs):
|
||||
regie = Regie.objects.get(id=kwargs.get('regie_pk'))
|
||||
payment = eopayment.Payment(regie.service, regie.service_options)
|
||||
payment = get_eopayment_object(request, regie)
|
||||
try:
|
||||
payment_response = payment.response(request.environ['QUERY_STRING'])
|
||||
payment_response = payment.response(backend_response)
|
||||
except:
|
||||
# if eopayment can't get response from query string redirect to
|
||||
# homepage
|
||||
|
|
|
@ -81,8 +81,15 @@ def test_successfull_items_payment(regie, user):
|
|||
qs = urlparse.parse_qs(parsed.query)
|
||||
args = {'transaction_id': qs['transaction_id'][0], 'signed': True,
|
||||
'ok': True, 'reason': 'Paid'}
|
||||
# simulate backend callback call
|
||||
# make sure return url is the user return URL
|
||||
assert urlparse.urlparse(qs['return_url'][0]).path.startswith(
|
||||
reverse('lingo-return', kwargs={'regie_pk': regie.id}))
|
||||
# simulate successful return URL
|
||||
resp = client.get(qs['return_url'][0], args)
|
||||
assert resp.status_code == 302
|
||||
assert urlparse.urlparse(resp.url).path == '/'
|
||||
# simulate successful call to callback URL
|
||||
resp = client.get(reverse('lingo-callback', kwargs={'regie_pk': regie.id}), args)
|
||||
assert resp.status_code == 200
|
||||
|
||||
def test_add_amount_to_basket(regie, user):
|
||||
|
@ -130,7 +137,8 @@ def test_payment_callback(regie, user):
|
|||
'amount': qs['amount'][0], 'ok': True}
|
||||
|
||||
# call callback with GET
|
||||
get_resp = client.get(qs['return_url'][0], data)
|
||||
callback_url = reverse('lingo-callback', kwargs={'regie_pk': regie.id})
|
||||
get_resp = client.get(callback_url, data)
|
||||
assert get_resp.status_code == 200
|
||||
assert Transaction.objects.get(order_id=transaction_id).status == 3
|
||||
|
||||
|
@ -145,7 +153,7 @@ def test_payment_callback(regie, user):
|
|||
'amount': qs['amount'][0], 'ok': True}
|
||||
|
||||
# call callback with POST
|
||||
post_resp = client.post(qs['return_url'][0], urllib.urlencode(data),
|
||||
post_resp = client.post(callback_url, urllib.urlencode(data),
|
||||
content_type='text/html')
|
||||
assert post_resp.status_code == 200
|
||||
assert Transaction.objects.get(order_id=transaction_id).status == 3
|
||||
|
|
Loading…
Reference in New Issue