implement payzen backend by inheriting systempayv2 (fixes #8854)

This commit is contained in:
Benjamin Dauvergne 2015-11-03 23:16:40 +01:00 committed by Serghei Mihai
parent 9cc7479088
commit 8c0def0c29
3 changed files with 25 additions and 12 deletions

View File

@ -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

12
eopayment/payzen.py Normal file
View File

@ -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

View File

@ -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