From fe53eb36dfcc1c06cf32b95c0a0fef3f5d9d67ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Wed, 11 Oct 2017 10:09:44 +0200 Subject: [PATCH] introduce a new "WAITING" status and use it for ogone (#19358) --- eopayment/__init__.py | 4 ++-- eopayment/common.py | 3 ++- eopayment/ogone.py | 8 +++++++- tests/test_ogone.py | 17 ++++++++++++++++- 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/eopayment/__init__.py b/eopayment/__init__.py index 4858f94..7a15cbc 100644 --- a/eopayment/__init__.py +++ b/eopayment/__init__.py @@ -3,11 +3,11 @@ import logging from common import (URL, HTML, FORM, RECEIVED, ACCEPTED, PAID, DENIED, - CANCELED, CANCELLED, ERROR, ResponseError, force_text) + CANCELED, CANCELLED, ERROR, WAITING, ResponseError, force_text) __all__ = ['Payment', 'URL', 'HTML', 'FORM', 'SIPS', 'SYSTEMPAY', 'SPPLUS', 'TIPI', 'DUMMY', 'get_backend', 'RECEIVED', 'ACCEPTED', -'PAID', 'DENIED', 'CANCELED', 'CANCELLED', 'ERROR', 'get_backends'] +'PAID', 'DENIED', 'CANCELED', 'CANCELLED', 'ERROR', 'WAITING', 'get_backends'] SIPS = 'sips' SIPS2 = 'sips2' diff --git a/eopayment/common.py b/eopayment/common.py index 8881b43..ac37e77 100644 --- a/eopayment/common.py +++ b/eopayment/common.py @@ -6,7 +6,7 @@ import cgi from datetime import date __all__ = ['PaymentCommon', 'URL', 'HTML', 'RANDOM', 'RECEIVED', 'ACCEPTED', - 'PAID', 'ERROR'] + 'PAID', 'ERROR', 'WAITING'] RANDOM = random.SystemRandom() @@ -21,6 +21,7 @@ PAID = 3 DENIED = 4 CANCELLED = 5 CANCELED = 5 # typo for backward compatibility +WAITING = 6 ERROR = 99 # separator between order and transaction ids diff --git a/eopayment/ogone.py b/eopayment/ogone.py index 649e10c..d5e46ea 100644 --- a/eopayment/ogone.py +++ b/eopayment/ogone.py @@ -6,7 +6,7 @@ from decimal import Decimal, ROUND_HALF_UP from common import (PaymentCommon, PaymentResponse, FORM, CANCELLED, PAID, ERROR, Form, DENIED, ACCEPTED, ORDERID_TRANSACTION_SEPARATOR, - ResponseError, force_byte, force_text) + WAITING, ResponseError, force_byte, force_text) def N_(message): return message ENVIRONMENT_TEST = 'TEST' @@ -560,6 +560,12 @@ class Payment(PaymentCommon): result = ACCEPTED elif status == '9': result = PAID + elif len(status) == 2 and status[1] == '1': + # Statuses with two digits represent either ‘intermediary' + # situations or abnormal events. When the second digit is: + # 1, this means the payment processing is on hold. (e.g. + # status 91: payment waiting/pending) + result = WAITING else: self.logger.error('response STATUS=%s NCERROR=%s NCERRORPLUS=%s', status, error, params.get('NCERRORPLUS', '')) diff --git a/tests/test_ogone.py b/tests/test_ogone.py index f13aa6e..025dcdb 100644 --- a/tests/test_ogone.py +++ b/tests/test_ogone.py @@ -72,10 +72,25 @@ class OgoneTests(TestCase): assert response.signed self.assertEqual(response.order_id, order_id) - def test_bad_response(self): ogone_backend = eopayment.Payment('ogone', BACKEND_PARAMS) order_id = 'myorder' data = {'payid': '32100123', 'status': 9, 'ncerror': 0} with self.assertRaises(ResponseError): response = ogone_backend.response(urllib.urlencode(data)) + + def test_bank_transfer_response(self): + ogone_backend = eopayment.Payment('ogone', BACKEND_PARAMS) + order_id = 'myorder' + data = {'orderid': u'myorder', 'status': u'41', 'payid': u'3011229363', + 'cn': u'User', 'ncerror': u'0', + 'trxdate': u'10/24/16', + 'brand': 'Bank transfer', 'pm': 'bank transfer', + 'currency': u'eur', 'amount': u'7.5', + 'shasign': u'0E35F687ACBEAA6CA769E0ADDBD0863EB6C1678A'} + # uniformize to utf-8 first + for k in data: + data[k] = eopayment.common.force_byte(data[k]) + response = ogone_backend.response(urllib.urlencode(data)) + assert response.signed + assert response.result == eopayment.WAITING