Les bénéfices attendus

    Construisons des nouveaux parcours de paiement fluide pour nos clients communs.

    Ce produit API PISP DSP2 vous permet de construire des parcours de paiement innovant et d’initier de façon sécurisée des paiements par virement pour les clients des Caisses d'Epargne, Crédit Coopératif, Banque BCP et BTP Banque.

    Image
    Snap of the fingers to indicate that the solution is simple.

    Fluidifier les parcours

    Permettez à vos clients de gérer facilement des paiements dans leur processus de gestion du quotidien.

    Image
    Fight against fraud

    Réduisez les risques

    Evitez les ruptures de processus et les ressaisies et éviter ainsi des risques opérationnels d’erreur ou de fraude.

     

    La connexion se fait au travers d’un dispositif sécurisé conforme aux exigences du régulateur européen.

    En accédant à ce service vous serez ainsi en mesure de proposer à nos clients communs des nouveaux parcours en ligne avec les principales fonctions suivantes :

    • Un système conforme DSP2 pour l’authentification et la gestion du consentement des clients ;
    • Choix du compte de paiement émetteur du virement ;
    • Choix des parcours fluides ou classiques ;
    • Paiement par virements immédiats, ponctuels, groupés et périodiques ;
    • Accès immédiat aux statuts des paiements initiés par les clients.

    Les différents cas d’usage possibles

    Des parcours de paiement par virement intégrés et sécurisés

    Encaissement autres

    Proposez à vos clients des parcours de paiement pour encaisser les échéances de prêts, recouvrement, loyers, charges, impôts, …
     

    Règlement de factures

    Permettez à vos clients personnes morales de payer des fournisseurs dans leurs logiciels de gestion.
     

    Pilotage de liquidité

    Proposez à vos clients des parcours de gestion de flux entre leurs comptes.
     

    Comment accéder au produit ?

    Pour accéder à l'API Initiation de Paiement, les développeurs et les entreprises doivent suivre les étapes ci-dessous.

    • Prise de contact

      Prenez contact avec les Responsables Produit.

      Contactez-nous

    • Accès

      Enrôlez-vous directement depuis le processus dédié (acteurs régulés).

    • Intégration & Tests

      Intégrez le service dans votre solution et faites-nous part de vos cas d’usage pour assurer la qualité du service.

    • Go Live !

    Documentation
    DSP2
    PISP
    déprécié

    Initier un paiement

    Un de nos clients effectue une transaction sur un site d’e-commerce ou souhaite effectuer un virement ou un transfert.

    Via cette API « Initiation de paiement » mise à disposition par la Caisse d’Epargne, vous pouvez soumettre en temps réel une demande d’initiation du paiement.

    Le client connecté va être sollicité par sa banque pour valider l’opération.

    Dans le cadre d’un parcours classique :

    1. Le PSU s’identifie et s’authentifie ;
    2. Puis, il sélectionne le compte de paiement disposant d’un solde suffisant pour le montant de l’opération ;
    3. Enfin, la banque scelle l’opération après que le client se soit à nouveau authentifié fortement pour valider l’opération.

    Dans le cadre d’un parcours fluide, les données du compte débiteur sont transmises dans la requête d’initiation de paiement :

    1. Le PSU s’identifie si son identifiant n’est pas transmis dans la requête ;
    2. Puis, il vérifie les informations de l’opération ;
    3. Enfin, la banque scelle l’opération après que le client se soit authentifié fortement pour valider l’opération.

    Cette API ne peut être consommée que par des prestataires ayant le rôle d’initiateurs de paiement (« PISP »), ce prérequis étant décrit dans voir la rubrique « Éligibilité » .

    Une fois ce prérequis rempli, le processus global est le suivant :

    Image
    PISP global process

    1- Le client souhaite utiliser vos services afin de réaliser un virement ou un transfert, ou alors il sélectionne votre service lorsqu’il est sollicité par un e-commerçant pour régler son achat sur le site du e-commerçant. Il vous précise Caisse d’Epargne dans laquelle il est domicilié à travers vos interfaces.
     

    2- Lors du premier échange avec les infrastructures du teneur de compte, vous allez faire une demande de jeton d’autorisation. Le principe de base est, qu’en tant que TPP PISP, vous devez obtenir ce jeton AVANT de consommer l’API. Ce jeton est généré par le teneur de compte (ASPSP) APRES avoir vous avoir identifié.

    En tant que teneur de compte, nous allons :

    • Vérifier vos certificats et agréments.

    Pour cette API, il n’est pas nécessaire que nous identifions et authentifions fortement le client afin de récupérer son consentement et de générer le jeton d’accès.
     

    3- Si nous avons pu vérifier votre identité et vos agréments, vous pourrez ensuite récupérer un jeton d’accès OAuth2 via des échanges sécurisés avec la plateforme BPCE API (voir la rubrique « Vue d’ensemble » > « Récupérer votre jeton »).
     

    4- En présentant ce jeton d’autorisation valable uniquement pour cette opération, vous pourrez alors consommer l’API « initiation de paiement » afin :

    • D’initier le paiement (voir la rubrique « Cas d’usage » > « Initier un paiement ») ;
       
    • De récupérer le statut de l’initiation de paiement (voir la rubrique « Cas d’usage » > « Récupérer le statut d’une initiation de paiement ») ;
       
    • De modifier une initiation de paiement (voir la rubrique « Cas d’usage » > « Annuler une initiation de paiement »)
       
    • De confirmer une initiation de paiement (voir la rubrique « Cas d’usage » > « Confirmer une initiation de paiement – méthode o-confirmation »).

    Consommer l'API

    La description des services proposés ci-après n’est que purement fonctionnelle. Les aspects techniques sont répertoriés dans les sections « Cas d’usage » qui sont plus détaillées.

    Vous devez aussi être familier avec la terminologie DSP2 et les abrévations utilisées. 

    Vous pouvez également utiliser la foire aux questions (FAQ).

     

     

    Prérequis

    En tant que TPP, vous devez être accrédité par l’autorité de contrôle prudentiel et de résolution (ACPR en France) pour le rôle d’initiateur de paiement (« PISP »).

    Pour accéder aux services de l’API d’initiation de paiement, vous devez récupérer un jeton d’accès OAuth2 délivré par l’établissement bancaire du PSU en l’interrogeant avec vos credentials.

    A ce titre, vous devez vous authentifier mutuellement avec le teneur de compte (ASPSP) par échange de certificats eIDAS QWAC.

    Vous présenterez ensuite votre jeton d’accès OAuth2 pour pouvoir consommer les services de l’API d’initiation de paiement.

     

    Initier un paiement

    Il existe deux cas d’utilisation de l’API d’initiation de paiement :

    1) Le PISP fait une demande de paiement pour le compte d’un commerçant : le client PSU achète des biens ou des services sur un site e-commerce (cf. haut du schéma ci-après).

    Il existe un contrat entre le e-commerçant et le PISP.

    Le e-commerçant transmet les caractéristiques du paiement demandées au PISP et redirige le client PSU vers le portail du PISP.

    Le PISP interroge le client PSU pour connaître l’établissement bancaire à partir duquel il souhaite débiter son compte. Puis il prépare la demande de paiement et l’envoie à l’établissement bancaire du client.

    Le bénéficiaire (= le e-commerçant) est indiqué dans le paiement.

    2) Le PISP fait une demande de virement pour le compte du client PSU titulaire du compte. Le PSU fournit au PISP les informations nécessaires au transfert (cf. bas du schéma ci-après).

    Le PISP interroge le client PSU afin de connaître l’établissement bancaire à partir duquel il souhaite débiter son compte. Puis il prépare la demande de paiement et l’envoie à l’établissement bancaire du PSU.

    voir les spécifications STET V1.4.2 / Part 1 / paragraph 3.4.5.4

    Image
    OAuth2 enforced redirect PISP use case

    Vous transmettez la requête d’initiation de paiement via la méthode POST /payment-requests (cf. rubrique « Cas d’usage » > « Initier un paiement »).

    La méthode d’authentification supportée par l’établissement bancaire est le mode REDIRECT renforcé :

    1) Le PSU est redirigé vers un écran d’identification proposé par son établissement bancaire et dans lequel il saisira son identifiant de banque à distance.

    2) Le PSU est redirigé vers un premier écran d’authentification forte proposé par son établissement bancaire pour valider son identité.

    La cinématique de cette étape dépend de la méthode d’authentification forte mise à disposition du PSU par l’établissement bancaire (SMS OTP, secur’pass, etc.).

    Elle dépend aussi de l’équipement du PSU sur lequel tourne l’application du PISP utilisée par le PSU (PC ou mobile/tablette).

    3) Le PSU est redirigé vers un écran de sélection de son compte à débiter proposé par son établissement bancaire.

    4) Le PSU sélectionne et valide le compte à débiter.

    5) Le PSU est redirigé vers un second écran d’authentification forte proposé par son établissement pour valider son paiement.

    La cinématique de cette étape dépend de la méthode d’authentification forte mise à disposition du PSU par l’établissement bancaire (SMS OTP, secur’pass, etc.).

    Elle dépend aussi de l’équipement bancaire du PSU sur lequel tourne l’application du PSU (PC ou mobile/tablette).

    6) Le PSU est redirigé vers un écran de confirmation de l’opération proposé par son établissement bancaire.

    7) Le PSU est redirigé vers l’application du PISP.

    8) Vous transmettez la requête de confirmation de l’initiation du paiement via la méthode POST /payment-requests/{paymentRequestResourceId}/o-confirmation (cf. rubrique « Cas d’usage » > « Confirmer une initiation de  »), ce qui déclenche la prise en compte du paiement par l’établissement bancaire.

    Si le PISP fournit l’IBAN du PSU à débiter dans sa requête, le parcours client est simplifié (« parcours PISP fluide ») :

    1) Le PSU est redirigé vers un écran de confirmation du virement dans lequel seul le compte correspondant à l’IBAN du PSU est proposé au PSU.

    3) Le PSU valide l’opération.

    4) Le PSU est redirigé vers un écran d’identification et d’authentification forte proposé par son établissement pour valider son paiement.

    La cinématique de cette étape dépend de la méthode d’authentification forte mise à disposition du PSU par l’établissement bancaire (SMS OTP, secur’pass, etc.).

    Elle dépend aussi de l’équipement bancaire du PSU sur lequel tourne l’application du PSU (PC ou mobile/tablette).

    5) Le PSU est redirigé vers un écran de confirmation de l’opération proposé par son établissement bancaire.

    6) Le PSU est redirigé vers l’application du PISP.

    7) Vous transmettez la requête de confirmation de l’initiation du paiement via la méthode POST /payment-requests/{paymentRequestResourceId}/o-confirmation (cf. rubrique « Cas d’usage » > « Confirmer une initiation de paiement »), ce qui déclenche la prise en compte du paiement par l’établissement bancaire.

    Le PISP fournit lors de sa demande d’initiation une ou deux URL call back :

    • La première sera appelée par l’établissement bancaire dans le cas où la demande d’initiation est traitée et si le PSU a donné son consentement pour le paiement.
    • La seconde URL call back sera utilisée par l’établissement bancaire en cas de refus du consentement. Cette seconde URL est facultative : la première URL de call back sera utilisée si la seconde n’est pas renseignée.

    Le PISP peut renseigner un indicateur lui permettant d’indiquer qu’il considère la demande de paiement comme étant un cas d’exemption de SCA. La décision finale d’appliquer ou non une SCA reste à l’ASPSP : à ce jour aucune exemption n’est acceptée parmi les cas de dérogations à l’obligation d’authentification forte du PSU, si les exigences générales en matière d’authentification sont remplies, telles que décrits dans l’article 2 des RTS de la DSP2.

     

     

    Récupérer le statut d’une initiation du paiement

    Vous récupérez le statut d’une initiation de paiement via la méthode GET /payment-requests/{paymentRequestResourceId} (cf. rubrique « Cas d’usage » > « Récupérer le statut d’une initiation de paiement » ).

    Cet appel vous permet de récupérer l’ensemble des données de l’initiation de paiement enrichies du resourceId et des statuts de l’initiation et du paiement qu’elle contient.

    Les données sont accessibles pendant 35 jours.

     

     

    Annuler une initiation de Paiement

    Pour un virement SCT différé qui n’a pas encore été exécuté ou pour un virement SCT permanent dont la dernière échéance n’a pas été atteinte, vous annulez une initiation de paiement via la méthode PUT /payment-requests/{paymentRequestResourceId}(cf. rubrique « Cas d’usage » > « Annuler une initiation de paiement »)

    La méthode d’authentification supportée par l’établissement bancaire est le mode REDIRECT :

    1) Le PSU est redirigé vers un écran d’identification proposé par son établissement bancaire et dans lequel il saisira son identifiant de banque à distance.

    2) Le PSU est redirigé vers un écran d’authentification forte proposé par son établissement bancaire pour valider son identité.

    3) Le PSU est redirigé vers un écran récapitulatif de l’opération en cours d’annulation proposé par son établissement bancaire.

    4) Le PSU valide l’annulation du virement.

    5) Le PSU est redirigé vers un écran de confirmation de l’opération proposé par son établissement bancaire.

    6) Le PSU est redirigé vers l’application du TPP PISP.

    Le PISP fournit lors de sa demande d’annulation une ou deux URL de call back :

    La première sera appelée par l’établissement bancaire dans le cas où la demande d’annulation est traitée et si le PSU a donné son consentement pour cette annulation d’opération.

    La seconde URL sera utilisée par l’établissement bancaire en cas de refus du consentement ou de problème. Cette seconde URL est facultative : la première URL call back sera utilisée si la seconde n’est pas renseignée.

     

     

    Confirmer une initiation de paiement

    Vous confirmez une initiation de paiement via la méthode POST /payment-requests/{paymentRequestResourceId}/o-confirmation, approche REDIRECT renforcé (voir la rubrique « Cas d’usage » > « Confirmer une initiation de paiement »).

    Par contre, le service de confirmation d’une annulation de demande de paiement ne sera pas supporté. L’annulation sera effective dès l’acceptation de la demande.

    Publications réglementaires

     

    PériodeDocument
    Disponibilité des APIs DSP2 à dateTélécharger le document
    Statistiques T1 2025Télécharger le document
    Statistiques T4 2024Télécharger le document
    Statistiques T3 2024Télécharger le document
    Statistiques T2 2024Télécharger le document
    Statistiques T1 2024Télécharger le document
    Statistiques T4 2023Télécharger le document
    Statistiques T3 2023Télécharger le document
    Statistiques T2 2023Télécharger le document
    Statistiques T1 2023Télécharger le document
    Statistiques T4 2022Télécharger le document
    Statistiques T3 2022Télécharger le document
    Statistiques T2 2022Télécharger le document
    Statistiques T1 2022Télécharger le document
    Statistiques T4 2021Télécharger le document
    Statistiques T3 2021Télécharger le document
    Statistiques T2 2021Télécharger le document
    Statistiques T1 2021Télécharger le document
    Statistiques T4 2020Télécharger le document
    Statistiques T3 2020Télécharger le document
    Statistiques T2 2020Télécharger le document
    Statistiques T1 2020Télécharger le document

    Récupérer un jeton

    Développement pas à pas

    1- Le TPP envoie directement une requête vers l’infrastructure informatique d’autorisation de la banque teneur de compte.

    Pour l’accès en production (live), le point d’entrée pour récupérer le jeton d’accès dépend de l’établissement teneur de compte avec le format

    • htpps://www.<cdetab>.live.api.89c3.com/stet/psd2/oauth/token

    ou

    • htpps://www.<cdetab>.live.api.<banque>/stet/psd2/oauth/token aligné sur le nom de domaine de l’accès direct de la <banque>

    NB : la liste de nos établissements et les valeurs possibles des <cdetab> et <banque> associés sont précisées dans la rubrique « Limitations« .

    Afin de pouvoir interroger le bon backend dans le parcours client, il est donc nécessaire que vous prévoyez de demander au préalable au client son établissement teneur de compte.

    NB : Le PSU peut domicilier ses comptes dans plusieurs banques du Groupe BPCE. Dans ce cas, il vous faudra un jeton différent pour accéder à chacun des établissements teneurs de comptes (ASPSP).

    Le détail des paramètres de la requête se trouvent ci-après : POST /psd2/oauth/token?client_id={clientId}&scope={scope}[&grant-type=client_credentials]

    Nom DescriptionType
    grant_type[1..1]Type d’autorisation demandéeDoit être « client_credentials »
    client_id[1..1]Votre identification en tant que TPP

    Si l’enregistrement du TPP a été réalisé au travers du processus de « GoLive » via notre portail BPCE API : doit être égale à la partie « OrganizationIdentifier » du « Distinguished Name » du certificat eiDAS, en accord avec la spécification ETSI =>numéro d’agrément donné par votre autorité compétente (PSDXX-YYYYYYYY-ZZZZZZZZ)

     

    OU

    Si l’enregistrement du TPP a été réalisé via l’API Enregistrement DSP2: doit être égale au client_id retourné dans la réponse au POST /register

    scope[0..1]Spécifie le serviceDoit être « pisp »

    2- L’établissement teneur de compte (ASPSP) va effectuer des vérifications liées au profil du TPP (rôle, validité des certificats et de votre rôle, non révocation de votre profil, etc.)

    3- Si ces vérifications effectuées sont concluantes, la banque va répondre au TPP via un code HTTP 200 (OK) avec les données suivantes :

    Nom DescriptionType
    access_token[1..1]Jeton d’accès fourni au TPP par l’ASPSP.ex : « nACXdBo0fULg8fffadFDSGJZALKGEAaxfer72HGDHGx6kJHz »
    token_type[1..1]Type du jeton fourniDoit être »Bearer »
    expires_in[0..1]Durée de vie du jeton (en secondes) utilisable plusieurs fois tant qu’il n’est pas expiréNumérique=> ex : « 3600 »
    scope[1..1]Spécifie le serviceDoit être « pisp »

    Le jeton d’accès doit être utilisé dans toutes les requêtes au niveau du header « Authorization » préfixé par le type de jeton « Bearer ».

    Si le jeton a expiré, la requête sera rejetée avec un code HTTP 403 et des données indiquant « Token invalide ». Cette requête pourra être renvoyée une fois qu’un nouveau jeton d’accès de type Client Credential a été demandé et obtenu.

    Initier un paiement

    Principe

    Envoyer une demande d’initiation de paiement en €.

     

     

    Contexte

    Cet appel permet d’envoyer à la banque (ASPSP) d’un client une demande d’initiation de paiement venant débiter son compte. S’il s’agit d’une initiation de paiement initiée par un e-commerçant (pas par le client final), le paiement va créditer celui de l’usager du service de paiement (PSU) pour lequel le Prestataire de service de paiement (PISP) a été mandaté, à savoir le e-commerçant.

    Seule l’initiation de paiement unique en euros est acceptée dans nos traitements.

    A la soumission de la requête, et si toutes les données sont correctement formatées, une réponse (HTTP 201) vous sera retournée.

    Cette réponse contiendra le ressourceId de l’initiation de paiement, ainsi que le mode d’authentification redirect (seul mode disponible), l’URL de consentement en fonction de la banque du payeur (urlconsent_approval_URL) et le non rejeu.

    Les paiements SCT Core (immédiat, différé, permanent) et Instantané sont supportés (voir les restrictions dans la rubrique « Limitations« ).

     

     

    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 « Cas d'usage » > « Récupérer un jeton« ).

     

     

    Requête POST

    Le point d’entrée dépendra du code établissement. Vous devez insérer la même valeur du paramètre <cdetab> que celle utilisée pour le jeton d’accès.

    Pour rappel, la liste de nos établissements et les valeurs possibles des <cdetab> sont précisées dans la rubrique « Limitations« .

    Par exemple, nous avons donc comme URL pour initier en production un paiement pour un client de la Caisse d’Epargne Ile de France :

     

     

    Paramètres du body requis pour l’appel de ce service

    La structure du body et les champs obligatoires sont décrits dans la norme STET.

    Les informations suivantes doivent être valorisées dans la requête comme suit :

    • La donnée serviceLevel doit être renseigné à SEPA
       
    • La donnée amount doit être renseignée avec une valeur conforme aux montants min/max tels qu’appliqués sur la banque en ligne et qui peuvent être différents par ASPSP et/ou par type d’opération demandée (SCT CORE ou INST) et/ou par segment client
       
    • La donnée currency doit être renseignée à EUR => les virements internationaux en devise ne sont pas disponibles
       
    • La donnée localInstrument est à alimenter avec la valeur « INST » pour déclencher un SEPA Instant Payment (SCT Inst) :
      • ce type de requête occasionne des frais facturés au client en fonction des conditions tarifaires en vigueur applicables pour son segment de clientèle
      • la banque du bénéficiaire doit être élligible au SCT Inst
         
    • Seuls les IBAN complets émis par des établissements de crédit sont supportés pour les données Iban, debtorAccount et creditorAccount
       
    • La donnée numberOfTransactions doit être valorisée à « 1 » (seules les initiations de paiement unitaires sont supportées, y compris pour chaque occurence des permanents, pas de paiement multi-bénéficiaire)
       
    • La donnée remittanceInformation doit intégrer la balise « unstructured » soit par exemple « remittanceInformation » : { « unstructured » : [ « test  » ] }
       
    • La donnée successfulReportUrl est obligatoire pour le mode d’authentification REDIRECT mis en œuvre et doit contenir :
      • la redirect URL
      • ainsi que le pkce : code_challenge = BASE64URL-ENCODE(SHA256(ASCII(code_verifier))) + code_challenge_method = S256
      • et le séparateur « & » ( /!\ pas de « ? »)
         
    • Si la donnée unsuccessfulReportUrl n’est pas renseignée, c’est la donnée valorisée au niveau de successfulReportUrl qui sera utilisée
       
    • La donnée supplementaryData doit être alimentée avec la valeur « REDIRECT »
       
    • La donnée scaHint est ignorée pour l’instant => les exemptions d’authentification forte ne sont pas appliquées
       
    • La donnée state est obligatoire pour le mode d’authentification REDIRECT mis en œuvre : elle est propagée durant tout le parcours PISP
       
    • Le champ requestedExecutionDate doit avoir une date supérieure à la date de demande d’initiation de paiement creationDateTime
       
    • Le champ creationDateTime ne doit pas être vide, et rempli comme le précédent avec une des trois expressions régulières autorisées au format ISO8601 :
      • YYYY-MM-DDTHH:MM:SS.SSS+HH:MM
      • YYYY-MM-DDTHH:MM:SS.SSS+HHMM
      • YYYY-MM-DDTHH:MM:SS.SSS

        NB : Z en fin de format signifie que l’heure est en UTC

        Exemples :

        • 2019-11-12T00:00:00.000+02:00
        • 2019-11-12T00:00:00.000+0200
        • 2019-11-12T00:00:00.000

     

     

    Choix de rendre obligatoire certains champs facultatifs de la spécification STET

    Le champ chargeBearer est obligatoire pour la méthode POST /payment-requests, et il doit avoir la valeur « SLEV ».

    Le champ categoryPurpose permet d’empêcher les virements non-marchands vers des bénéficiaires inconnus (non-enregistrés sur la banque en ligne du client) lorsque le niveau du moyen d’authentification utilisé par le client n’est pas assez élévé pour effectuer cette opération (hors Sécur’pass): ce champ est nécessaire pour savoir si le paiement est un paiement « à la volée » ou non. Il doit avoir la valeur :

    • « CASH » (opération de compte à compte)
       
    • ou « DVPM » (opération e-commerce) générant des règles de gestion différentes (voir ci-dessous).

     

     

    Contrôle sur le bénéficiaire

    Un contrôle additionnel est en place depuis le 7 décembre 2020 afin de rejeter la demande d’initiation de paiement :

    • si le bénéficiaire est absent de la liste des bénéficiaires enregistrés par le client dans sa banque en ligne
       
    • et si le champ categoryPurpose = « CASH »
       
    • et si le moyen d’authentification forte utilisé n’est pas Sécur’Pass

     

     

    Cas des SCT différé et permanent

    La date d’exécution (donnée requestedExecutionDate) d’un virement différé (ou de la première échéance d’un virement permanent) doit être positionnée au-delà de J + 72 heures, sinon la demande sera rejetée.

    Pour le SCT permanent, les fréquences (donnée frequency) possibles sont :

    • hebdomadaire
       
    • bi-mensuelle
       
    • mensuelle
       
    • trimestrielle
       
    • semestrielle
       
    • annuelle

    La date de dernière échéance (donnée endDate) doit aussi être renseignée et doit correspondre à une échéance valide dans le futur.

     

     

    Cas du SCT immédiat

    Le CUT-OFF correspond à l’heure limite à laquelle un établissement peut exécuter un virement. Cette heure limite prend en compte :

    • Les délais de traitement interne
       
    • Les CUT-OFF des différents systèmes de compensation interbancaires, eux-mêmes assujettis au CUT-OFF des différents systèmes de règlement (généralement TARGET2, voir calendrier interbancaire)

     

    Dans le cas des SEPA CREDIT TRANSFER (SCT), l’exécution doit être effectuée au plus tard dans la date de règlement correspondant à celle demandée par le donneur d’ordre. Il n’est pas permis de reporter cette date de règlement sauf lorsque l’heure de CUT-OFF est dépassée, l’exécution étant reportée à la date suivante possible (non fériée). Les dates d’exécution et de règlement sont donc fonction de l’heure d’arrivée de la demande d’initiation de paiement.

     

    Pour cet ASPSP, le CUT-OFF pour demander un virement SCT à J avec une date de règlement à J est fixé à 13h30 heure locale française.

     

    Pour rappel, l’heure locale française est égale à :

    • GMT+2 pendant l’été
       
    • GMT+1 pendant l’hiver

    Valeur du champ

    creationDateTime

    Valeur du champ

    requestedExecutionDate

    Résultat de la prise en compte de la demande

    Date

    d’exécution

    Date

    de règlement

    Jour de semaine    
    Avant 13h30Jour JOKJ

    J si non férié

     

    sinon jour suivant non férié

    Entre 13h30 (compris) et 23h59:59:999Jour JOKJ

    J+1 si non férié

     

    sinon jour suivant non férié

         
    Samedi (ou dimanche ou férié)    
    Avant 13h30Jour JOKJ

    lundi si non férié

     

    sinon jour suivant non férié

    Entre 13h30 (compris) et 23h59:59:999Jour JOKJ

    lundi si non férié

     

    sinon jour suivant non férié

     

     

    Déclenchement des parcours fluides

    Il est possible de déclencher un parcours fluide (avec deux variations) lorsque la requête contient des informations plus précises sur le débiteur :

    • Si seul l’IBAN débiteur (debtorAccount) est fourni : déclenchement de l’identification du PSU avant une authentification forte unique en fin de parcours pour sceller le paiement
       
    • Si l’IBAN débiteur (debtorAccount) et l’identifiant du PSU (privateId) sont fournis : déclenchement d’une authentification forte unique en fin de parcours pour sceller le paiement

     

     

    Codes erreur

    Type d’erreurCode HTTPLibelléMotif
    Générique, mauvaise structure400Bad requesterror code : FF01 message : RJCT
    Mauvais format du BIC400Bad requesterror 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 serviceLevel400Bad requesterror code : FF01 message : RJCT error : value not one of declared Enum instance names: [SEPA, NURG]
    Mauvais format, chargeBearer autre que SLEV400Bad requesterror code: FF01 message: RJCT error: value not one of declared Enum instance names: [SLEV]
    Mauvais format du schemeName400Bad requesterror code: FF01 message : RJCT error : le champ creditor.privateId.schemeName schemeName-Possible values BANK,COID,SREN,DSRET,NIDN,OAUT,CPAN
    Mauvais format du purpose400Bad requesterror code: FF01 message: RJCT error: value not one of declared Enum instance names: [TRPT, CASH, CPKC, ACCT, COMC]
    Mauvais format du categoryPurpose400Bad requesterror code: FF01 message: RJCT error: value not one of declared Enum instance names: [CASH, DVPM]
    Mauvais jeton d’accès, problème d’authentification403Forbidden 
    Request resource inconnu404Not Found 
    Mauvaise requête ou requête hors périmètre autorisé405Method not allowed 
    Message générique500Internal server error 
    Requête en doublon500Internal server errorerror : Problème d’insertion en base de donnée, clé unique dupliquée

    Confirmer une initiation de paiement

    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 « Cas d'usage » > « 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>
    13807BP Grand OuestBPGObanquepopulaire.fr
    17515CE Ile de FranceCEIDFcaisse-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

     

    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 (HTTP 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’erreurCode HTTPLibelléMotif
    Générique, mauvaise structure400Bad requesterror code : FF01 message : RJCT
    Mauvais format du BIC400Bad requesterror 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 serviceLevel400Bad requesterror code : FF01 message : RJCT error : value not one of declared Enum instance names: [SEPA, NURG]
    Mauvais format, chargeBearer autre que SLEV400Bad requesterror code: FF01 message: RJCT error: value not one of declared Enum instance names: [SLEV]
    Mauvais format du schemeName400Bad requesterror code: FF01 message : RJCT error : le champ creditor.privateId.schemeName schemeName-Possible values BANK,COID,SREN,DSRET,NIDN,OAUT,CPAN
    Mauvais format du purpose400Bad requesterror code: FF01 message: RJCT error: value not one of declared Enum instance names: [TRPT, CASH, CPKC, ACCT, COMC]
    Mauvais format du categoryPurpose400Bad requesterror code: FF01 message: RJCT error: value not one of declared Enum instance names: [CASH, DVPM]
    Mauvais jeton d’accès, problème d’authentification403Forbidden 
    Request resource inconnu404Not Found 
    Mauvaise requête ou requête hors périmètre autorisé405Method not allowed 
    Message générique500Internal 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 »

    }

    }

    }

    Récupérer le statut d'une initiation de paiement

    Cas d’usage

    Cette méthode permet au PISP d’obtenir le statut d’une demande d’initiation de paiement précédemment envoyée à l’ASPSP, et pour un PSU donné.

     

     

    Prérequis

    Pour procéder à cette requête il est nécessaire de remplir les prérequis d’éligibilité et d’avoir récupéré le jeton d’accès OAUTH2 (voir la rubrique « 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 d’initation de paiement ou de virement sauvegardée.

     

     

    Requête

    GET /payment-requests/{paymentRequestResourceId}

     

     

    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 accéder au statut.

     

     

    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 les données de l’initiation de paiement enrichies du statut de la requête d’initiation et du paiement associé.

    Les valeurs possibles pour le statut de la demande de paiement sont les suivantes (valeurs pour la version STET v1.4.2.17) :

    CodeDescription
    ACCPProfil Client Accepté (AcceptedCustomerProfile) : la vérification précédente de la validation technique a été réussie. La vérification du profil du client a également été réussie.
    ACSCRèglement accepté terminé (AcceptedSettlementCompleted) : le règlement sur le compte du débiteur est terminé.
    ACSPRèglement accepté en cours (AcceptedSettlementInProcess) : toutes les vérifications précédentes, telles que la validation technique et le profil du client, ont abouti. L’évaluation dynamique des risques est également un succès et la demande de paiement a donc été acceptée pour exécution.
    ACTCValidation technique acceptée (AcceptedTechnicalValidation) : l’authentification et la validation syntaxique et sémantique ont réussi.
    ACWCAccepté avec changement (AcceptedWithChange) : les instructions sont acceptées mais une modification sera apportée, telle que la date ou le versement non envoyé.
    ACWPAccepté sans écriture (AcceptedWithoutPosting) : les instructions de paiement incluses dans le virement sont acceptées sans être enregistrées sur le compte du client créancier.
    CANCAnnulé (Cancelled) : l’initiation de paiement a été annulée après réception d’une requête d’annulation.
    PARTPartiellement accepté (PartiallyAccepted) : un certain nombre de transactions ont été acceptées, tandis qu’un autre nombre n’a pas encore atteint le statut «accepté».
    PATCPartiellement accepté (PartiallyAcceptedTechnicalCorrect) : plusieurs authentifications sont nécessaires et certaines ont été effectuées, mais pas toutes. Les vérifications sémantiques et synthaxiques sont correctes
    RCVDReçu (Received) : le paiement a été initié par l’agent destinataire.
    PDNGEn attente (Pending) : une demande de paiement ou une transaction individuelle incluse dans la demande de paiement est en attente. Des vérifications supplémentaires et une mise à jour du statut seront effectuées.
    RJCTRejeté (Rejected) : la demande de paiement a été rejetée.

    Le tableau suivant reprend les valeurs possibles pour le statut de l’initiation de paiement et de la transaction de paiement associée (valeurs pour la version STET v1.4.2.17)suite à une requête d’initiation de paiement :

    Etape de traitementRésultat de l’étapeValeur de paymentInformationStatus à l’issue de l’étapeValeur de creditTransferTransaction / transactionStatus à l’issue de l’étape
    Contrôle et enregistrement de la requête d’initiationOKACTC
    KORJCT
    Consentement (début consommation de l’URL consentAproval)OKACCP
    KORJCT
    Demande d’exécution du paiement (juste avant retour REDIRECT vers l’application du TPP)OK

    ACSP

     

    (ou PDNG uniquement en environnement sandbox)

    PDNG si virement exécuté à J, ACSP sinon

     

    (forcé à PDNG en environnement sandbox)

    KORJCTRJCT
    Si le PSU ne fait aucune action de consentement (validation ou refus) dans les 30 minutes suivant la requête d’initiationRJCT (raison NOAS)RJCT (raison NOAS)
    Date d’exécution du paiement avant mise à jour du statut la nuitACSPACSP
    Date d’exécution de paiement après mise à jour du statut la nuitOKACSCACSC
    KORJCTRJCT

    Le tableau suivant reprend les valeurs possibles pour le statut de l’initiation de paiement et de la transaction de paiement associée (valeurs pour la version STET v1.4.2.17) suite à une requête d’annulation d’une initiation de paiement :

    Etape de traitementRésultat de l’étapeValeur de paymentInformationStatus à l’issue de l’étapeValeur de crediTransferTransaction / transactionStatus à l’issue de l’étape
    Avant réception de la demande d’annulation du paiementACTC / ACCP / ACSP– / PDNG (si paymentInformationStatus = ACSP)
    Contrôle et enregistrement de l’annulation de requête d’initiation juste avant la réponse à la requête d’annulationOKRJCT / RJCT / ACSP– / PDNG (si paymentInformationStatus = ACSP)
    KOACTC / ACCP / ACSP– / PDNG (si paymentInformationStatus = ACSP)
    ConsentementOKACSPPDNG
    KOACSPPDNG
    Appel au service d’annulation du paiement juste avant la redirection sur l’application du TPPOKCANC (DS02, DUPL, FRAD, TECH)CANC (DS02, DUPL, FRAD, TECH)
    KOACSPPDNG

     

     

    Restitution de l’IBAN du compte débité

    Depuis fin octobre 2020, l’IBAN du compte débité est systématiquement retourné par cette requête, même si cette donnée n’était pas présente dans la requête initiale de demande d’initiation de paiement.

     

     

    Codes erreur

    Type d’erreurCode HTTPLibelléMotif
    Mauvais access token, problème d’authentification403Forbidden 
    Request resource inconnu404Not FoundRessource inconnue
    Mauvaise requête ou requête hors périmètre autorisé405Method not allowed 
    Message générique500Internal server error 
    Requête en doublon500Internal server errorerror : Problème d’insertion en base de donnée, clé unique dupliquée

     

    Annuler une initiation de paiement

    Cas d’usage

    Cette méthode permet au PISP d’annuler une demande d’initiation de paiement déjà enregistrée, à condition que le paiement n’ait pas encore été exécuté et que sa date d’exécution n’est pas atteinte (i.e. date d’exécution prévue au moins à J+1 par rapport à la date de demande d’annulation).

    Autrement dit, cet appel permet d’envoyer à la banque (ASPSP) d’un client une demande d’annulation 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 n’est pas encore échu.

    Pour cet ASPSP, un virement SCT qui a été initié via l’API DSP2 PISP (quelle que soit la version) est annulable via l’API DSP2 PISP ou directement par le PSU via son application web ou mobile.

     

     

    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 DSP2 API PISP en version 1.4.2 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.

    Corollaire : pour annuler une initiation de paiement qui a été initiée par l’API DSP2 en version 1.4.0, il convient d’utiliser une requête DSP2 PISP en version 1.4.0 également (i.e. PUT /stet/psd2/v1/payment-requests/{resourceId}).

     

     

    Requête

    Le point d’entrée dépendra du code établissement. Vous devez utiliser la même valeur du paramètre <cdetab> que celle utilisée pour le jeton d’accès.

    Pour rappel, la liste de nos établissements et les valeurs possibles des <cdetab> sont précisées dans la rubrique « Limitations« .

    Par exemple, voici la requête pour annuler en production un paiement pour un client de la CEIDF :

     

     

    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 annuler le virement.

    La structure du body et les champs obligatoires sont décrits dans la norme STET.

    En préalable, le Tiers de Paiement 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 est à un statut annulable. Pour savoir si un virement est éligible, les informations suivantes doivent être valorisées dans la requête comme suit :

    • La donnée paymentInformationStatus doit avoir l’une des valeurs : ACTC / ACCP / ACSP
    • La donnée transactionStatus (au niveau de la transaction dans l’objet creditTransferTransaction) doit avoir la valeur PDNG (si paymentInformationStatus = ACSP), sinon il ne doit pas être renseigné
    • La donnée serviceLevel doit être renseigné à SEPA (seuls les virements SCT différé et permanent sont annulables)
    • La donnée currency doit être renseignée à EUR
    • La donnée localInstrument ne doit pas être valorisée
    • La donnée requestedExecutionDate doit être dans le futur : à minima à J+1

    Pour permettre à la banque de comprendre que la requête est une demande d’annulation d’une initiation de paiement, certaines informations doivent être modifiées dans la requête comme suit (API DSP2 STET_V1.4.2.17 Part 3 Interaction Examples p.23) :

    • La donnée transactionStatus (au niveau de la transaction dans l’objet creditTransferTransaction) doit être positionnée à « RJCT » (Rejeté)
    • La donnée statusReasonInformation (au niveau de la transaction dans l’objet creditTransferTransaction) doit être positionnée avec l’une des valeurs suivantes :
    statusReasonInformationSignification
    DS02Annulation à la demande du client
    DUPLAnnulation à la demande du PISP en cas de doublon par rapport à un paiement/virement précédent
    FRADAnnulation à la demande du PISP si l’origine du paiement/virement est frauduleux
    TECHAnnulation à la demande du PISP pour un problème technique de son côté
    • Il faut également enlever toute la partie _links
    • Pour finir, il faut supprimer l’intitulé du parent « paymentRequest »: { » ainsi que l’accolade fermante en bas du flux « }« 

    Les autres données de la requête doivent être identiques à celles récupérées avec la méthode GET.

     

     

    Cas du SCT Récurrent

    L’initiation d’un paiement récurrent peut être annulée tant qu’elle est en cours de traitement (ACSP) jusqu’à l’exécution du dernier paiement.

    Si tous les paiements ont été exécutés, l’initiation d’un paiement récurrent est impossible à annuler.

     

     

    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 annuler 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’erreurCode HTTPLibelléMotif
    Générique, mauvaise structure400Bad requesterror code : FF01 message : RJCT
    Mauvais format du BIC400Bad requesterror 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 serviceLevel400Bad requesterror code : FF01 message : RJCT error : value not one of declared Enum instance names: [SEPA, NURG]
    Mauvais format, chargeBearer autre que SLEV400Bad requesterror code: FF01 message: RJCT error: value not one of declared Enum instance names: [SLEV]
    Mauvais format du schemeName400Bad requesterror code: FF01 message : RJCT error : le champ creditor.privateId.schemeName schemeName-Possible values BANK,COID,SREN,DSRET,NIDN,OAUT,CPAN
    Mauvais format du purpose400Bad requesterror code: FF01 message: RJCT error: value not one of declared Enum instance names: [TRPT, CASH, CPKC, ACCT, COMC]
    Mauvais format du categoryPurpose400Bad requesterror code: FF01 message: RJCT error: value not one of declared Enum instance names: [CASH, DVPM]
    Mauvais jeton d’accès, problème d’authentification403Forbidden 
    Request resource inconnu404Not Found 
    Mauvaise requête ou requête hors périmètre autorisé405Method not allowed 
    Message générique500Internal server error 


     

    Assemblage sandbox

    Introduction – précisions sur les fonctionnalités de la sandbox

    La sandbox BPCE API peut être utilisée directement via votre application en appelant l’API « Initiation de paiement » de la plateforme BPCE API (assemblage sandbox).

    En assemblage sandbox, il y a deux types d’appel :

    • Le premier pour récupérer le jeton d’autorisation (voir la rubrique « Cas d'usage  » > « Récupérez votre jeton« ) ;
    • Le second pour faire l’appel à l’API « Initiation de paiement » (voir les cas d’usage « Initier un paiement« , « Récupérer le statut d’une initiation de paiement« , « Confirmer une initiation de paiement » et « Annuler une initiation de paiement »).

     

    Limitations en environnement sandbox 

    • Le cas d’usage « Annuler une initiation de paiement », n’est pas totalement testable dans l’environnement sandbox car cette méthode nécessite un croisement des données dynamiques alors que notre sandbox a un comportement statique :
      • Les requêtes d’annulation d’une initiation de paiement sont acceptées dès que le format de la requête est correct (l’identifiant de l’initiation de paiement étant supposé exister).

    Votre application consommatrice de l’API « Initiation de paiement » en assemblage sandbox va devoir récupérer un jeton d’accès via sa clé d’authentification auprès de l’AS (Authentification Server).

    Ainsi votre application pourra consommer les méthodes « POST /payment-requests« , « GET /payment-requests/{payementRequestResourceId}« , « POST /payment-requests/{payementRequestResourceId}/o-confirmation » et « PUT /payment-requests/{payementRequestResourceId} » grâce à son jeton d’accès.

    Les appels des méthodes de l’API pourront être enchaînés :

    • En exécutant la requête de création du paiement « POST /payment-requests ».
    • Puis, en exécutant la requête de récupération du statut du paiement « GET /payment-requests/{paymentRequestResourceId} en passant en paramètre le « paymentRequestResourceId » récupéré du résultat de la première requête.
    • Puis, en exécutant la requête de confirmation du paiement « POST /payment-requests/{paymentRequestResourceId}/o-confirmation » en passant en paramètre le « paymentRequestResourceId » récupéré du résultat de la première requête.
    • Puis, en exécutant la requête d’annulation du paiement « PUT /payment-requests/{payementRequestResourceId} » en passant en paramètre le « paymentRequestResourceId » et le body modifié récupéré du résultat de la seconde requête.

    Les données utilisées pour faire les tests seront issues des personas (voir la rubrique « Comment tester l’API ? » > « Testez nos persona« ), ce qui permettra de choisir des profils spécifiques selon les tests de façon à mieux appréhender les résultats obtenus.

     

     

    Prérequis

    Vous devez déclarer votre APP sur le portail BPCE API (cf. menu « Mes applications« ) et nous transmettre les clés publiques de vos certificats QWAC et QSEALC de test afin que nous puissions :

    • Déclarer votre APP comme application consommatrice de l’API ;
    • Intégrer vos clés publiques QWAC et QSEALC dans nos infrastructures ;
    • Récupérer et contrôler votre organizationId et votre rôle « PISP » dans notre registre des TPP.

    Rappel : en tant que TPP, vous devez être accrédité par l’une des autorités compétentes nationales européennes (ACPR en France) pour le rôle d’initiateur de paiement (« PISP »).

     

     

    Enchaînement des étapes pour tester l’accès à l’API PISP depuis votre APP 1ère étape : Récupérer un jeton d’accès

    Cet appel vous permet de récupérer le jeton forgé par le serveur d’authentification de l’établissement et qui un prérequis pour chaque accès à l’une des méthodes de l’API d’initiation de paiement.

    La description de la fonctionnalité et des champs de la requête est décrite dans la rubrique « Vue d’ensemble » > « Récupérez votre jeton« .

    Afin de pouvoir interroger le bon backend, dans le parcours client, il est nécessaire que vous prévoyiez d’interroger le client au préalable sur son établissement de rattachement.

    Pour l’accès à l’assemblage sandbox, le point d’entrée dépend du code établissement : www.<cdetab>.sandbox.api.89c3.com

    Les seuls établissements bancaires utilisables en assemblage sandbox pour cette API sont les suivants (code établissement <cdetab> utilisé dans les URL) :

    Code établissementNom de l’établissementNom abrégé
    13807B.P Grand OuestBPGO
    13807CMM Grand OuestCMMGO
    17515Caisse d’Epargne Ile De FranceCEIDF
    12579Banque BCPBBCP

    Requête :

    POST https://www.13807.sandbox.api.89C3.com/stet/psd2/oauth/token

    Dans les headers :

    Content-Type : application/x-www-form-urlencoded; charset=utf-8

    Dans les params :

    client_id : PSDFR-ACPR-12345

    grant_type : client_credentials

    scope : pisp

    Remarques sur l’alimentation des champs :

    <cdetab> => code établissement des deux banques disponibles dans cet environnement soit :

    13807 (Banque Populaire Grand Ouest) ;

    17515 (Caisse d’Epargne Ile de France).

    client_id :

    Si l’enregistrement du TPP a été réalisé au travers du processus de « GoLive » via notre portail BPCE API.

    => numéro d’agrément donné par votre autorité compétente (PSDXX-YYYYYYYY-ZZZZZZZZ)

    Ou si l’enregistrement du TPP a été réalisé via l’API Enregistrement DSP2 client_id retourné dans la réponse au POST /register

    => client_id retourné dans la réponse au POST /register

    grant_type => non modifiable = « client_credentials »

    Réponse :

    {

    « access_token » : « firstAccessToken_ABCXdBobTpdwRRaYy2H3w7pP5Xe61e1R9rwxMuhk7G0fULg8x6kJHz »,

    « token_type » : « Bearer »,

    « expires_in » : « 3600 »,

    « scope » : « pisp »

    }

    Remarques sur l’alimentation des champs :

    access_token => tokenCredential à transmettre dans le header authorization des requête de l’API d’initiation de paiement après le Bearer XX.

    expires_in => durée de validité du token en secondes.

     

     

    2ème étape : Initier un paiement

    Cet appel vous permet d’initier un paiement en demandant au PSU connecté de donner son consentement pour le paiement.

    La description de la fonctionnalité et des champs de la requête est décrite dans le cas d’usage « Initier un paiement« .

    Rappel : la méthode d’authentification supportée par l’établissement bancaire est le mode REDIRECTrenforcé => les cinématiques des enchaînements des écrans d’identification et d’authentification forte décrites ci-après correspondent à ce mode d’authentification.

    Pour l’accès à l’assemblage sandbox, le point d’entrée est identique : www.<cdetab>.sandbox.api.89c3.com

    Requête :

    POST https://www.13807.sandbox.api.89C3.com/stet/psd2/v1.4.2/payment-requests

    Authorization : Bearer firstAccessToken_ABCXdBobTpdwRRaYy2H3w7pP5Xe61e1R9rwxMuhk7G0fULg8x6kJHz

    Headers :

    Content-Type : application/json

    Signature : keyId=\ »https://<www.myUrlPath.to>/myQsealCertificate_‎<empreinte-sha256>\« , algorithm=\ »rsa-sha256\ », headers=\ »(request-target) psu-ip-address psu-ip-port psu-http-method psu-date psu-user-agent psu-referer psu-accept psu-accept-charset psu-accept-encoding psu-accept-language digest\ », signature=\ »LbkxgICM48J6KdWNaF9qT7OWEorNlAwWNo6R+KkP7cP4TIGkk8wxcsGQXJ9ZnC+ZiA8mjL5S8WQyL41M7iPt+vJX4xh679gdGwmlKzn7E+ZtZ1I4qalRxcdLp4gBL7fll+C2lVBNJrViMJBezFK7AYVjnSWH7t1QxiMVg3CmoRM=\ »

    X-Request-ID : MyXrequestId123

    Body :

    { « paymentInformationId »: « MyPmtInfld123 », « creationDateTime »: « 2021-09-05T09:25:22.527+02:00 », « numberOfTransactions »: 1, « requestedExecutionDate »: « 2021-09-06T14:10:10.109+01:00 », « debtorAgent »: { « clearingSystemMemberId »: { « clearingSystemId »: « clearingSystemId », « memberId »: « memberId » }, « bicFi »: « CCBPFRPP512 », « name »: « Cpy Name », « postalAddress »: { « country »: « FR », « addressLine »: [ « 512 rue De Gaulle », « 85000 LRSY » ] } }, « initiatingParty »: { « name »: « Pisp Name », « postalAddress »: { « country »: « FR », « addressLine »: [ « 512 rue Reaumur », « 75512 PARIS » ] }, « organisationId »: { « identification »: « 12FR5 », « schemeName »: « COID », « issuer »: « ACPR » } }, « paymentTypeInformation »: { « serviceLevel »: « SEPA », « categoryPurpose »: « DVPM » }, « debtor »: { « name »: « Customer Name », « postalAddress »: { « country »: « FR », « addressLine »: [ « 512 rue Leclerc », « 94512 Charenton-le-Pont » ] } }, « beneficiary »: { « creditor »: { « name »: « Amazon SA », « postalAddress »: { « country »: « FR », « addressLine »: [ « 512 avenue Maupassant », « 75512 PARIS » ] }, « organisationId »: { « identification »: « 852126790 », « schemeName »: « BANK », « issuer »: « FR » } }, « creditorAgent »: { « name »: « Creditor Name », « bicFi »: « CCBPFRPP512 », « postalAddress »: { « country »: « FR », « addressLine »: [ « 512 rue de la primaube », « 12512 RODEZ » ] }, « clearingSystemMemberId »: { « clearingSystemId »: « clearingSystemId », « memberId »: « memberId! » } }, « creditorAccount »: { « iban »: « FR7613825002000400000541718 » } }, « chargeBearer »: « SLEV », « creditTransferTransaction »: [ { « purpose »: « COMC », « paymentId »: { « instructionId »: « instructionId 1630919339 », « endToEndId »: « endToEndId 1630919339 » }, « instructedAmount »: { « currency »: « EUR », « amount »: « 2.41 » }, « remittanceInformation »: { « unstructured » : [ « remittanceInformation01 » ] } } ], « supplementaryData »: { « acceptedAuthenticationApproach »: [ « REDIRECT » ], « scaHint »: « scaExemption », « successfulReportUrl »: https://extensions.bpce.fr/OAuth2Callback.aspx&state=OK- 12345&code_challenge_method=S256&code_challenge=ABCD } }

    Remarques sur l’alimentation des champs :

    Authorization : Bearer => access_token récupéré pour le tokenCredential

    Les données suivantes devant être unique, sans quoi la requête est rejetée pour cause de doublon (le rejeu n’est pas autorisé) :

    paymentInformationId ;

    instructionId ;

    endToEndId ;

    x-request-id.

    debtor/privateId/identification => identifiant d’accès à la banque à distance pour le PSU : lorsqu’il est renseigné et que debtorAccount est renseigné, l’appel à l’écran d’identification du PSU n’est pas effectué.

    debtorAccount => IBAN du PSU : lorsqu’il est renseigné, le seul compte sélectionnable pour le PSU est celui qui correspond à cet IBAN, pour peu que le compte soit éligible aux virements PISP.

    Les fonctionnalités mises en œuvre peuvent différer entre les Banques Populaires et les Caisses d’Epargne (cf. cas d’usage « Initier un paiement« ).

    Réponse :

    {

    « appliedAuthenticationApproach » : « REDIRECT »,

    « _links » : {

    « consentApproval » : {

    « href » : »https://www.13807.sandbox.api.89c3.com/89C3api/accreditation/v2/identificationPisp?paymentRequestResourceId=00000000a22-156688979900016807956016&nonce=qJammuGI0OGCwznaZ0YO”,

    « templated » : true

    }

    }

    }

    Headers :

    X-Request-ID : MyXrequestId123

    Status code : 201 OK

    Remarques sur l’alimentation des champs :

    paymentRequestResourceId => identifiant à passer à la requête GET /payment-requests pour récupérer le statut de l’initiation de paiement

    appliedAuthenticationApproach » = « REDIRECT » => seule valeur autorisée

    href => URL de la page de redirection vers les écrans d’identification et d’authentification de l’établissement

    nonce => anti rejeu technique

    currency => récupérée du body passé en entrée

    successfulReportUrl => récupérée du body passé en entrée

    unsuccessfulReportUrl => récupérée du body passé en entrée

    iban => récupérée du body passé en entrée

    creditorName => récupérée du body passé en entrée

    X-Request-ID: transmis en entrée

     

     

    3ème étape : La redirection vers les écrans pour que le PSU valide le paiement

    Cinématique nominale des enchaînements des écrans d’identification et d’authentification forte

    Image
    Nominal kinematics of identification and strong authentication screen sequences

     

    Déroulé de l’enchaînement des écrans d’identification et d’authentification forte :

    A partir de l’URI retournée dans « consentApproval« , il est possible de jouer l’enchaînement des écrans.

    1) Le PSU est redirigé vers un écran d’identification proposé par son établissement bancaire et dans lequel il saisira son identifiant de banque à distance.

    Attention : l’appel à cet écran ne peut être effectué qu’une seule fois

    => le nonce transmis dans l’URL permettant d’accéder à cet écran n’est utilisable qu’une seule fois (il est grillé en suite par l’anti-rejeu)

    => si l’application du TPP ou le PSU ne déroule pas l’ensemble du process en une fois, une nouvelle demande d’initiation de paiement (paymentRequest) sera nécessaire.

    Image
    identification screen

    L’identifiant de banque à distance du PSU est à saisir (voir rubrique « Comment tester l’API? » > « Tester nos persona » pour les jeux de données de l’établissement), exemple pour le persona « Marc » des Banques Populaires :

    Image
    identification screen with remote banking identifier of the customer

    Remarque : Le bouton « Mémoriser mon identifiant » n’est pas opérationnel. L’activer ne sert à rien.

    Pour les Caisses d’Epargne, si le PSU est un professionnel ou une entreprise, il devra saisir son numéro d’usager en plus de son identifiant de banque à distance.

    Image
    Ecran Caisse d'Epargne pour saisir son numéro d’usager en plus de son identifiant de banque à distance

    2) Le PSU est redirigé vers un premier écran d’authentification forte proposé par son établissement bancaire pour valider son identité.

    Image
    first authentication screen

    Le code SMS pour authentification est à saisir (voir rubrique « Comment tester l’API? » > « Tester nos persona » pour les jeux de données de l’établissement), exemple pour le persona « Marc » des Banques Populaires:

    Image
    first authentication screen with SMS number

    En production live : La cinématique de cette étape dépend de la méthode d’authentification forte mise à disposition du PSU par l’établissement bancaire (SMS OTP, secur’pass, etc.).

    Elle dépend aussi de l’équipement du PSU sur lequel tourne l’application du PISP utilisée par le PSU (PC ou mobile/smartphone/tablette).

    Note : en environnement de sandbox, le code SMS à saisir est systématiquement : « 12345678 »

    3) Le PSU est redirigé vers un écran de sélection de son compte à débiter proposé par son établissement bancaire.

    Exemple de restitution pour le persona « Marc » des Banques Populaires qui dispose de 4 comptes (voir rubrique « Comment tester l’API? » > « Tester nos persona » pour les jeux de données de l’établissement) :

    Image
    screen to select the customer account to be debited

    NB : Si le PISP fournit l’IBAN du PSU à débiter dans sa requête (champ « debtorAccount »), seul le compte correspondant sera sélectionnable et proposé au PSU : exemple ci-dessous pour le persona Tech’n Co des Banques Populaires.

    Image
    example of screen when the IBAN of the customer to be debited is indicated

    NB : Si le PSU ne dispose pas de compte, la requête d’initiation de paiement ne va pas aboutir et le PSU va être redirigé vers votre APP. Exemple pour le persona « Thomas » des Banques Populaires.

    Image
    example of screen when the customer doesn't have any account to use

    4) Le PSU sélectionne et valide le compte à débiter.

    Image
    screen when the customer selects and validates the account to be debited

    5) Le PSU est redirigé vers un second écran d’authentification forte proposé par son établissement pour valider son paiement.

    Ecrans identiques à l’écran d’authentification forte de l’étape (2) pour valider l’identité du PSU, hormis l’écran de saisi du mot de passe qui n’est pas représenté.

    Des exemptions sont possibles pour l’étape d’AF pour valider le paiement => cette possibilité n’est pas disponible.

    Le PISP peut renseigner un indicateur lui permettant d’indiquer qu’il considère la demande de paiement comme étant un cas d’exemption d’authentification forte. La décision finale d’appliquer ou non une exemption d’authentification forte reste à l’appréciation de l’ASPSP.

    Les cas de dérogation à l’obligation d’authentification forte du PSU si les exigences générales en matière d’authentification sont remplies sont décrits dans l’article 2 des RTS de la DSP2.

    6) Le PSU est redirigé vers l’APP du PISP.

    Le PISP fournit lors de sa demande d’initiation une ou deux URL de call back :

    La première (successfulReportUrl) sera appelée par l’établissement bancaire dans le cas où la demande d’initiation est traitée et si le PSU a donné son consentement pour le paiement. Un paramètre code est ajouté à la successfulReportUrl.

    Exemple : https://<votre SuccessfulReportUrl>?code=GbmTn1ZZ76bibgvCRLxD4lNp8wMzkd

    Cette information est importante car nécessaire pour obtenir le token d’accès à la méthode o-confirmation.

    La seconde URL (unsuccessfulReportUrl) sera utilisée par l’établissement bancaire en cas de refus du consentement ou si la cinématique de validation de l’initiation de paiement est interrompue à une de ses étapes (exemple : timeout sur l’écran d’identification, sur l’écran de sélection du compte à débiter ou sur les écrans d’authentification forte). Cette seconde URL est facultative : la première URL call back (successfulReportUrl) sera utilisée si la seconde n’est pas renseignée, mais sans ajout de paramètre « code ».

     

     

    3ème étape alternative : La redirection vers les écrans pour que le PSU valide le paiement en cas de parcours fluides

    Cinématique nominale des enchaînements des écrans d’identification et d’authentification forte

    Par défaut, il est demandé au PSU de s’authentifier fortement à deux reprises pour déclencher une demande de paiement. Il est possible de déclencher deux parcours fluides lorsque la requête contient des informations plus précises sur le compte débiteur :

    • Parcours Fluide Bis : le debtorAccount est renseigné dans la demande d’initation de paiement
    • Parcours Fluide : le debtorAccount et le privateId (*) sont renseignés dans la demande d’initation de paiement
    Parcours Fluide BisParcours Fluide
    Image
    Cinématique nominale des enchaînements des écrans d’identification et d’authentification forte - Parcours bis
    Image
    Cinématique nominale des enchaînements des écrans d’identification et d’authentification forte - Parcours fluide

    (*) Pour les Caisses d’Epargne, Banque BCP, Crédit Coopératif et BTP Banque et pour les segments de clientèles PRO et ENT : il s’agit du numéro d’abonné séparé du numéro d’usager par un tiret « -« .

    Le déclenchement du parcours fluide Bis redirige le PSU vers l’écran de saisie de l’identifiant, c’est le même que dans le parcours classique. L’enchainement qui suit est le même peu importe le type de parcours fluide.

    1 ) Le PSU est redirigé vers un écran récapitulatif de l’opération, il peut la valider ou l’annuler

    Exemple de restitution pour le persona « Marc » des Banques Populaires qui dispose de 4 comptes dont le compte numéro 30019654051, (voir la rubrique « Comment tester l’API ? » > « Testez nos personas » pour les jeux de données de l’établissement) :

    Image
    Ecran de restitution de l'opération - Parcours fluide

    2) Le PSU est redirigé vers un premier écran d’authentification forte proposé par son établissement bancaire pour valider son identité.

    Image
    first authentication screen

    Le code SMS pour authentification est à saisir ((voir la rubrique « Comment tester l’API ? » > « Testez nos personas«  pour les jeux de données de l’établissement), exemple pour le persona « Marc » des Banques Populaires:

    Image
    first authentication screen with SMS number

    La cinématique de cette étape dépend de la méthode d’authentification forte mise à disposition du PSU par l’établissement bancaire (mot de passe + SMS OTP, secur’pass, etc.).

    Elle dépend aussi de l’équipement du PSU sur lequel tourne l’application du PISP utilisée par le PSU (PC ou mobile/smartphone/tablette).

    Note : en environnement de sandbox, le code SMS à saisir est systématiquement : « 12345678 »

    3 ) Le PSU est ensuite redirigé vers l’APP du PISP, avec la fourniture du paramètre « code »

     

     

    4ème étape : Récupérer le statut d’une initiation de paiement

    Cet appel GET /payment-requests/{paymentRequestResourceId} vous permet de récupérer l’ensemble des données de l’initiation de paiement enrichies du resourceId et des statuts de l’initiation et du paiement qu’elle contient. La description de la fonctionnalité et des champs de la requête est décrite dans le cas d’usage « Récupérer le statut d’une initiation de paiement« . Les données sont accessibles pendant 35 jours.

    Pour l’accès à l’assemblage sandbox, le point d’entrée est identique aux requêtes précédentes :

    Requête :

    GET https://www.13807.sandbox.api.89c3.com/stet/psd2/v1.4.2/payment-requests/0000000a22-156688979900016807956016

    Headers :

    Authorization : Bearer firstAccessToken_ABCXdBobTpdwRRaYy2H3w7pP5Xe61e1R9rwxMuhk7G0fULg8x6kJHz

    Content-Type : application/json

    Signature : keyId=\ »https://<www.myUrlPath.to>/myQsealCertificate_‎<empreinte-sha256>\« , algorithm=\ »rsa-sha256\ », headers=\ »(request-target) psu-ip-address psu-ip-port psu-http-method psu-date psu-user-agent psu-referer psu-accept psu-accept-charset psu-accept-encoding psu-accept-language digest\ », signature=\ »LbkxgICM48J6KdWNaF9qT7OWEorNlAwWNo6R+KkP7cP4TIGkk8wxcsGQXJ9ZnC+ZiA8mjL5S8WQyL41M7iPt+vJX4xh679gdGwmlKzn7E+ZtZ1I4qalRxcdLp4gBL7fll+C2lVBNJrViMJBezFK7AYVjnSWH7t1QxiMVg3CmoRM=\ »

    X-Request-ID : MyXrequestId123

    Remarques sur l’alimentation des champs :

    Authorization : Bearer => access_token récupéré pour le tokenCredential.

    x-request-id => doit être le même que pour la requête d’initiation de paiement

    Le paymentRequestResourceId est récupéré en réponse à la requête d’initiation de paiement, lorsque l’initiation de paiement a été traité et que le PSU a donné son consentement pour le paiement.

    Réponse :

    { « paymentRequest »: { « resourceId »: « 0000000a22-156688979900016807956016 », « paymentInformationId »: « azertyui 1630919339 », « creationDateTime »: « 2021-09-05T09:25:22.527+02:00 », « numberOfTransactions »: 1, « initiatingParty »: { « name »: « Pisp Name », « postalAddress »: { « country »: « FR », « addressLine »: [ « 512 rue Reaumur », « 75512 PARIS » ] }, « organisationId »: { « identification »: « 12FR5 », « schemeName »: « COID », « issuer »: « ACPR » } }, « paymentTypeInformation »: { « serviceLevel »: « SEPA », « categoryPurpose »: « DVPM » }, « debtor »: { « name »: « Customer Name », « postalAddress »: { « country »: « FR », « addressLine »: [ « 512 rue Leclerc », « 94512 Charenton-le-Pont » ] } }, « debtorAccount »: { « iban »: « FR7613807000243021933556300 » }, « debtorAgent »: { « bicFi »: « CCBPFRPP512 », « clearingSystemMemberId »: { « clearingSystemId »: « clearingSystemId », « memberId »: « memberId » }, « name »: « Cpy Name », « postalAddress »: { « country »: « FR », « addressLine »: [ « 512 rue De Gaulle », « 85000 LRSY » ] } }, « beneficiary »: { « isTrusted »: false, « creditorAgent »: { « bicFi »: « CCBPFRPP512 », « clearingSystemMemberId »: { « clearingSystemId »: « clearingSystemId », « memberId »: « memberId! » }, « name »: « Creditor Name », « postalAddress »: { « country »: « FR », « addressLine »: [ « 512 rue de la primaube », « 12512 RODEZ » ] } }, « creditor »: { « name »: « Amazon SA », « postalAddress »: { « country »: « FR », « addressLine »: [ « 512 avenue Maupassant », « 75512 PARIS » ] }, « organisationId »: { « identification »: « 852126790 », « schemeName »: « BANK », « issuer »: « FR » } }, « creditorAccount »: { « iban »: « FR7613825002000400000541718 » } }, « chargeBearer »: « SLEV », « paymentInformationStatus »: « ACCP », « requestedExecutionDate »: « 2021-09-06T14:10:10.109+01:00 », « creditTransferTransaction »: [ { « paymentId »: { « resourceId »: « 0000006537-163091934100113807153727 », « instructionId »: « instructionId 1630919339 », « endToEndId »: « endToEndId 1630919339 » }, « requestedExecutionDate »: « 2021-09-06T15:10:10.109+02:00 », « instructedAmount »: { « currency »: « EUR », « amount »: « 2.41 » }, « purpose »: « COMC », « regulatoryReportingCodes »: [], « remittanceInformation »: { « unstructured »: [ « remittanceInformation01 » ] } } ], « supplementaryData »: { « acceptedAuthenticationApproach »: [ « REDIRECT » ], « appliedAuthenticationApproach »: « REDIRECT », « scaHint »: « scaExemption », « successfulReportUrl »: « https://extensions.bpce.fr/OAuth2Callback.aspx&state=OK-12345&code_challenge_method=S256&code_challenge=ABCD » } }, « _links »: { « request »: { « href »: « /stet/psd2/v1.4.2/payment-requests/00000000a22-156688979900016807956016 », « templated »: false }, « confirmation »: { « href »: « /stet/psd2/v1.4.2/payment-requests/00000000a22-156688979900016807956016/o-confirmation », « templated »: false } }

    Headers :

    X-Request-ID : MyXrequestId123

    Status code : 200 OK

    Remarques sur l’alimentation des champs :

    resourceId => reprend le paymentRequestResourceId

    paymentInformationStatus => reprend le statut de l’initiation de paiement

    transactionStatus => reprend le statut de l’opération resourceId

    X-Request-ID: transmis en entrée

     

     

    5ème étape : Confirmer une initiation de paiement (uniquement en production, PAS en sandbox)

    Cet appel POST /payment-requests/{paymentRequestResourceId}/o-confirmation vous permet de confirmer une initiation paiement. La description de la fonctionnalité et des champs de la requête est décrite dans le cas d’usage « Confirmer une initiation un paiement« .

    La méthode POST /payment-requests/{paymentRequestResourceId}/confirmation n’est pas implémentée.

    En préalable à la consommation du service o-confirmation, il est requis d’obtenir un jeton d’accès spécifique via la requête suivante :

    Requête :

    POST https://www.13807.live.api.89C3.com/stet/psd2/oauth/token

    Dans les Headers :

    Content-Type : application/x-www-form-urlencoded; charset=utf-8

    Dans le body :

    grant_type : authorization_code

    client_id : PSDFR-ACPR-12345

    code : le code récupéré en paramètre de l’appel à la successfulReportUrl en fin d’étape 3

    code_verifier : en fonction de vos éléments PKCE

    redirect_uri: https://myAPP.fr/Home/OAuth2Callback

    Remarques sur l’alimentation des champs :

    <cdetab> => code établissement des deux banques disponibles dans cet environnement soit :

    13807 (Banque Populaire Grand Ouest) ;

    17515 (Caisse d’Epargne Ile de France).

    client_id :

    Si l’enregistrement du TPP a été réalisé au travers du processus de « GoLive » via notre portail BPCE API :

    => il s’agit du numéro d’agrément donné par votre autorité compétente (PSDXX-YYYYYYYY-ZZZZZZZZ)

    OU

    si l’enregistrement du TPP a été réalisé via l’API Enregistrement DSP2, client_id retourné dans la réponse au POST /register :

    => il s’agit du client_id retourné dans la réponse au POST /register

    redirect_uri : URL de redirection prédéclarée dans votre application consommatrice ET à communiquer à l’ASPSP :

    • lors de l’étape GO Assemblage (resp. GO Live en production) si le TPP a été enregistré par la procédure actuelle ;
    • via l’API Enregistrement DSP2 si le TPP s’est enregistré par la procédure automatisée.

    grant_type => non modifiable = « authorization_code »

    Réponse :

    {

    « access_token » : « secondAccessToken_NBVcxwwmLkjhgfdspoie00OIuyTRPFs »,

    « token_type » : « Bearer »,

    « expires_in » : « 3600 »,

    « refresh_token« : « 1ji8KA9RJ5eXeJV1xKSDj1WDp8wwg3pRgDO2j0WhtbMsWz »,

    « scope » : « pisp »,

    « state« : « OK-12345 »

    }

    Remarques sur l’alimentation des champs :

    access_token => second token à transmettre dans le header de la prochaine méthode près le Bearer XX.

    expires_in => durée de validité du token en secondes.

    refresh_token => à mémoriser : permet d’obtenir un nouveau jeton d’accès si le délai de validité du premier jeton est échu (durée de quelques minutes). Le rafraichissement de jeton se fait via le grant-type= refresh_token.

    state => L’ASPSP redonne la valeur « state » qui était présente dans la requête initiale de demande d’initiation de paiement (Valeur à la main du TPP).

    Une fois le jeton d’accès obtenu, il est possible d’appeler la requête de confirmation de l’initiation de paiement ci-dessous (champ « Authorization »).

    Requête:

    POST https://www.13807.live.api.89C3.com/stet/psd2/v1.4.2/payment-requests/0000000a22-156688979900016807956016/o-confirmation

    Headers :

    Authorization : Bearer secondAccessToken_NBVcxwwmLkjhgfdspoie00OIuyTRPFs

    Content-Type : application/json

    Signature : keyId=\ »https://<www.myUrlPath.to>/myQsealCertificate_‎<empreinte-sha256>\« , algorithm=\ »rsa-sha256\ », headers=\ »(request-target) psu-ip-address psu-ip-port psu-http-method psu-date psu-user-agent psu-referer psu-accept psu-accept-charset psu-accept-encoding psu-accept-language digest\ », signature=\ »LbkxgICM48J6KdWNaF9qT7OWEorNlAwWNo6R+KkP7cP4TIGkk8wxcsGQXJ9ZnC+ZiA8mjL5S8WQyL41M7iPt+vJX4xh679gdGwmlKzn7E+ZtZ1I4qalRxcdLp4gBL7fll+C2lVBNJrViMJBezFK7AYVjnSWH7t1QxiMVg3CmoRM=\ »

    X-Request-ID : MyXrequestId123

    Body :

    {

    }

    Remarques sur l’alimentation des champs :

    Authorization : Bearer => second access_token récupéré pour le tokenCredential

    {paymentRequestResourceId} : c’est l’identifiant transmis par le service de paiement au moment de l’initiation et qui est utilisé pour le GET

    Réponse :
    { « paymentRequest » : {

    « resourceId » : « 0000000a22-156688979900016807956016 »,

    « paymentInformationId » : « MyPmtInfld123 »,

    « creationDateTime » : « 2021-09-05T09:25:22.527+02:00 »,

    « numberOfTransactions » : 1,

    « debtorAgent » : {

    « bicFi » : « CCBPFRPP512 »,

    « name » : « Cpy Name »,

    « postalAddress » : {

    « country » : « FR »,

    « addressLine » : [

    « 512 rue De Gaulle »,

    « 85000 LRSY »

    ]

    }

    },

    « initiatingParty » : {

    « name » : « Pisp Name »,

    « postalAddress » : {

    « country » : « FR »,

    « addressLine » : [

    « 512 rue Reaumur »,

    « 75512 PARIS »

    ]

    },

    « organisationId » : {

    « identification » : « 12FR5 »,

    « schemeName » : « COID »,

    « issuer » : « ACPR »

    }

    },

    « paymentTypeInformation » : {

    « serviceLevel » : « SEPA »,

    « categoryPurpose » : « DVPM »

    },

    « debtor » : {

    « name » : « Customer Name »,

    « postalAddress » : {

    « country » : « FR »,

    « addressLine » : [

    « 512 rue Leclerc »,

    « 94512 Charenton-le-Pont »

    ]

    },

    « privateId » : {

    « identification » : « D0999990I0 »,

    « schemeName » : « BANK »,

    « issuer » : « BICXYYTT512 »

    }

    },

    « debtorAccount » : {

    « iban » : « FR7613807000243021933556300 »

    },

    « beneficiary » : {

    « creditorAgent » : {

    « bicFi » : « CCBPFRPP512 »,

    « name » : « Creditor Name »,

    « postalAddress » : {

    « country » : « FR »,

    « addressLine » : [

    « 512 rue de la primaube »,

    « 12512 RODEZ »

    ]

    }

    },

    « creditor » : {

    « name » : « Amazon SA »,

    « postalAddress » : {

    « country » : « FR »,

    « addressLine » : [

    « 512 avenue Maupassant »,

    « 75512 PARIS »

    ]

    },

    « organisationId » : {

    « identification » : « 852126790 »,

    « schemeName » : « BANK »,

    « issuer » : « FR »

    }

    },

    « creditorAccount » : {

    « iban » : « FR7613825002000400000541718 »

    }

    },

    « purpose » : « COMC »,

    « chargeBearer » : « SLEV »,

    « paymentInformationStatus » : « PDNG »,

    « statusReasonInformation » : null,

    « fundsAvailability » : null,

    « booking » : null,

    « requestedExecutionDate » : « 2021-09-06T14:10:10.109+01:00 »,

    « creditTransferTransaction » : [

    {

    « paymentId » : {

    « resourceId » : « 0000000a22-146329369000016907660677 »,

    « instructionId » : « instructionId 1630919339 »,

    « endToEndId » : « endToEndId 1630919339 »

    },

    « instructedAmount » : {

    « currency » : « EUR »,

    « amount » : « 2.41 »

    },

    « remittanceInformation »: {

    « unstructured »: [

    « remittanceInformation01 »

    ]

    },

    « transactionStatus » : « PDNG »

    }

    ],

    « supplementaryData » : {

    « appliedAuthenticationApproach » : « REDIRECT »,

    « scaHint » : « scaExemption »,

    « successfulReportUrl »: https://extensions.bpce.fr/OAuth2Callback.aspx&state=OK- 12345&code_challenge_method=S256&code_challenge=T3LPv9JWu_HtyEQOkDCo4YYRmZJXTjJ0Ng9jfq_UBBg

    }

    }

    }

    Headers :

    X-Request-ID : MyXrequestId123

    Status code : 200 OK

    Remarques sur l’alimentation des champs :

    paymentRequestResourceId => identifiant à passer à la requête POST/payment-requests pour confirmer l’initiation de paiement

    appliedAuthenticationApproach » = « REDIRECT » => seule valeur autorisée

    href => URL de la page de redirection vers les écrans d’identification et d’authentification de l’établissement

    nonce => anti rejeu technique

     

     

    6ème étape : Annuler une initiation de Paiement

    Cet appel vous permet d’annuler une initiation paiement en demandant au PSU connecté de donner son consentement pour l’annulation. La description de la fonctionnalité et des champs de la requête est décrite dans le cas d’usage « Annuler une initiation un paiement« .

    Rappel : la méthode d’authentification supportée par l’établissement bancaire est le mode REDIRECTsimple => les cinématiques de l’enchaînement de l’écran d’identification et d’authentification forte décrites ci-après correspondent à ce mode d’authentification.

    Pour l’accès à l’assemblage sandbox, le point d’entrée est identique : www.<cdetab>.sandbox.api.89c3.com

    Requête :

    PUT https://www.13807.sandbox.api.89C3.com/stet/psd2/v1.4.2/payment-requests/0000000a22-156688979900016807956016

    Headers :

    Authorization : Bearer secondAccessToken_NBVcxwwmLkjhgfdspoie00OIuyTRPFs

    Content-Type : application/json

    Signature : keyId=\ »https://<www.myUrlPath.to>/myQsealCertificate_‎<empreinte-sha256>\« , algorithm=\ »rsa-sha256\ », headers=\ »(request-target) psu-ip-address psu-ip-port psu-http-method psu-date psu-user-agent psu-referer psu-accept psu-accept-charset psu-accept-encoding psu-accept-language digest\ », signature=\ »LbkxgICM48J6KdWNaF9qT7OWEorNlAwWNo6R+KkP7cP4TIGkk8wxcsGQXJ9ZnC+ZiA8mjL5S8WQyL41M7iPt+vJX4xh679gdGwmlKzn7E+ZtZ1I4qalRxcdLp4gBL7fll+C2lVBNJrViMJBezFK7AYVjnSWH7t1QxiMVg3CmoRM=\ »

    X-Request-ID : MyXrequestId123

    Body :

    { « resourceId »: « 0000000a22-156688979900016807956016 », « paymentInformationId »: « MyPmtInfld123 », « creationDateTime »: « 2021-09-05T09:25:22.527+02:00 », « numberOfTransactions »: 1, « initiatingParty »: { « name »: « Pisp Name », « postalAddress »: { « country »: « FR », « addressLine »: [ « 512 rue Reaumur », « 75512 PARIS » ] }, « organisationId »: { « identification »: « 12FR5 », « schemeName »: « COID », « issuer »: « ACPR » } }, « paymentTypeInformation »: { « serviceLevel »: « SEPA », « categoryPurpose »: « DVPM » }, « debtor »: { « name »: « Customer Name », « postalAddress »: { « country »: « FR », « addressLine »: [ « 512 rue Leclerc », « 94512 Charenton-le-Pont » ] } }, « debtorAccount »: { « iban »: « FR7613807000243021933556300 » }, « debtorAgent »: { « bicFi »: « CCBPFRPP512 », « clearingSystemMemberId »: { « clearingSystemId »: « clearingSystemId », « memberId »: « memberId » }, « name »: « Cpy Name », « postalAddress »: { « country »: « FR », « addressLine »: [ « 512 rue De Gaulle », « 85000 LRSY » ] } }, « beneficiary »: { « isTrusted »: false, « creditorAgent »: { « bicFi »: « CCBPFRPP512 », « clearingSystemMemberId »: { « clearingSystemId »: « clearingSystemId », « memberId »: « memberId! » }, « name »: « Creditor Name », « postalAddress »: { « country »: « FR », « addressLine »: [ « 512 rue de la primaube », « 12512 RODEZ » ] } }, « creditor »: { « name »: « Amazon SA », « postalAddress »: { « country »: « FR », « addressLine »: [ « 512 avenue Maupassant », « 75512 PARIS » ] }, « organisationId »: { « identification »: « 852126790 », « schemeName »: « BANK », « issuer »: « FR » } }, « creditorAccount »: { « iban »: « FR7613825002000400000541718 » } }, « chargeBearer »: « SLEV », « paymentInformationStatus »: « ACCP », « requestedExecutionDate »: « 22021-09-06T14:10:10.109+01:00 », « creditTransferTransaction »: [ { « paymentId »: { « resourceId »: « 0000000a22-156688979900016807956016 », « instructionId »: « instructionId 1630919339 », « endToEndId »: « endToEndId 1630919339 » }, « requestedExecutionDate »: « 2021-09-06T14:10:10.109+01:00 », « instructedAmount »: { « currency »: « EUR », « amount »: « 2.41 » }, « purpose »: « COMC », « regulatoryReportingCodes »: [], « remittanceInformation »: { « unstructured »: [ « remittanceInformation01 » ] }, « transactionStatus »: « RJCT », « statusReasonInformation »: “DS02” } ], « supplementaryData »: { « acceptedAuthenticationApproach »: [ « REDIRECT », « DECOUPLED » ], « appliedAuthenticationApproach »: « REDIRECT », « scaHint »: « scaExemption », « successfulReportUrl »: « https://extensions.bpce.fr/OAuth2Callback.aspx&state=OK-12345&code_challenge_method=S256&code_challenge=T3LPv9JWu_HtyEQOkDCo4YYRmZJXTjJ0Ng9jfq_UBBg » }}

    Remarques sur l’alimentation des champs :

    Authorization : Bearer => second access_token récupéré

    {paymentRequestResourceId} : c’est l’identifiant transmis par le service de paiement au moment de l’initiation et qui est utilisé pour le GET

    Les données du body doivent être identiques à celles récupérées au moment du GET, à part les suivantes au niveau de la transaction à annuler :

    – le transactionStatus de l’objet creditTransferTransaction qui doit être passé à « RJCT »

    – le statusReasonInformation de l’objet creditTransferTransaction à « DS02 »

    – la partie _links doit être supprimée

    – l’enveloppe objet du parent « paymentRequest » : {doit être supprimé, ainsi que l’accolade fermante associée en fin de flux.

    Réponse :

    { « appliedAuthenticationApproach »: « REDIRECT », « _links »: { « consentApproval »: { « href »: « https://www.13807.sandbox.api.89c3.com/89C3api/accreditation/v1.4.2/cancellation?paymentRequestResourceId=0000000a22-156688979900016807956016&nonce=Ij4VifKlm4QICq12345 », « templated »: true } }}

    Headers :

    X-Request-ID : MyXrequestId123

    Status code : 200 OK

    Remarques sur l’alimentation des champs :

    paymentRequestResourceId => identifiant à passer à la requête GET /payment-requests pour récupérer le statut de l’initiation de paiement

    appliedAuthenticationApproach » = « REDIRECT » => seule valeur autorisée

    href => URL de la page de redirection vers les écrans d’identification et d’authentification de l’établissement

    nonce => anti rejeu technique

    currency => récupérée du body passé en entrée

    successfulReportUrl => récupérée du body passé en entrée

    unsuccessfulReportUrl => récupérée du body passé en entrée

    creditorAccount => récupérée du body passé en entrée

    creditorName => récupérée du body passé en entrée

    amount => récupérée du body passé en entrée

    successfulReportUrl => récupérée du body passé en entrée

    debtorAccount => récupérée du body passé en entrée

    debtorName => récupérée du body passé en entrée

    privateId => récupérée du body passé en entrée

    requestedExecutionDate=> récupérée du body passé en entrée

    method => UFVU est égal à PUT en base64 + URL

    X-Request-ID: transmis en entrée

     

     

    7ème étape : La redirection vers les écrans pour que le client valide l’annulation d’une initiation de paiement

    Cinématique nominale des enchaînements des écrans d’identification et d’authentification forte

    Image
    Cinématique nominale des enchaînements des écrans d’identification et d’authentification forte

    Déroulé de l’enchaînement des écrans d’identification et d’authentification forte :

    A partir de l’URI retournée dans consentApproval il est possible de jouer l’enchaînement des écrans.

    1) Le PSU est redirigé vers un écran d’identification proposé par son établissement bancaire et dans lequel il saisira son identifiant de banque à distance.

    Attention : l’appel à cet écran ne peut être effectué qu’une seule fois

    => le nonce transmis dans l’URL permettant d’accéder à cet écran n’est utilisable qu’une seule fois (il est grillé en suite par l’anti-rejeu)

    => une nouvelle demande d’annulation de virement DSP2 (via PUT PaymentRequest ) est nécessaire pour récupérer un nouveau jeton nonce si nécessaire.

    Image
    identification screen

    L’identifiant de banque à distance du PSU est à saisir (voir la rubrique « Comment tester l’API ? » > « Testez nos personas » pour les jeux de données de l’établissement), exemple pour le persona « Marc » des Banques Populaires :

    Image
    identification screen with remote banking identifier of the customer

    Remarque : Le bouton « Mémoriser mon identifiant » n’est pas opérationnel. L’activer ne sert à rien.

    Pour les Caisses d’Epargne, si le PSU est un professionnel ou une entreprise, il devra saisir son numéro d’usager en plus de son identifiant de banque à distance :

    Image
    Ecran Caisse d'Epargne pour saisir son numéro d’usager en plus de son identifiant de banque à distance

    2) Le PSU est redirigé vers un écran d’authentification forte proposé par son établissement bancaire pour valider son identité.

    Image
    first authentication screen

    Le code SMS pour authentification est à saisir (voir la rubrique « Comment tester l’API ? » > « Testez nos personas » pour les jeux de données de l’établissement), exemple pour le persona « Marc » des Banques Populaires:

    Image
    first authentication screen with SMS number

    La cinématique de cette étape dépend de la méthode d’authentification forte mise à disposition du PSU par l’établissement bancaire (SMS OTP, secur’pass, etc.).

    Elle dépend aussi de l’équipement du PSU sur lequel tourne l’APP du PISP utilisée par le PSU (PC ou mobile/smartphone/tablette).

    Remarque : en environnement sandbox, le code SMS est systématiquement « 12345678 ».

    3) Le PSU est redirigé vers un écran récapitulatif de l’opération en cours d’annulation proposé par son établissement bancaire.

    Exemple de restitution pour le persona « Marc » des Banques Populaires veut annuler sa transaction de 2,12 euros émise depuis son Compte Perso. Il peut annuler ou valider son opération d’annulation.

    Image
    Ecran de confirmation d'annulation de paiement

    4) Le PSU valide l’annulation du virement.

    5) Le PSU est redirigé vers un écran de confirmation de l’opération proposé par son établissement bancaire.

    Image
    Ecran de confirmation que l'annulation est prise en compte

    NB : lorsque le PSU ne confirme pas l’annulation de paiement (ou en cas de timeout sur la page récapitulative de l’opération par exemple) le PSU est redirigé vers la page suivante,

    Image
    Ecran d'anomalie : la demande d'annulation n'est pas confirmée

    6) Le PSU est redirigé vers l’application du TPP PISP.

    Le PISP fournit lors de sa demande d’annulation une ou deux URL de call back :

    La première (successfulReportUrl) sera appelée par l’établissement bancaire dans le cas où la demande d’annulation est traitée et si le PSU a donné son consentement pour cette annulation d’opération.

    La seconde URL (unsuccessfulReportUrl) sera utilisée par l’établissement bancaire en cas de refus du consentement ou si la cinématique de validation de l’annulation de paiement est interrompue à une de ses étapes (exemple : timeout sur l’écran d’identification, sur l’écran récapitulatif de l’opération ou sur les écrans d’authentification forte). Cette seconde URL est facultative : la première URL call back (successfulReportUrl) sera utilisée si la seconde n’est pas renseignée.

     

     

    8ème étape : Confirmer une demande d’annulation d’une initiation de paiement

    La confirmation d’une annulation d’une demande de paiement ne sera pas implémentée : la confirmation sera implicitement portée par l’acception par le PSU de la demande d’annulation elle-même.

    Testez nos persona

    Cette page présente les jeux de données qui permettent de tester l’API :

    • Des clients fictifs sont proposés par segment de clientèle (étudiant, cadre, entreprise, etc.)
       
    • Les caractéristiques de leurs comptes y sont déclinées (mono-compte, multi-comptes, multi-bancarisé, solde du compte)
       
    • Les données utiles attendues en entrée par les API y sont énumérées (identifiant banque à distance, code SMS pour les authentifications forte, IBAN)

     

    PersonaSegmentIdentifiant banque à distanceCode SMS pour authentificationCode établissementIBANNuméro de compteSoldeDevise – currency
    SydneyRetraite116236611234567817515FR76175159000065358851121376535885112111 282.56EUR
    FR761751590000653588511223465358851122527.54EUR
    FR761751590000653588511233165358851123-378.28EUR
    LeaCadre1234567891234567817515FR76175159000065358851151446535885115111 282.56EUR
    FR761751590000653588511524165358851152527.54EUR
    FR761751590000653588511533865358851153-378.28EUR

     

    Sydney

    73 ans – Nantes

    Mariée – Retraitée du secteur privée

    3 comptes à vue

    Sa vie / Son Histoire / Son travail

    • Mariée, compte à Mme ou Mr
    • Profite après 40 années de travail d’une retraite bien méritée en voyageant autour du globe avec son mari et sa famille

    Ses buts

    • Souhaite faire plaisir à ses enfants et ses petits-enfants en voyageant avec eux
    • Souhaite donner plus de son temps pour des actions caritatives

    Son utilisation

    • A part pour quelques achats timides sur internet, Marie à toujours de la monnaie sur elle
    • Dispose d’un compte joint dans le groupe BPCE

    Les freins, frustrations potentielles

    • Elle n’a pas confiance dans internet
    • Son smartphone est rarement dans sa poche

    Ce qui peut l’influencer

    • Des services ultra sécurisés, mais qui reste simple d’utilisation

    La bonne surprise

    • Ses enfants et petits enfants lui apprennent la magie des tablettes

    Léa

    35 ans – Lyon

    Mariée – Cadre chez un assureur – 10 ans d’expérience

    3 comptes à vue

    Sa vie / Son Histoire / Son travail

    • Mariée, elle fait beaucoup de randonnées avec son mari
    • Léa est bien installée dans sa profession et à l’aise dans sa compagnie

    Ses buts

    • Avoir le solde de son compte de façon rapide et sécurisée
    • Elle souhaite avoir des enfants

    Son utilisation

    • Des achats en ligne réguliers
    • Très fidèle à sa banque, elle ne veut pas en changer

    Les freins, frustrations potentielles

    • Lenteurs de connexion à son compte
    • A la recherche d’un minimum de frais bancaires

    Ce qui peut l’influencer

    • Une plus grande proximité avec sa banque
    • L’accessibilité à son compte depuis n’importe quel endroit

    La bonne surprise

    • Bonne écoute aux conseils apportés par les professionnels du secteur bancaire

    Politique de décommissionnement des versions de l’API

    La politique du décommissionnement (= arrêt d’une version d’une API sur les environnements de production et sandbox) est fonction du cycle de vie des API, et il est prévu une phase de tuilage entre deux versions majeures d’API comme indiqué dans le schéma ci-dessous :

    Image
    Schedule of the API deprecation process

    La communication du décommissionnement d’une version N se fera à la date de déploiement de la version N+1. 

    Le canal de communication privilégié est le portail Groupe BPCE API Store dans la partie « Roadmap » de l’API impactée. 

    Une communication via courriel vers les correspondants des prestataires enrôlés sur le portail BPCE API pourra venir compléter ce dispositif.

    Planning des évolutions fonctionnelles à venir de l’API

    L’API d’Information sur compte fait l’objet d’améliorations et d’évolutions continues tout au long de l’année*.

    (*) NB : l’article 30 (4) des RTS précise que des changements significatifs de l’API peuvent intervenir sans délai. Nous appliquons cette clause dans les cas suivants :

    • problème bloquant impactant de façon généralisée au moins l’un des segments de clients majeur (particuliers, professionnels, entreprises),
    • problème de sécurité,
    • évolutions demandées par les autorités nationales compétentes pour répondre à la trajectoire réglementaire.

    Retrouvez ci-dessous notre roadmap prévisionnelle.

     

    Version de l’APIVersion de la norme STETFonctionnalités

    Sandbox

    Date de déploiement

    BPCE API Dev Portal & Sandbox

    Live

    Date de déploiement

    BPCE Live API Gateway

    Date de décommissionnement
    v1.4.2v1.4.2.17
    • Initier un paiement unique en euros (SCT immédiat / SCT différé / Instant Payment PART)
    • Récupérer le statut d’une initiation de paiement (SCT immédiat / SCT différé / Instant Payment PART)
    • Annuler une initiation de paiement (SCT différé)
    • Confirmer une initiation de paiement unique en euros (SCT immédiat / SCT différé / Instant Payment PART)
    • Parcours client fluide pour initier un paiement (1 seule AF si l’identifiant du client, les comptes à débiter et à créditer sont transmis)
    24 septembre 202030 juin 2021non encore annoncée
    v1.4.2v1.4.2.17

    Fonctionnalités rajoutées en gras ci-dessous :

    • Initier un paiement unique en euros (SCT immédiat / SCT différé / SCT permanent / Instant Payment PART et B2B)
    • Récupérer le statut d’une initiation de paiement (SCT immédiat / SCT différé / SCT permanent / Instant Payment PART et B2B)
    • Annuler une initiation de paiement (SCT différé)
    • Confirmer une initiation de paiement unique en euros (SCT immédiat / SCT différé / SCT permanent / Instant Payment PART et B2B)
    • Parcours client fluide pour initier un paiement (1 seule AF si l’identifiant du client, les comptes à débiter et à créditer sont transmis)
    • Parcours client APP2APP (test privatifs)
    • BIC Creditor nécessaire (en sus de l’IBAN) pour les opérations PIS effectuées hors zone SEPA
    30 mars 202130 juin 2021non encore annoncée

    Limitations fonctionnelles

    Limitations de cette API DSP2

    • S’applique à toutes les Caisses d’Epargne, Crédit Coopératif, Banque BTP, BCP Banque sauf cas particulier éventuellement décrit dans cette section.
       
    • Ne s’applique qu’aux comptes de paiements en euros actifs accessibles en ligne (cf. texte de la Directive PSD2), et aux virements externes entre comptes.
       
    • N’utilise que le mode d’authentification REDIRECT renforcé (appel de la méthode o-confirmation pour que le TPP confirme le paiement après Authentification Forte du PSU demandée et gérée via la banque : l’ASPSP transmet un code d’authorisation OAUTH2 au TPP qui doit le renvoyer à l’ASPSP pour confirmer le paiement)

      NB : le TPP n’a pas la possibilité de fournir à l’ASPSP les données de sécurité personnalisées du client à des fins d’authentification, et donc, seuls les écrans de redirection et d’authentification forte (SCA) de l’ASPSP doivent être utilisés (l’encapsulage de ces écrans par le TPP est interdit au regard des articles PSD2 #97.5 et RTS #31)
       
    • Ne traite que les demandes d’initiation de paiement en euro (pas d’initiation de virement en devise)
      • SCT Core de type immédiat ou différé ou permanent pour les segments de clients PART/EI/PRO/ENT
      • SCT INST pour les segments de clients PART/EI/PRO/ENT (SAUF pour les CE Ile de France et CE Auvergne Limousin : que pour les PART/EI)
         
    • Le BIC Creditor n’est pas nécessaire SAUF pour les opérations PIS hors zone SEPA (toujours en euro)
       
    • Les méthodes suivantes sont disponibles :
      • POST /payment-requests et POST /payment-requests/{paymentRequestRessourceId}/o-confirmation pour initier un paiement
      • GET /payment-requests/{paymentRequestRessourceId} pour récupérer le statut d’une initiation de paiement

        NB : Les méthodes suivantes ne sont PAS supportées :
        POST /payment-requests/{paymentRequestRessourceId}/confirmation et PUT /payment-requests/{paymentRequestRessourceId} (annulation de virement SCT différé initié via API)
         
    • L’annulation d’une demande de virement via API PIS peut être effectuée par le PSU via son accès direct (et non via API)
       
    • Les demandes PIS de type « CASH » seront rejetés si le PSU n’utilise pas un moyen d’authentification forte ayant un niveau suffisemment sécuritaire (Secur’Pass ou le certificat sur clé physique pour les PRO & ENT), et si l’IBAN bénéficiaire n’est pas enregistré au préalable sur son accès direct
       
    • Différentes demandes PIS ayant les mêmes caractéristiques qu’une executée préalablement (même jour, même IBAN debiteur et créditeur, même montant, etc…) seront rejetées (fonctionnement identique à la banque en ligne)
       
    • Si aucune action de l’utilisateur n’est effectuée au bout de 30 mns (04 mns sur les écrans de redirection), c’est considéré comme une déconnexion sans redirection en retour vers le TPP
       
    • La longueur du champs creditor.name est limitée à 32 caractères

       

    Limitations liées aux types de comptes accessibles

    • Les comptes accessibles via l’API PISP sont ceux disponibles sur la banque à distance éligibles DPS2 pour initier un virement SEPA vers un bénéficiaire externe
       
    • Il est à noter qu’en adéquation avec la réglementation, l’ASPSP peut appliquer des processus métiers (lutte anti-fraude, etc…) qui peuvent amener à rejeter l’exécution d’une initiation de paiement
       

     

    Limitations liées aux segments de clientèle

    Sont couverts par l’API les segments clients suivants :

    • Client « particulier » (y compris compte joint et mineur rattaché) ayant un abonnement à la banque en ligne « DEI PART » ou « DEI PRO » et un compte commençant par 04

      NB 1 : le particulier (PART) est une personne physique catégorisée comme « majeur capable ». Le PART peut aussi avoir des activités dans le cadre d’une entreprise individuelle (EI) = une entreprise dirigée par une seule personne, et qui n’a pas le statut de « persone morale », bien qu’elle soit inscrite au répertoire des métiers ou au Registre du Commerce et des Sociétés (RCS, exemples : artisan ou profession libérale). Dans ce cas, l’EI est considéré comme un PART

      NB 2 : est non compris à ce jour le tuteur de personne protégée/sous tutelle ou curatelle utilisant la solution Web Protexion
       
    • Client « gros professionnel », « entreprise » et « association » ayant un abonnement à la banque en ligne « CE Net Compte » et un compte commençant par 08 autorisant les virements unitaires

      NB 3 : les catégories « entreprise » (ENT) et « association » (ASSOC) couvrent les personnes morales
       

     

    Limitations liées aux moyens d’authentification forte

    Il est de la responsabilité de l’ASPSP d’équiper ses clients avec un ou des moyens d’authentification forte :

    • PART : Accès aux comptes PART et Opération sensible / Dynamic linking (DL) : (Sécur’Pass) ou (lecteur CAP) ou (Mot de Passe + OTP SMS)
       
    • PRO/ENT : Accès aux comptes PART et Opération sensible / Dynamic linking (DL) : (certificat matériel) ou (Sécur’Pass) ou (lecteur CAP) ou (Mot de Passe + OTP SMS)
       

    NB 4 : il n’y a pas d’exemption de la seconde authentification forte AF/SCA dynamic linking (donnée scaHint ignorée)

    NB 5 : il y aura un rejet des virements avec categoryPurpose = « CASH » ou « SALA » lorsque l’AF/SCA DL ne se fait pas avec le moyen principal et que l’IBAN bénéficiaire n’est pas enregistré par le PSU sur sa banque en ligne

    NB 6 : le certificat matériel n’est pas proposé aux client sur mobile/smartphone

    Accès aux données de production

    Conformément à la réglementation, les modes de test Try-it et Assemblage n’utilisent que des données fictives qui sont décrites dans le cas d’usage « Comment Tester l’API ?« .

    Pour accéder aux données de production, l’utilisation de l’API Enregistrement DSP2 est un prérequis.

    NB : La plage hebdomadaire du lundi matin de minuit à 06h00 est utilisée pour la maintenance des infrastructures des systèmes d’information (tous composants, y compris le système central/backend, les passerelles, etc…) et peut engendrer des requêtes API en erreur ou des indisponibilités le temps des interventions (de même pour des traitements bancaires programmés en début et fin de journée/mois/trimestre/année).

    Le code établissement (voir la liste des établissements bancaires accessibles ci-dessous) vous permettra d’adresser le bon référentiel client via le « endpoint » www.<codetab>.live.api.89c3.com (ou www.<codetab>.live.api.caisse-epargne.fr aligné sur le nom de domaine de l’accès direct www.caisse-epargne.fr). 

    Une fois choisi, ce point d’accès doit être conservé pour toutes les requêtes sous-jacentes.

    Code établissementNom de l’établissementNom abrégéDisponible en Try-it et AssemblageDisponible en Production
    11315Caisse d’Epargne Provence Alpes CorseCEPACOui
    11425Caisse d’Epargne NormandieCENOui
    12135Caisse d’Epargne Bourgogne Franche-ComtéCEBFCOui
    14445Caisse d’Epargne Bretagne-Pays De LoireCEBPLOui
    13135Caisse d’Epargne Midi-PyrénéesCEMPOui
    13335Caisse d’Epargne Aquitaine Poitou-CharentesCEAPCOui
    13485Caisse d’Epargne Languedoc-RoussillonCELROui
    13825Caisse d’Epargne Rhône AlpesCERAOui
    14265Caisse d’Epargne Loire Drôme ArdècheCELDAOui
    14505Caisse d’Epargne Loire-CentreCELCOui
    17515Caisse d’Epargne Ile De FranceCEIDFOuiOui
    18315Caisse d’Epargne Côte d’AzurCECAZOui
    18715Caisse d’Epargne Auvergne et LimousinCEPALOui
    15135Caisse d’Epargne Grand Est EuropeCEGEEOui
    16275Caisse d’Epargne Hauts de FranceCEHDFOui
    42559Crédit CoopératifCCOOP-Oui
    12579Banque BCPBBCPOuiOui
    30258BTP BanqueBTPB-Oui

     

    Eligibilité

    Les ressources de l’API « Initiation de paiements » ne peuvent être consommées que par des PSP ayant le rôle de Prestataires de Services d’initiation de Paiement (PISP). 

    Ce statut est délivré par les autorités financières du pays dans lequel la demande est effectuée ; en France il s’agit de l’Autorité de Contrôle Prudentiel et de Résolution (ACPR), liée à la Banque de France.

    L’obtention et la conservation d’un agrément relèvent de procédures rigoureuses afin d’apporter des garanties fortes aux utilisateurs des services de paiements, les formulaires étant disponibles sur le site de l’ACPR : https://acpr.banque-france.fr/autoriser/procedures-secteur-banque/tous-les-formulaires.

    Une fois l’agrément donné, le format de cet identifiant (Organisation Identifier = OID) fourni par l’autorité compétente est :

    PSDXX-YYYYYYYY-ZZZZZZZZ:

    • XX =>code ISO 3166 du pays de l’autorité compétente
    • hyphen-minus « – » (0x2D (ASCII), U+002D (UTF-8))
    • YYYYYYYY => 2-8 caractères du l’identifiant de l’autorité compétente (A-Z, pas de séparateur)
    • hyphen-minus « – » (0x2D (ASCII), U+002D (UTF-8))
    • ZZZZZZZZ => identifiant du PSP spécifié par l’autorité nationale compétente (sans restriction sur le nombre – ou sur le type – de caractère utilisé)

    Cet identifiant OID est important à 2 titres :

    • il servira à vous identifier lors des appels dans les requêtes des API STET (via le paramètre « client_id »)
    • il devra être présent dans les certificats eIDAS que vous fournirez au teneur de compte (voir ci-dessous)

    De plus, vous devez disposer de certificats délivrés par une autorité de certification reconnue (Qualified Certification Service Providers – QTSP: https://webgate.ec.europa.eu/tl-browser/#/) conformes au règlement eIDAS (electronic IDentification And trust Services : https://www.ssi.gouv.fr/entreprise/reglementation/confiance-numerique/le-reglement-eidas/) et respectant la norme ETSI (https://www.etsi.org/deliver/etsi_ts/119400_119499/119495/01.02.01_60/ts_119495v010201p.pdf).

    Afin de consommer les API DSP2 proposées sur ce portail, le TPP doit enrôler son app et nous transmettre via notre API Enregistrement DSP2 des certificats de production signés par une autorité de certification agréée :

    • un premier jeu de certificats QWAC (pour l’authentification mutuelle TLS) et QSEALC (à charger sur notre passerelle via l’API Enregistrement DSP2) pour la sandbox
    • un autre jeu de certificats QWAC (pour l’authentification mutuelle TLS) et QSEALC (à charger sur notre passerelle via l’API Enregistrement DSP2) pour la production

    NB IMPORTANT : en cas de renouvellement de certificat, et si l’autorité de certification (QTSP) est différente (ou c’est la même entreprise QTSP mais qui utilise des clés racines différentes), le TPP doit avertir le support API disponible via ce site de 2 mois avant à toutes fins de vérifier que les éléments de la nouvelle autorité de certification sont bien chargés sur nos infrastructures.

    Un identifiant keyID devra aussi être fourni dans un format conforme à la spécification STET intégrant une empreinte SHA256 après le caractère « _ » char, voir exemple dans la documentation STET Part 3 / Interaction Examples : keyId=https://path.to/myQsealCertificate_612b4c7d103074b29e4c1ece1ef40bc575c0a87e.

    Seules les clés publiques au format .pem sont nécessaires. Des contrôles sur les données des certificats seront effectués à partir des registres Français (REGAFI : https://www.regafi.fr) et Européen (ABE ou EBA : https://euclid.eba.europa.eu/register/pir/disclaimer).

    Historique

    Version de la norme STET utilisée pour l’API

    Cette API REST est conforme à la spécification interbancaire française STET (https://www.stet.eu/en/psd2/), version v.1.4.2.17, afin de répondre aux exigences règlementaires de la DSP2. 

    Elle tient compte des limitations fonctionnelles aux Banques Populaires, Banque de Savoie et Banque Palatine décrites dans la section « Limitations ». 

    Image
    Logo Directive Services de Paiements (DSP2)

     

    Pour rappel :

     

    En France, l’ordonnance n° 2017-1252 du 9 août 2017 transpose la directive DSP2 dans la partie législative du code monétaire et financier. L’ordonnance est complétée au plan réglementaire par les décrets n° 2017-1313 et n° 2017-1314 du 31 août 2017 et les cinq arrêtés du 31 août 2017.

     

    Description du support

    Conformément à l’article 30 (5) des RTS, une assistance pour les prestataires PSP tiers est mise à disposition. Ce support utilisateur est accessible via le formulaire sur ce portail Groupe BPCE API Store. Les réponses se font pendant les heures de travail ouvrées.

    Le principe de la durée de support est schématisée ci-dessous en prenant en compte l’article 30 (4) des RTS :

    Image
    Schedule of the API deprecation process

     

    Versionning de l’API

    Nos versions APIVersion norme STET
    v1.4.2v1.4.2.17

    Evolutions importantes apportées depuis la première version livrée

    Cas d’usage / Méthode(s)Date d’effetDescription de l’évolution

    POST /payment-requests 

    GET /payment-requests/{paymentRequestResourceId}

    17 mai 2019

    Documentation portail :

     

    • Ajout de précisions sur le caractère obligatoire ou facultatif des paramètres et des champs des requêtes.
    Toutes31 juillet 2019

    Documentation portail :

     

    • Description de l’assemblage sandbox en cible à fin août 2019 ;
      • ajouts de précisions (limitations, exemples, date de mise à disposition, etc.) sur l’ensemble des cas d’usage de l’API.
    Roadmap18 septembre 2019

    Documentation portail :

     

    • Roadmap modifiée pour la sandbox et le live.
    Eligibilité1er octobre 2019

    Documentation portail :

     

    • Ajout de précisions sur les certificats QWAC et QSEALC nécessaires pour une demande de goLive.
    Initier un paiement19 novembre 2019

    Documentation portail:

    • Ajout de la précision « Pour les Banques Populaires, la donnée requestedExecutionDate ne peut pas être un week-end ou un jour target 2 pour les SCT »
    Comment utiliser le fallback21 novembre 2019

    Documentation portail :

    • Ajout d’un exemple
    Récupérer le statut d’une initiation de paiement9 décembre 2019

    Documentation portail :

    • Ajout d’un tableau qui reprend les valeurs possibles pour le statut de l’initiation de paiement et de la transaction de paiement associée.
    Tester nos persona23 décembre 2019

    Documentation portail :

    • Précision suivante ajoutée dans le cas d’usage « CES IDENTIFIANTS ET DONNEES DE TEST NE PEUVENT PAS ETRE UTILISES EN PRODUCTION LIVE. »
      • Modification des identifiants banque à distance des persona => ces nouveaux identifiants sont actifs depuis le 8 janvier 2020 (les anciens identifiants sont désactivés)
    Initier un paiement24 décembre 2019Activation de la prise en compte de l’IBAN transmis dans le champ debtorAccount => IBAN du PSU : lorsqu’il est renseigné, le seul compte sélectionnable pour le PSU est celui qui correspond à cet IBAN.
    Historique des versions / roadmap30 décembre 2019

    Documentation portail :

    • Ajout de précisions sur la gestion du versionning et du décommissionnement des API
    Limitations / Historique des versions / roadmap25 février 2020

    Activation de l’API pour les autres BP que BPGO.

    Modification du versionning de l’API.

    Annuler une initiation de paiement / sandbox / limitations10 septembre 2020Activation de la méthode d’annulation d’une initiation de paiement.
    POST /payment-requests02 décembre 2020

    Documentation portail :

    • Ajout de précisions sur le déclenchement des 2 parcours fluides lors d’une initiation de paiement PISP
    Initier un paiement / Récupérer le statut d’une initiation de paiement / Sandbox / Roadmap22 décembre 2020

    Depuis le 7 décembre :

    • Activation du parcours PISP fluide ;
    • Rejet des virements avec categoryPurpose = « CASH » lorsque l’AF ne se fait pas avec Sécur’Pass alors que le bénéficiaire n’est pas connu.
      • Si le PSU ne fait aucune action de consentement (validation ou refus) dans les 30 minutes qui suivent la requête d’initiation RJCT (raison NOAS).
    Toutes04 janvier 2021

    Documentation portail :

    • Passage de la documentation de l’API DSP2 STET de la version v1 à la version v1.4.2
    Toutes30 juin 2021

    Mise à jour de la documentation en fonction des derniers éléments livrés pour la trajectoire réglementaire

    • virements IP
    • BIC Creditor obligatoire

    Initiation de paiements

     

    Roadmap

    13 octobre 2021

    Activation du SCT Core pour le segment ENT

    Précision sur les changements sans délai non soumises au préavis réglementaire

    Initiation de paiements03 janvier 2022Précisions sur le pkce + BIC Creditor devenu optionnel pour les opérations PIS effectuées en zone SEPA + nouveau moyen SCA = certificat TurboSign
    Cas d’usage PIS et Limitations01 avril 2022Précisions sur le délai max d’inactivité du PSU, les abonnés professionnels, et les demandes PIS ayant les mêmes caractéristiques, montants min/max, limitation sur creditor.name et précision sur le keyID