0001-systempayv2-add-support-for-chosen-transaction_id-48.patch
eopayment/__init__.py | ||
---|---|---|
228 | 228 |
continue |
229 | 229 |
res.append(param) |
230 | 230 |
return res |
231 | ||
232 |
@property |
|
233 |
def has_free_transaction_id(self): |
|
234 |
return self.backend.has_free_transaction_id |
eopayment/common.py | ||
---|---|---|
140 | 140 | |
141 | 141 | |
142 | 142 |
class PaymentCommon(object): |
143 |
has_free_transaction_id = False |
|
144 | ||
143 | 145 |
PATH = '/tmp' |
144 | 146 |
BANK_ID = '__bank_id' |
145 | 147 |
eopayment/systempayv2.py | ||
---|---|---|
54 | 54 |
SIGNATURE = 'signature' |
55 | 55 |
VADS_CTX_MODE = 'vads_ctx_mode' |
56 | 56 |
VADS_EFFECTIVE_CREATION_DATE = 'vads_effective_creation_date' |
57 |
VADS_EOPAYMENT_TRANS_ID = 'vads_ext_info_eopayment_trans_id' |
|
57 | 58 | |
58 | 59 | |
59 | 60 |
def isonow(): |
... | ... | |
179 | 180 |
PARAMETER_MAP = dict(((parameter.name, |
180 | 181 |
parameter) for parameter in PARAMETERS)) |
181 | 182 | |
183 | ||
182 | 184 |
def add_vads(kwargs): |
183 | 185 |
new_vargs = {} |
184 | 186 |
for k, v in kwargs.items(): |
... | ... | |
222 | 224 |
'vads_return_mode': 'NONE'}) |
223 | 225 | |
224 | 226 |
''' |
227 |
has_free_transaction_id = True |
|
225 | 228 |
service_url = "https://paiement.systempay.fr/vads-payment/" |
226 | 229 |
signature_algo = 'sha1' |
227 | 230 | |
... | ... | |
312 | 315 |
def request(self, amount, name=None, first_name=None, last_name=None, |
313 | 316 |
address=None, email=None, phone=None, orderid=None, info1=None, |
314 | 317 |
info2=None, info3=None, next_url=None, manual_validation=None, |
315 |
**kwargs): |
|
318 |
transaction_id=None, **kwargs):
|
|
316 | 319 |
''' |
317 | 320 |
Create the URL string to send a request to SystemPay |
318 | 321 |
''' |
... | ... | |
385 | 388 |
if manual_validation: |
386 | 389 |
fields['vads_validation_mode'] = '1' |
387 | 390 |
check_vads(fields) |
391 |
if transaction_id: |
|
392 |
fields[VADS_EOPAYMENT_TRANS_ID] = transaction_id |
|
393 |
else: |
|
394 |
transaction_id = '%s_%s' % (fields[VADS_TRANS_DATE], vads_trans_id) |
|
388 | 395 |
fields[SIGNATURE] = force_text(self.signature(fields)) |
389 | 396 |
self.logger.debug('%s request contains fields: %s', __name__, fields) |
390 |
transaction_id = '%s_%s' % (fields[VADS_TRANS_DATE], vads_trans_id) |
|
391 | 397 |
self.logger.debug('%s transaction id: %s', __name__, transaction_id) |
392 | 398 |
form = Form( |
393 | 399 |
url=self.service_url, |
... | ... | |
487 | 493 |
message += ' signature invalide.' |
488 | 494 | |
489 | 495 |
test = fields[VADS_CTX_MODE] == 'TEST' |
490 |
transaction_id = '%s_%s' % (copy[VADS_TRANS_DATE], copy[VADS_TRANS_ID]) |
|
496 |
if VADS_EOPAYMENT_TRANS_ID in fields: |
|
497 |
transaction_id = fields[VADS_EOPAYMENT_TRANS_ID] |
|
498 |
else: |
|
499 |
transaction_id = '%s_%s' % (copy[VADS_TRANS_DATE], copy[VADS_TRANS_ID]) |
|
491 | 500 |
# the VADS_AUTH_NUMBER is the number to match payment in bank logs |
492 | 501 |
copy[self.BANK_ID] = copy.get(VADS_AUTH_NUMBER, '') |
493 | 502 |
transaction_date = None |
... | ... | |
498 | 507 |
signed=signature_result, |
499 | 508 |
bank_data=copy, |
500 | 509 |
order_id=transaction_id, |
501 |
transaction_id=copy.get(VADS_AUTH_NUMBER),
|
|
510 |
transaction_id=transaction_id,
|
|
502 | 511 |
bank_status=message, |
503 | 512 |
transaction_date=transaction_date, |
504 | 513 |
test=test) |
tests/test_systempayv2.py | ||
---|---|---|
35 | 35 |
} |
36 | 36 | |
37 | 37 | |
38 |
@pytest.fixture |
|
39 |
def backend(): |
|
40 |
return eopayment.Payment('systempayv2', PARAMS) |
|
41 | ||
42 | ||
38 | 43 |
def get_field(form, field_name): |
39 | 44 |
for field in form.fields: |
40 | 45 |
if field['name'] == field_name: |
... | ... | |
167 | 172 |
data['manual_validation'] = False |
168 | 173 |
transaction_id, f, form = backend.request(**data.copy()) |
169 | 174 |
assert get_field(form, 'vads_validation_mode')['value'] == '' |
175 | ||
176 |
FIXED_TRANSACTION_ID = '1234' |
|
177 | ||
178 |
def test_transaction_id_request(backend): |
|
179 |
transaction_id, kind, form = backend.request(10.0, transaction_id=FIXED_TRANSACTION_ID) |
|
180 |
assert transaction_id == FIXED_TRANSACTION_ID |
|
181 |
found = None |
|
182 |
for field in form.fields: |
|
183 |
if field['name'] == 'vads_ext_info_eopayment_trans_id': |
|
184 |
found = field |
|
185 |
break |
|
186 |
assert found |
|
187 |
assert found['value'] == FIXED_TRANSACTION_ID |
|
188 | ||
189 | ||
190 |
def test_transaction_id_response(backend, caplog): |
|
191 |
caplog.set_level(0) |
|
192 |
response = '''vads_amount=1000&vads_auth_mode=FULL&vads_auth_number=3fcdd2&vads_auth_result=00&vads_capture_delay=0&vads_card_brand=CB&vads_card_number=597010XXXXXX0018&vads_payment_certificate=4db13859ab429cb6b9bae7546952846efd190e3a&vads_ctx_mode=TEST&vads_currency=978&vads_effective_amount=1000&vads_effective_currency=978&vads_site_id=51438584&vads_trans_date=20201027212030&vads_trans_id=sDJJeQ&vads_trans_uuid=368ef4d0822448e3a2e7413c4e9f8be8&vads_validation_mode=0&vads_version=V2&vads_warranty_result=&vads_payment_src=EC&vads_cust_country=FR&vads_contrib=eopayment&vads_tid=001&vads_sequence_number=1&vads_contract_used=2334410&vads_trans_status=AUTHORISED&vads_expiry_month=6&vads_expiry_year=2021&vads_bank_label=Banque+de+d%C3%A9mo+et+de+l%27innovation&vads_bank_product=MCW&vads_pays_ip=FR&vads_presentation_date=20201027212031&vads_effective_creation_date=20201027212031&vads_operation_type=DEBIT&vads_result=00&vads_extra_result=&vads_card_country=FR&vads_language=fr&vads_brand_management=%7B%22userChoice%22%3Afalse%2C%22brandList%22%3A%22CB%7CMASTERCARD%22%2C%22brand%22%3A%22CB%22%7D&vads_action_mode=INTERACTIVE&vads_payment_config=SINGLE&vads_page_action=PAYMENT&vads_ext_info_eopayment_trans_id=1234&vads_threeds_enrolled=Y&vads_threeds_auth_type=CHALLENGE&vads_threeds_eci=02&vads_threeds_xid=bVpsTUhLSWpodnJjdXJVdE5rb0g%3D&vads_threeds_cavvAlgorithm=2&vads_threeds_status=Y&vads_threeds_sign_valid=1&vads_threeds_error_code=&vads_threeds_exit_status=10&vads_threeds_cavv=jG26AYSjvclBARFYSf%2FtXRmjGXM%3D&signature=d067a0f8eeefb3bdfd5278d0c04f723a56fdb7bd''' |
|
193 |
result = backend.response(response) |
|
194 |
assert result.signed |
|
195 |
assert result.transaction_id == FIXED_TRANSACTION_ID |
|
170 |
- |