API Communication BNP - BdEINSALyon/billevent GitHub Wiki
#doc DRF accéder à la BDD : ex : TransactionMercanet.objects.get(id=) .all() .filter() .count("id")
Fonctionnement de l'API
[WIP] on envoie l'id de la transaction à effectuer à /pay/{id}, l'api récupère le montant à faire payer depuis la DB et ça gère tout tout seul.
Après le paiement, le client est redirigé vers /pay/{id}/check/ pour que l'api vérifie la transaction auprès de mercanet.
LE MONTANT EST EN CENTIMES
Petites astuces :100:
- le service Ultrahook permet de forwarder les requêtes POST vers un ordi dans le réseau local (il faut peut-être changer le DNS). il faut installer
ruby
,gem
et mettre sa clé d'API dans un fichier - Pour désactiver la vérification CSRF dans une fonction, faire
from django.views.decorators.csrf import csrf_exempt
puis@csrf_exempt
avant la fonction
Documentation en plus
réponse automatique de MercaNET : (ça m'a pris 3h à trouver, c'était pas dans la doc)
Seal : 33b86e471cb88b00ac976ada3cdbbc8c7e5005f282e010f1b61fba564dd40ee8
Data : captureDay=0|captureMode=AUTHOR_CAPTURE|currencyCode=978|merchantId=211000021310001|orderChannel=INTERNET|responseCode=00|transactionDateTime=2017-11-25T14:41:05+01:00|transactionReference=1511617255|keyVersion=1|acquirerResponseCode=00|amount=123|authorisationId=184021|panExpiryDate=201812|paymentMeanBrand=CB|paymentMeanType=CARD|complementaryCode=00|complementaryInfo=<RULE_RESULT SC=0 />,<CARD_INFOS BDOM=XXX COUNTRY=FRA PRODUCTCODE=2 NETWORK=CB BANKCODE=20041 PRODUCTNAME=CARTE NATIONALE DE RETRAIT ET DE PAIEMENT PRODUCTPROFILE=D />|customerIpAddress=134.214.129.49|maskedPan=5017##########01|scoreProfile=11_GONOGO_PRE_AUTHORISATION|holderAuthentRelegation=N|holderAuthentStatus=NOT_ENROLLED|transactionOrigin=INTERNET|paymentPattern=ONE_SHOT|customerMobilePhone=null|mandateAuthentMethod=null|mandateUsage=null|transactionActors=null|mandateId=null|captureLimitDate=20171125|dccStatus=null|dccResponseCode=null|dccAmount=null|dccCurrencyCode=null|dccExchangeRate=null|dccExchangeRateValidity=null|dccProvider=null|statementReference=null|panEntryMode=MANUAL|walletType=null|holderAuthentMethod=NOT_SPECIFIED|holderAuthentProgram=3DS|paymentMeanId=null|instalmentNumber=null|instalmentDatesList=null|instalmentTransactionReferencesList=null|instalmentAmountsList=null|settlementMode=null|mandateCertificationType=null|valueDate=null|creditorId=null|acquirerResponseIdentifier=null|acquirerResponseMessage=null|paymentMeanTradingName=null|additionalAuthorisationNumber=null|issuerWalletInformation=null|s10TransactionId=33|s10TransactionIdDate=20171125|preAuthenticationColor=null|preAuthenticationInfo=null|preAuthenticationProfile=null|preAuthenticationThreshold=null|preAuthenticationValue=null|invoiceReference=null|s10transactionIdsList=null|cardProductCode=2|cardProductName=CARTE NATIONALE DE RETRAIT ET DE PAIEMENT|cardProductProfile=D|issuerCode=20041|issuerCountryCode=FRA|acquirerNativeResponseCode=00|settlementModeComplement=null|preAuthorisationProfile=11_GONOGO_PRE_AUTHORISATION|preAuthorisationProfileValue=unknown|preAuthorisationRuleResultList=[{"ruleCode":"SC","ruleType":"NG","ruleWeight":"D","ruleSetting":"I","ruleResultIndicator":"0","ruleDetailedInfo":"TRANS=1:5;CUMUL=123:X"}]|preAuthenticationProfileValue=null|preAuthenticationRuleResultList=null|paymentMeanBrandSelectionStatus=NOT_APPLICABLE|transactionPlatform=PROD
InterfaceVersion : HP_2.16
Valeurs des champs envoyés par MercaNET
y'a plein de trucs dans https://documentation.mercanet.bnpparibas.net/index.php?title=Dico_des_données, même si ils auraient dû le mettre autre part
- responseCode : 00=OK https://documentation.mercanet.bnpparibas.net/index.php?title=Dico_des_donn%C3%A9es#responseCode
- currentAmount : montant facturé au client (conversion de devises etc...)
- customerAccount : IBAN etc ..
- Iban : comme son nom l'indique
- customerData : tout à garder
L'objet Transaction
Les Attributs
ID | Amount | State | Client | Cart | (Payment Mean) | Date |
---|---|---|---|---|---|---|
PK | int | INT | FK | FK | FK | Timestamp |
L'ID est l'ID unique de transaction, il est le même que celui qu'on envoie à la BNP.
Client représente le payeur (C PAS FRANCAIS).
Cart représente le panier du client
La date est celle de la création de la commande
Le STATE peut prendre 4 valeurs:
- 0->INITIATED: Si la transaction a été crée
- 1->WAITING: Si l'utilisateur a été redirigé vers MercaNet
- 2->PAID: Si la transaction a été payée
- 3->CANCELED: Si la transaction a été annulée
Les méthodes
initPayment -> Permet d'initialiser un paiement getState -> Permet de récupérer l'état du paiement
A chaque transaction validée, on recalcule l'état payé ou non de la commande associée
Documentation
https://documentation.mercanet.bnpparibas.net/index.php/Accueil https://documentation.mercanet.bnpparibas.net/index.php/Interface_JSON https://docs.python.org/2/library/json.html http://www.django-rest-framework.org/api-guide/requests/
Identification des transaction
- mode TransactionReference qui est une référence unique pour toute la vie de la transaction (mode par défaut)
- mode TransactionId qui est un identifiant unique sur la journée (mode d’identification historique sur Mercanet), et il faut stocker l'ID et la date pour accéder aux opérations de caisse
Champs optionnels
il faut rajouter dans les requêtes tous les champs possibles (nom du client etc.... pour simplifier la gestion de la comptabilité depuis les reports MercaNET)