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

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)