20 |
20 |
import datetime as dt
|
21 |
21 |
import hashlib
|
22 |
22 |
import hmac
|
|
23 |
import random
|
23 |
24 |
import string
|
|
25 |
import six
|
24 |
26 |
from six.moves.urllib import parse as urlparse
|
25 |
27 |
import warnings
|
26 |
28 |
from gettext import gettext as _
|
... | ... | |
156 |
158 |
Parameter('vads_theme_config', 'ans', 32, max_length=255),
|
157 |
159 |
Parameter(VADS_TRANS_DATE, 'n', 4, length=14, needed=True,
|
158 |
160 |
default=isonow),
|
159 |
|
Parameter('vads_trans_id', 'n', 3, length=6, needed=True),
|
|
161 |
# https://paiement.systempay.fr/doc/fr-FR/form-payment/reference/vads-trans-id.html
|
|
162 |
Parameter('vads_trans_id', 'an', 3, length=6, needed=True),
|
160 |
163 |
Parameter('vads_validation_mode', 'n', 5, max_length=1, choices=('', '0', '1'),
|
161 |
164 |
default=''),
|
162 |
165 |
Parameter('vads_version', 'an', 1, default='V2', needed=True,
|
... | ... | |
314 |
317 |
options = add_vads(options)
|
315 |
318 |
self.options = options
|
316 |
319 |
|
|
320 |
def make_vads_trans_id(self):
|
|
321 |
# vads_trans_id must be 6 alphanumeric characters,
|
|
322 |
# trans_id starting with 9 are reserved for the systempay backoffice
|
|
323 |
# https://paiement.systempay.fr/doc/fr-FR/form-payment/reference/vads-trans-id.html
|
|
324 |
gen = random.SystemRandom()
|
|
325 |
if six.PY3:
|
|
326 |
alphabet = string.ascii_letters + string.digits
|
|
327 |
else:
|
|
328 |
alphabet = string.letters + string.digits
|
|
329 |
first_letter_alphabet = alphabet.replace('9', '')
|
|
330 |
vads_trans_id = (
|
|
331 |
gen.choice(first_letter_alphabet)
|
|
332 |
+ ''.join(gen.choice(alphabet) for i in range(5))
|
|
333 |
)
|
|
334 |
return vads_trans_id
|
317 |
335 |
|
318 |
336 |
def request(self, amount, name=None, first_name=None, last_name=None,
|
319 |
337 |
address=None, email=None, phone=None, orderid=None, info1=None,
|
... | ... | |
368 |
386 |
'%s value %s is not of the type %s' % (name, orderid, ptype))
|
369 |
387 |
kwargs[name] = orderid
|
370 |
388 |
|
371 |
|
transaction_id = self.transaction_id(6, string.digits, 'systempay',
|
372 |
|
self.options[VADS_SITE_ID])
|
373 |
|
kwargs[VADS_TRANS_ID] = force_text(transaction_id)
|
|
389 |
vads_trans_id = self.make_vads_trans_id()
|
|
390 |
kwargs[VADS_TRANS_ID] = vads_trans_id
|
374 |
391 |
fields = kwargs
|
375 |
392 |
for parameter in PARAMETERS:
|
376 |
393 |
name = parameter.name
|
... | ... | |
392 |
409 |
check_vads(fields)
|
393 |
410 |
fields[SIGNATURE] = force_text(self.signature(fields))
|
394 |
411 |
self.logger.debug('%s request contains fields: %s', __name__, fields)
|
395 |
|
transaction_id = '%s_%s' % (fields[VADS_TRANS_DATE], transaction_id)
|
|
412 |
transaction_id = '%s_%s' % (fields[VADS_TRANS_DATE], vads_trans_id)
|
396 |
413 |
self.logger.debug('%s transaction id: %s', __name__, transaction_id)
|
397 |
414 |
form = Form(
|
398 |
415 |
url=self.service_url,
|
399 |
|
-
|