From 8c0def0c29fcbb1096924b7d225f55bca32cc317 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Tue, 3 Nov 2015 23:16:40 +0100 Subject: [PATCH] implement payzen backend by inheriting systempayv2 (fixes #8854) --- eopayment/__init__.py | 3 ++- eopayment/payzen.py | 12 ++++++++++++ eopayment/systempayv2.py | 22 +++++++++++----------- 3 files changed, 25 insertions(+), 12 deletions(-) create mode 100644 eopayment/payzen.py diff --git a/eopayment/__init__.py b/eopayment/__init__.py index 095096d..41e5d44 100644 --- a/eopayment/__init__.py +++ b/eopayment/__init__.py @@ -15,6 +15,7 @@ TIPI = 'tipi' DUMMY = 'dummy' OGONE = 'ogone' PAYBOX = 'paybox' +PAYZEN = 'payzen' def get_backend(kind): @@ -22,7 +23,7 @@ def get_backend(kind): module = __import__(kind, globals(), locals(), []) return module.Payment -__BACKENDS = [ DUMMY, SIPS, SYSTEMPAY, SPPLUS, OGONE, PAYBOX ] +__BACKENDS = [ DUMMY, SIPS, SYSTEMPAY, SPPLUS, OGONE, PAYBOX, PAYZEN ] def get_backends(): '''Return a dictionnary mapping existing eopayment backends name to their diff --git a/eopayment/payzen.py b/eopayment/payzen.py new file mode 100644 index 0000000..cb33ce8 --- /dev/null +++ b/eopayment/payzen.py @@ -0,0 +1,12 @@ +from copy import deepcopy + +from . import systempayv2 + +__all__ = ['Payment'] + +class Payment(systempayv2.Payment): + service_url = 'https://secure.payzen.eu/vads-payment/' + + description = deepcopy(systempayv2.Payment.description) + description['caption'] = 'PayZen' + description['parameters'][0]['name'] = service_url diff --git a/eopayment/systempayv2.py b/eopayment/systempayv2.py index 54b5ae0..f975b16 100644 --- a/eopayment/systempayv2.py +++ b/eopayment/systempayv2.py @@ -12,8 +12,6 @@ from cb import CB_RESPONSE_CODES __all__ = ['Payment'] -SERVICE_URL = "https://paiement.systempay.fr/vads-payment/" -LOGGER = logging.getLogger(__name__) VADS_TRANS_DATE = 'vads_trans_date' VADS_AUTH_NUMBER = 'vads_auth_number' VADS_AUTH_RESULT = 'vads_auth_result' @@ -211,22 +209,24 @@ class Payment(PaymentCommon): 'vads_return_mode': 'NONE'}) ''' + service_url = "https://paiement.systempay.fr/vads-payment/" + description = { 'caption': 'SystemPay, système de paiment du groupe BPCE', 'parameters': [ {'name': 'service_url', - 'default': SERVICE_URL, + 'default': service_url, 'caption': _(u'URL du service de paiment'), 'help_text': _(u'ne pas modifier si vous ne savez pas'), 'validation': lambda x: x.startswith('http'), 'required': True, }, {'name': 'secret_test', 'caption': _(u'Secret pour la configuration de TEST'), - 'validation': str.isdigit, + 'validation': lambda value: str.isdigit(value), 'required': True, }, {'name': 'secret_production', 'caption': _(u'Secret pour la configuration de PRODUCTION'), - 'validation': str.isdigit, }, + 'validation': lambda value: str.isdigit(value), }, ] } @@ -236,20 +236,20 @@ class Payment(PaymentCommon): parameter = PARAMETER_MAP[name] x = {'name': name, 'caption': parameter.description or name, - 'validation': parameter.check_value, + 'validation': lambda value: parameter.check_value(value), 'default': parameter.default, 'required': parameter.needed, 'help_text': parameter.help_text, 'max_length': parameter.max_length} description['parameters'].append(x) - def __init__(self, options, logger=LOGGER): - self.service_url = options.pop('service_url', SERVICE_URL) + def __init__(self, options, logger=None): + self.service_url = options.pop('service_url', self.service_url) self.secret_test = options.pop('secret_test') self.secret_production = options.pop('secret_production', None) options = add_vads(options) self.options = options - self.logger = logger + self.logger = logger or logging.getLogger(__name__) def request(self, amount, name=None, address=None, email=None, phone=None, info1=None, info2=None, info3=None, next_url=None, **kwargs): @@ -304,7 +304,7 @@ class Payment(PaymentCommon): transaction_id = '%s_%s' % (fields[VADS_TRANS_DATE], transaction_id) self.logger.debug('%s transaction id: %s', __name__, transaction_id) form = Form( - url=SERVICE_URL, + url=self.service_url, method='POST', fields=[{'type': 'hidden', 'name': name, @@ -379,7 +379,7 @@ class Payment(PaymentCommon): secret = getattr(self, 'secret_%s' % fields['vads_ctx_mode'].lower()) signed_data = '+'.join(ordered_fields) signed_data = '%s+%s' % (signed_data, secret) - self.logger.debug('generating signature on «%s»' % signed_data) + self.logger.debug(u'generating signature on «%s»' % signed_data) sign = hashlib.sha1(signed_data).hexdigest() self.logger.debug('signature «%s»' % sign) return sign