From cf89e3c00e8350993d7afc7fe1adcbd7dbc4e954 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Sat, 10 Oct 2020 09:01:42 +0200 Subject: [PATCH 3/4] lingo: pass reference_id to eopayment as orderid for unique item payment (#47506) --- combo/apps/lingo/views.py | 22 ++++++++++++++++++++++ tests/test_lingo_payment.py | 4 +++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/combo/apps/lingo/views.py b/combo/apps/lingo/views.py index b1de5bd6..e9ae0d34 100644 --- a/combo/apps/lingo/views.py +++ b/combo/apps/lingo/views.py @@ -417,6 +417,28 @@ class PayMixin(object): item = (items or remote_items)[0] kwargs['subject'] = item.subject + + # merchant command reference, handling by different backends : + # + # dummy : in the 'orderid' query-string field, free format + # + # paybox: prefix of the PBX_CMD form field, free format, + # separated from the transaction_id by '|' + # + # payzen,systempayv2: in the vads_order_id, format is alphan-numeric + '-', + # could be 9-character alpha numeric form some systempayv2 + # backends + # + # tipi/payfip_ws: ignored, use exer/refdet instead + # + # sips2: in the Data form field, encoded as |orderId=| + # + # ogone: prefix of the ORDERID form field, separated from the transaction_id reference by '|' + # + # mollie,keyware: ignored + if item.reference_id: + kwargs['orderid'] = item.reference_id + # allow easy testing/use of backend specific keyword arguments EOPAYMENT_REQUEST_KWARGS_PREFIX = 'eopayment_request_kwargs_' if hasattr(item, 'request_data'): diff --git a/tests/test_lingo_payment.py b/tests/test_lingo_payment.py index 27113a5a..172aae3f 100644 --- a/tests/test_lingo_payment.py +++ b/tests/test_lingo_payment.py @@ -1556,7 +1556,8 @@ def mono_regie(regie): def test_successfull_items_can_pay_only_one_basket_item(app, basket_page, mono_regie, user): - item = BasketItem.objects.create(user=user, regie=mono_regie, amount=42, subject='foo item') + item = BasketItem.objects.create(user=user, regie=mono_regie, amount=42, subject='foo item', + reference_id='form-3-23') BasketItem.objects.create(user=user, regie=mono_regie, amount=84, subject='bar item') resp = login(app).get('/test_basket_cell/') @@ -1568,6 +1569,7 @@ def test_successfull_items_can_pay_only_one_basket_item(app, basket_page, mono_r # successful payment qs = urlparse.parse_qs(urlparse.urlparse(resp.location).query) assert qs['subject'][0] == 'foo item', 'item.subject was not provided to eopayment' + assert qs['orderid'][0] == 'form-3-23' args = {'transaction_id': qs['transaction_id'][0], 'signed': True, 'ok': True, 'reason': 'Paid'} with mock.patch('combo.utils.requests_wrapper.RequestsSession.request'): resp = app.get(get_url(True, 'lingo-callback', mono_regie), params=args) -- 2.28.0