Projet

Général

Profil

0001-systempayv2-add-support-for-chosen-transaction_id-48.patch

Benjamin Dauvergne, 27 octobre 2020 22:26

Télécharger (6,86 ko)

Voir les différences:

Subject: [PATCH 1/2] systempayv2: add support for chosen transaction_id
 (#48064)

 eopayment/__init__.py     |  4 ++++
 eopayment/common.py       |  2 ++
 eopayment/systempayv2.py  | 17 +++++++++++++----
 tests/test_systempayv2.py | 26 ++++++++++++++++++++++++++
 4 files changed, 45 insertions(+), 4 deletions(-)
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
-