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'établissementNom 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 :

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 

 

 

➤ 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 ressourceId 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 paymentRequestRessourceId, 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"

    }

  }

}