diff --git a/eopayment/common.py b/eopayment/common.py index 1aa1ac2..a428f98 100644 --- a/eopayment/common.py +++ b/eopayment/common.py @@ -108,13 +108,15 @@ class PaymentCommon(object): class Form(object): def __init__(self, url, method, fields, encoding='utf-8', - submit_name='Submit', submit_value='Submit'): + submit_name='Submit', submit_value='Submit', + submit_css=None): self.url = url self.method = method self.fields = fields self.encoding = encoding self.submit_name = submit_name self.submit_value = submit_value + self.submit_css = submit_css def __repr__(self): s = '
' % (self.method, self.url) @@ -130,6 +132,9 @@ class Form(object): if self.submit_value: s += ' value="%s"' % cgi.escape( self.submit_value.encode(self.encoding)) + if self.submit_css: + s += ' class="%s"' % cgi.escape( + self.submit_css.encode(self.encoding)) s += ' />' s += '\n
' return s diff --git a/eopayment/paybox.py b/eopayment/paybox.py index 20e3b43..02e7d83 100644 --- a/eopayment/paybox.py +++ b/eopayment/paybox.py @@ -189,6 +189,23 @@ class Payment(PaymentCommon): 'name': 'callback', 'caption': _('Callback URL'), }, + { + 'name': 'callback_method', + 'caption': _('Method used for callback URL'), + 'default': 'GET', + }, + { + 'name': 'return_url', + 'caption': _('Return URL after transaction') + }, + { + 'name': 'payment_type', + 'caption': _('Payment type') + }, + { + 'name': 'card_type', + 'caption': 'Card type' + } ] } @@ -204,12 +221,25 @@ class Payment(PaymentCommon): self.rang, self.identifiant) d['PBX_CMD'] = unicode(transaction_id) d['PBX_PORTEUR'] = unicode(email) - d['PBX_RETOUR'] = 'montant:M;reference:R;code_autorisation:A;erreur:E;signature:K' + d['PBX_RETOUR'] = ( + 'montant:M;reference:R;code_autorisation:A;erreur:E;signature:K;' + 'date:W;heure:Q' + ) d['PBX_HASH'] = 'SHA512' - d['PBX_TIME'] = kwargs.get('time') or (unicode(datetime.datetime.utcnow().isoformat('T')).split('.')[0]+'+00:00') + d['PBX_TIME'] = kwargs.get('time') or ( + unicode(datetime.datetime.utcnow().isoformat('T')) + .split('.')[0]+'+00:00') d['PBX_ARCHIVAGE'] = transaction_id if self.callback: d['PBX_REPONDRE_A'] = unicode(self.callback) + d['PBX_RUF1'] = unicode(self.callback_method) + if self.payment_type and self.card_type: + d['PBX_TYPEPAIEMENT'] = self.payment_type + d['PBX_TYPECARTE'] = self.card_type + if self.return_url: + for key in [ + 'PBX_EFFECTUE', 'PBX_REFUSE', 'PBX_ANNULE', 'PBX_ATTENTE']: + d[key] = self.return_url d = d.items() d = sign(d, self.shared_secret.decode('hex')) url = URLS[self.platform] @@ -220,8 +250,11 @@ class Payment(PaymentCommon): 'name': unicode(k), 'value': unicode(v), }) + submit_value = kwargs.get("submit_value", u"Envoyer") + submit_css = kwargs.get("submit_css") form = Form(url, 'POST', fields, submit_name=None, - submit_value=u'Envoyer', encoding='utf-8') + submit_value=submit_value, submit_css=submit_css, + encoding='utf-8') return transaction_id, FORM, form def response(self, query_string, callback=False, **kwargs): @@ -237,7 +270,7 @@ class Payment(PaymentCommon): data.append('%s=%s' % (key, urllib.quote(d[key][0]))) else: for key, value in urlparse.parse_qsl(query_string, True, True): - if key == 'signature': + if key == 'heure': break data.append('%s=%s' % (key, urllib.quote(value))) data = '&'.join(data) diff --git a/eopayment/systempayv2.py b/eopayment/systempayv2.py index f975b16..1a2f780 100644 --- a/eopayment/systempayv2.py +++ b/eopayment/systempayv2.py @@ -81,7 +81,7 @@ PARAMETERS = [ Parameter('vads_capture_delay', 'n', 6, max_length=3, default=''), Parameter('vads_contrib', 'ans', 31, max_length=255, default='eopayment'), # defaut currency = EURO, norme ISO4217 - Parameter('vads_currency', 'n', 10, length=3, default=978, needed=True), + Parameter('vads_currency', 'n', 10, length=3, default='978', needed=True), Parameter('vads_cust_address', 'an', 19, max_length=255), # code ISO 3166 Parameter('vads_cust_country', 'a', 22, length=2, default='FR'), @@ -304,11 +304,14 @@ 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=self.service_url, - method='POST', - fields=[{'type': 'hidden', - 'name': name, - 'value': value} for name, value in fields.iteritems()]) + url=self.service_url, + method='POST', + fields=[{'type': 'hidden', + 'name': name, + 'value': value} for name, value in fields.iteritems()], + submit_value=kwargs.get('submit_value', 'Submit'), + submit_css=kwargs.get('submit_css') + ) return transaction_id, FORM, form def response(self, query_string, **kwargs):