20 |
20 |
import datetime as dt
|
21 |
21 |
import hashlib
|
22 |
22 |
import hmac
|
|
23 |
import random
|
|
24 |
import re
|
23 |
25 |
import string
|
|
26 |
import six
|
24 |
27 |
from six.moves.urllib import parse as urlparse
|
25 |
28 |
import warnings
|
26 |
29 |
from gettext import gettext as _
|
... | ... | |
315 |
318 |
options = add_vads(options)
|
316 |
319 |
self.options = options
|
317 |
320 |
|
|
321 |
def make_vads_trans_id(self):
|
|
322 |
# vads_trans_id must be 6 alphanumeric characters,
|
|
323 |
# trans_id starting with 9 are reserved for the systempay backoffice
|
|
324 |
# https://paiement.systempay.fr/doc/fr-FR/form-payment/reference/vads-trans-id.html
|
|
325 |
gen = random.SystemRandom()
|
|
326 |
if six.PY3:
|
|
327 |
alphabet = string.ascii_letters + string.digits
|
|
328 |
else:
|
|
329 |
alphabet = string.letters + string.digits
|
|
330 |
first_letter_alphabet = alphabet.replace('9', '')
|
|
331 |
vads_trans_id = (
|
|
332 |
gen.choice(first_letter_alphabet)
|
|
333 |
+ ''.join(gen.choice(alphabet) for i in range(5))
|
|
334 |
)
|
|
335 |
return vads_trans_id
|
318 |
336 |
|
319 |
337 |
def request(self, amount, name=None, first_name=None, last_name=None,
|
320 |
338 |
address=None, email=None, phone=None, orderid=None, info1=None,
|
... | ... | |
369 |
387 |
'%s value %s is not of the type %s' % (name, orderid, ptype))
|
370 |
388 |
kwargs[name] = orderid
|
371 |
389 |
|
372 |
|
transaction_id = self.transaction_id(6, string.digits, 'systempay',
|
373 |
|
self.options[VADS_SITE_ID])
|
374 |
|
kwargs[VADS_TRANS_ID] = force_text(transaction_id)
|
|
390 |
vads_trans_id = self.make_vads_trans_id()
|
|
391 |
assert re.match(r'^[0-9a-zA-Z]{6}$', vads_trans_id)
|
|
392 |
|
|
393 |
kwargs[VADS_TRANS_ID] = vads_trans_id
|
375 |
394 |
fields = kwargs
|
376 |
395 |
for parameter in PARAMETERS:
|
377 |
396 |
name = parameter.name
|
... | ... | |
393 |
412 |
check_vads(fields)
|
394 |
413 |
fields[SIGNATURE] = force_text(self.signature(fields))
|
395 |
414 |
self.logger.debug('%s request contains fields: %s', __name__, fields)
|
396 |
|
transaction_id = '%s_%s' % (fields[VADS_TRANS_DATE], transaction_id)
|
|
415 |
transaction_id = '%s_%s' % (fields[VADS_TRANS_DATE], vads_trans_id)
|
397 |
416 |
self.logger.debug('%s transaction id: %s', __name__, transaction_id)
|
398 |
417 |
form = Form(
|
399 |
418 |
url=self.service_url,
|
400 |
|
-
|