Confirmer une initiation de paiement (mode REDIRECT renforcé)
➤ Cas d'usage
Cette méthode, liée au mode d'authentification dit "redirect", permet au PISP de confirmer à l'ASPSP :
- Soit une demande d'initiation de paiement
- Soit une demande d'annulation d'une initiation de paiement
... en transmettant un facteur d'authentification du titulaire du compte débité afin que l'ASPSP puisse poursuivre la demande.
Seule la méthode POST /payment-requests/{paymentRequestResourceId}/o-confirmation qui correspond au mode d'authentification dit "redirect renforcé" est implémentée.
Cet appel permet d'envoyer à la banque (ASPSP) d'un client une demande de confirmation d'un paiement qui a été initié avec la méthode POST /payment-requests (voir la rubrique "Cas d'usage" > "Initier un paiement") et qui a été validée par le PSU.
Ne sont pas implémentées les méthodes suivantes :
- POST /confirmation du "REDIRECT simple" (renvoie HTTP 405)
- Confirmation d’une annulation de demande de paiement car elle est est implicitement portée par l’acceptation par le PSU de la demande d’annulation en elle-même
➤ Prérequis
Pour procéder à cette requête il est nécessaire de remplir les prérequis d’éligibilité pour le rôle TPP "PISP" (voir la rubrique "Eligibilité"), et d'avoir récupéré le jeton d'accès OAUTH2 (voir la rubrique "Vue d'ensemble" > "Récupérer un jeton").
Le TPP a déjà envoyé une requête qui a été enregistrée par l'ASPSP et à laquelle l'ASPSP a répondu avec un lien de localisation vers la demande de paiement / virement sauvegardée après que le PSU a validée le paiement.
➤ Requête POST
Le point d'entrée dépendra du code établissement. Vous devez insérer la même valeur des paramètres <cdetab> et <banque> que celle utilisée pour le jeton d'accès.
Pour rappel, la liste de nos établissements et les valeurs possibles des <cdetab> et <banque> sont précisées dans la rubrique "Limitations". Voici un extrait de cette liste :
Code établissement <cdetab> | Nom de l'établissement | Nom abrégé | <banque> |
---|---|---|---|
13807 | BP Grand Ouest | BPGO | banquepopulaire.fr |
17515 | CE Ile de France | CEIDF | caisse-epargne.fr |
Comme en mode test, le bon référentiel client est adressable via un "endpoint" au format www.<cdetab>.live.api.89c3.com ou www.<cdetab>.live.api.<banque>
Par exemple, nous avons donc comme URL de production :
- POST https://www.17515.live.api.89c3.com/stet/psd2/v1.4.2/payment-requests/{paymentRequestResourceId}/o-confirmation
ou
➤ Paramètres obligatoires ou facultatifs du body requis pour l'appel de ce service
Paramètre obligatoire paymentRequestResourceId : identifiant de la requête d'initiation de paiement pour laquelle on souhaite confirmer le virement.
La structure du body et les champs obligatoires sont décrits dans la norme STET :
- nonce => challenge à renvoyer par le TPP pour éviter de rejouer le processus d'authentification
- psuAuthenticationFactor => facteur d'authentification transmis par le TPP à la banque pour finaliser le processus d'authentification forte
Le tiers de paiement peut et doit récupérer les informations de son virement avec la méthode GET /stet/psd2/v1.4.2/payment-requests/{paymentRequestResourceId} afin de vérifier que le paiement a été validé par le client :
- La donnée paymentInformationStatus doit avoir la valeur : ACSP
- La donnée transactionStatus (au niveau de la transaction dans l’objet creditTransferTransaction) doit avoir la valeur : PDNG
Cas particulier du parapheur :
Pour les clients PRO et ENTREPRISE de la Banque Palatine qui utilisent la fonctionnalité du parapheur (Cyber ou mobile) pour valider leurs ordres, les virements SCT immédiats, permanents ou différés qui ont été soumis via une initiation de paiement, ne seront exécutés qu’une fois l’ordre correspondant validé dans le parapheur dans leur banque à distance. Les virements SEPA Instant Payment (SCTInst) issus d’une initiation de paiement ne sont pas concernés à ce jour par le parapheur.
➤ Résultat retourné
A la soumission de la requête, et si toutes les données sont correctement formatées, une réponse (HTPP 200) sera retournée.
Cette réponse contiendra le resourceId du paiement, ainsi que le mode d'authentification SCA Redirect (seul mode disponible), l'URL de consentement en fonction de la banque du payeur (urlconsent_approval_URL) et le non rejeu.
Remarques :
- La donnée paymentRequestResourceId, essentielle pour pouvoir confirmer un paiement, est incluse en tant que paramètre dans l'URL de consentement "consentApproval" renvoyée lors de l’initiation de paiement.
- Idem pour le non rejeu : c'est le paramètre nonce dans l'URL de consentement.
➤ Codes erreur
Type d'erreur | Code HTTP | Libellé | Motif |
---|---|---|---|
Générique, mauvaise structure | 400 | Bad request | error code : FF01 message : RJCT |
Mauvais format du BIC | 400 | Bad request | error code : FF01 message : RJCT error : le champ creditorAgent.bicFi bicFi-Code allocated to a financial institution by the ISO 9362 Registration Authority as described in ISO 9362 |
Mauvais format du serviceLevel | 400 | Bad request | error code : FF01 message : RJCT error : value not one of declared Enum instance names: [SEPA, NURG] |
Mauvais format, chargeBearer autre que SLEV | 400 | Bad request | error code: FF01 message: RJCT error: value not one of declared Enum instance names: [SLEV] |
Mauvais format du schemeName | 400 | Bad request | error code: FF01 message : RJCT error : le champ creditor.privateId.schemeName schemeName-Possible values BANK,COID,SREN,DSRET,NIDN,OAUT,CPAN |
Mauvais format du purpose | 400 | Bad request | error code: FF01 message: RJCT error: value not one of declared Enum instance names: [TRPT, CASH, CPKC, ACCT, COMC] |
Mauvais format du categoryPurpose | 400 | Bad request | error code: FF01 message: RJCT error: value not one of declared Enum instance names: [CASH, DVPM] |
Mauvais jeton d'accès, problème d'authentification | 403 | Forbidden | |
Request resource inconnu | 404 | Not Found | |
Mauvaise requête ou requête hors périmètre autorisé | 405 | Method not allowed | |
Message générique | 500 | Internal server error |
➤ Exemple
Requête :
POST /stet/psd2/v1.4.2/payment-requests/0000000a22-156688979900016807956016/o-confirmation
Body :
{ "nonce": "00000032fa-159127166900013807464584", "psuAuthenticationFactor": "azertyui" } |
Résultat :
Status code : 200
Body de la réponse :
{ "paymentRequest" : { "resourceId" : "0000000a22-156688979900016807956016", "paymentInformationId" : "MyPmtInfld123", "creationDateTime" : "2019-07-22T09:25:22.527+02:00", "numberOfTransactions" : 1, "debtorAgent" : { "bicFi" : "CCBPFRPP512", "name" : "B.P Grand Ouest", "postalAddress" : { "country" : "FR", "addressLine" : [ "15 Boulevard de la Boutière", "CS 26858 35768 SAINT GREGOIRE CEDEX" ] } }, "initiatingParty" : { "name" : "MyPispName", "postalAddress" : { "country" : "FR", "addressLine" : [ "5 avenue Anatole France ", "75007 PARIS" ] }, "organisationId" : { "identification" : "12FR5", "schemeName" : "COID", "issuer" : "ACPR" } }, "paymentTypeInformation" : { "serviceLevel" : "SEPA", "categoryPurpose" : "CASH" }, "debtor" : { "name" : "Marc ", "postalAddress" : { "country" : "FR", "addressLine" : [ "512 rue de la coupe du monde", "94512 Charenton-le-Pont" ] }, "privateId" : { "identification" : "D0999990I0", "schemeName" : "BANK", "issuer" : "BICXYYTT512" } }, "debtorAccount" : { "iban" : "FR7613807008043001965405255" }, "beneficiary" : { "creditorAgent" : { "bicFi" : "CCBPFRPP512", "name" : "B.P Grand Ouest", "postalAddress" : { "country" : "FR", "addressLine" : [ "15 Boulevard de la Boutière", "CS 26858 35768 SAINT GREGOIRE CEDEX" ] } }, "creditor" : { "name" : "myMerchant", "postalAddress" : { "country" : "FR", "addressLine" : [ "Place Charles de Gaulle", "75008 PARIS" ] }, "organisationId" : { "identification" : "852126790", "schemeName" : "BANK", "issuer" : "FR" } }, "creditorAccount" : { "iban" : "FR7613807008043001965406128" } }, "purpose" : "COMC", "chargeBearer" : "SLEV", "paymentInformationStatus" : "PDNG", "statusReasonInformation" : null, "fundsAvailability" : null, "booking" : null, "requestedExecutionDate" : "2020-09-23T13:25:22.527+04:00", "creditTransferTransaction" : [ { "paymentId" : { "resourceId" : "0000000a22-146329369000016907660677", "instructionId" : "MyInstrId123", "endToEndId" : "MyEndToEndId123" }, "instructedAmount" : { "currency" : "EUR", "amount" : "327.12" }, "remittanceInformation" : [ "MyRemittanceInformation123" ], "transactionStatus" : "PDNG" } ], "supplementaryData" : { "appliedAuthenticationApproach" : "REDIRECT", "scaHint" : "scaExemption", "successfulReportUrl" : "https://www.api.89c3.com", "unsuccessfulReportUrl" : "https://www.api.89c3.com" } } } |