Package: eopayment
Interface with French's bank online credit card processing services===================================================================Services supported are:- ATOS/SIPS v2 used by:- BNP under the name Mercanet,- Banque Populaire (before 2010/2011) under the name Cyberplus,- CCF under the name Elysnet,- HSBC under the name Elysnet,- Crédit Agricole under the name e-Transactions,- La Banque Postale under the name ScelliusNet,- LCL under the name Sherlocks,- Société Générale under the name Sogenactif- and Crédit du Nord under the name Webaffaires,- Payzen/SystemPay v2 by Banque Populaire (since 2010/2011) and Caisse d'Épargne (Natixis)- TIPI/PayFiP Régie- PayFiP Régie Web-service- Ogone- Paybox- PayzenYou can emit payment request under a simple API which takes as input adictionnary as configuration and an amount to pay. You get back atransaction_id. Another unique API allows to handle the notifications comingfrom those services, reporting whether the transaction was successful and whichone it was. The full content (which is specific to the service) is alsoreported for logging purpose.The paybox module also depend upon the python Cryptodome library for RSAsignature validation on the responses.Some backends allow to specify the order and transaction ids in differentfields, in order to allow to match them in payment system backoffice. They are:- Payzen- SIPS- SystemPay- PayFiP Régie Web-ServiceFor other backends, the order and transaction ids, separated by '!' are sent inorder id field, so they can be matched in backoffice.PayFiP Régie Web-Service========================You can test your PayFiP regie web-service connection with an integrated CLI utility:$ python3 -m eopayment.payfip_ws info-client --helpUsage: payfip_ws.py info-client [OPTIONS] NUMCLIOptions:--help  Show this message and exit.$ python3 -m eopayment.payfip_ws get-idop --helpUsage: payfip_ws.py get-idop [OPTIONS] NUMCLIOptions:--saisie [T|X|W]         [required]--exer TEXT              [required]--montant INTEGER        [required]--refdet TEXT            [required]--mel TEXT               [required]--url-notification TEXT  [required]--url-redirect TEXT      [required]--objet TEXT--help                   Show this message and exit.$ python3 -m eopayment.payfip_ws info-paiement --helpUsage: payfip_ws.py info-paiement [OPTIONS] IDOPOptions:--help  Show this message and exit.Generic CLI Tool================You can put some configuration in ~/.config/eopayment.init ::[default]debug=yes[systempayv2]# same name as passed in the options argument to Payment.__init__()vads_site_id=12345678secret_test=xyzabcdefghvads_ctx_mode=TEST$ python3 -m eopayment --option vads_site_id=56781234 request 10.0 --param transaction_id=1234 --param email=john.doe@example.comTransaction ID: 1234<form method="POST" action="https://paiement.systempay.fr/vads-payment/"><input type="hidden" name="vads_cust_country" value="FR"/><input type="hidden" name="vads_validation_mode" value=""/><input type="hidden" name="vads_site_id" value="12345678"/><input type="hidden" name="vads_payment_config" value="SINGLE"/><input type="hidden" name="vads_trans_id" value="GavPXW"/><input type="hidden" name="vads_action_mode" value="INTERACTIVE"/><input type="hidden" name="vads_contrib" value="eopayment"/><input type="hidden" name="vads_page_action" value="PAYMENT"/><input type="hidden" name="vads_amount" value="1010"/><input type="hidden" name="signature" value="d5690d02fed621687b19c90053a77b37a1c78370"/><input type="hidden" name="vads_ctx_mode" value="TEST"/><input type="hidden" name="vads_version" value="V2"/><input type="hidden" name="vads_payment_cards" value=""/><input type="hidden" name="vads_ext_info_eopayment_trans_id" value="1234"/><input type="hidden" name="vads_trans_date" value="20201027211254"/><input type="hidden" name="vads_language" value="fr"/><input type="hidden" name="vads_capture_delay" value=""/><input type="hidden" name="vads_currency" value="978"/><input type="hidden" name="vads_cust_email" value="john.doe@example.com"/><input type="hidden" name="vads_return_mode" value="GET"/><input type="submit" name="Submit" value="Submit" /></form>[ Local browser is automatically opened with this form which is auto-submitted ]$ python3 -m eopayment --debug response 'vads_amount=1010&vads_auth_mode=FULL&vads_auth_number=3fd070&vads_auth_result=00&vads_capture_delay=0&vads_card_brand=CB&vads_card_number=597010XXXXXX0018&vads_payment_certificate=f582e920616a33bdaa0c242ee3fc3d435d367575&vads_ctx_mode=TEST&vads_currency=978&vads_effective_amount=1010&vads_effective_currency=978&vads_site_id=12345678&vads_trans_date=20201029093825&vads_trans_id=Vlco55&vads_trans_uuid=e8defc7bd32c418c93c4b2be676d2796&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=20201029093826&vads_effective_creation_date=20201029093826&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_threeds_enrolled=Y&vads_threeds_auth_type=CHALLENGE&vads_threeds_eci=02&vads_threeds_xid=RFBSMkdWdFE0Wk15VWw0RkJjMzU%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=5594aa2bc35c9e45e759b08df339e5f8ecf2c410'result : 3signed : Truebank_data  :{'__bank_id': '3fd070','signature': '5594aa2bc35c9e45e759b08df339e5f8ecf2c410','vads_action_mode': 'INTERACTIVE','vads_amount': '1010','vads_auth_mode': 'FULL','vads_auth_number': '3fd070','vads_auth_result': '00','vads_auth_result_message': 'Transaction approuvée ou traitée avec succès','vads_bank_label': "Banque de démo et de l'innovation",'vads_bank_product': 'MCW','vads_brand_management': '{"userChoice":false,"brandList":"CB|MASTERCARD","brand":"CB"}','vads_capture_delay': '0','vads_card_brand': 'CB','vads_card_country': 'FR','vads_card_number': '597010XXXXXX0018','vads_contract_used': '2334410','vads_contrib': 'eopayment','vads_ctx_mode': 'TEST','vads_currency': '978','vads_cust_country': 'FR','vads_effective_amount': '1010','vads_effective_creation_date': '20201029093826','vads_effective_currency': '978','vads_expiry_month': '6','vads_expiry_year': '2021','vads_extra_result': '','vads_extra_result_message': 'Pas de contrôle effectué.','vads_language': 'fr','vads_operation_type': 'DEBIT','vads_page_action': 'PAYMENT','vads_payment_certificate': 'f582e920616a33bdaa0c242ee3fc3d435d367575','vads_payment_config': 'SINGLE','vads_payment_src': 'EC','vads_pays_ip': 'FR','vads_presentation_date': '20201029093826','vads_result': '00','vads_result_message': 'Paiement réalisé avec succés.','vads_sequence_number': '1','vads_site_id': '12345678','vads_threeds_auth_type': 'CHALLENGE','vads_threeds_cavv': 'jG26AYSjvclBARFYSf/tXRmjGXM=','vads_threeds_cavvAlgorithm': '2','vads_threeds_eci': '02','vads_threeds_enrolled': 'Y','vads_threeds_error_code': '','vads_threeds_exit_status': '10','vads_threeds_sign_valid': '1','vads_threeds_status': 'Y','vads_threeds_xid': 'RFBSMkdWdFE0Wk15VWw0RkJjMzU=','vads_tid': '001','vads_trans_date': '20201029093825','vads_trans_id': 'Vlco55','vads_trans_status': 'AUTHORISED','vads_trans_uuid': 'e8defc7bd32c418c93c4b2be676d2796','vads_validation_mode': '0','vads_version': 'V2','vads_warranty_result': ''}return_content : Nonebank_status : Paiement réalisé avec succés.transaction_id : 3fd070order_id : 20201029093825_Vlco55test : Truetransaction_date : 2020-10-29 09:38:26+00:00Code Style==========black is used to format the code, using thoses parameters:black --target-version py35 --skip-string-normalization --line-length 110isort is used to format the imports, using those parameters:isort --profile black --line-length 110pyupgrade is used to automatically upgrade syntax, using those parameters:pyupgrade --keep-percent-format --py37-plusThere is .pre-commit-config.yaml to use pre-commit to automatically run black,isort and pyupgrade before commits. (execute `pre-commit install` to installthe git hook.)