Console Try-it

➤ Principe

En vous connectant sur le portail, vous pouvez :

  • Faire appel à l'API "initiation de paiement" via un formulaire dans lequel vous sélectionnez votre application et le jeton d'authentification/d'accès
  • Puis vous saisissez les paramètres de la méthode que vous souhaitez tester (soit headers, soit body) dont ceux mentionnés par une étoile sont obligatoires.

Une fois les paramètres saisis, vous pouvez lancer l'exécution de la requête : vous obtiendrez soit un résultat, soit une erreur.

L’utilisateur peut enchaîner les requêtes en sélectionnant le profil client soit pour les Banques Populaires, soit pour les Caisses d'Epargne à partir duquel il souhaite tester les méthodes, les fonctionnalités mises en oeuvre étant différentes en fonction de la banque (cf. rubrique "Limitations").

 

Version 1.4.2

A compter du 8 juillet 2020, le try-it ne sera possible que pour la version V1.4.2.

Si vous avez déjà effectué une demande de GoLive, vous devez alors créer une nouvelle application, puis sélectionner la nouvelle API STET V1.4.2.

Si vous n’avez PAS effectué de demande de GoLive, vous pouvez :

  • soit modifier votre application existante pour l’associer à la nouvelle API STET V1.4.2.
  • soit créer une nouvelle application, puis sélectionner la nouvelle API STET V1.4.2.

 

➤ Aperçu du formulaire d'exécution Try-It

Tryit PISP BP

Le resource owner = "ClientBanquePopulaire" est à sélectionner pour les Banques Populaires.

Le resource owner = "ClientCaisseEpargne" est à sélectionner pour les Caisses d'Epargne.

 

➤ Aperçu de l'écran de génération du jeton Oauth2

image APP Authentication

 

Cet écran est accessible lorsque l'on édite l'application (TPP PISP notre exemple) et il permet de générer ou éditer un jeton Oauth2 que l'on sélectionnera dans le formulaire d'exécution Try-It.

 

➤ Initier un paiement avec le Try-it

Voici la description des différents paramètres pour initier une demande de paiement avec la méthode POST /payment-requests :

ParamètreDescriptionType de donnéesType de paramètreObligatoire
Authorization* Jeton d'accès devant être fourni comme header Chaîne de caractères Header Oui
PSU-IP-Address

Adresse IP utilisé par le PSU lors de la connexion au TPP

*obligatoire si le PSU est connecté mais non renseignée en cas d'accès batch

Chaîne de caractères Header Non*
PSU-IP-Port Port IP utilisé par le PSU lors de la connexion au TPP Chaîne de caractères Header Non
PSU-HTTP-Method Méthode http utilisée lors de la requête la plus pertinente faite par le PSU vers le TTP Chaîne de caractères Header Non
PSU-Date Timestamp utilisé lors de la requête la plus pertinente faite par le PSU vers le TTP Chaîne de caractères Header Non
PSU-GEO-Location Localisation géographique du PSU fournie par le terminal mobile du PSU au TPP si elle existe Chaîne de caractères Header Non
PSU-User-Agent Header "User-Agent" envoyé par le PSU lors de la connexion au TPP Chaîne de caractères Header Non
PSU-Referer Header "Referer" envoyée par le PSU lors de la connexion au TPP. Il est à noter que dans des spécifications antérieures des RFC 1945 on préconise le nom "referer" (mal orthographié). Le nom "referrer" peut être utilisé au risque de ne pas être compris Chaîne de caractères Header Non
PSU-Accept Header "Accept" envoyé par le PSU au TPP lors de la connexion Chaîne de caractères Header Non
PSU-Accept-Charset Header "Accept-Charset" envoyé par le PSU au TPP lors de la connexion Chaîne de caractères Header Non
PSU-Accept-Encoding Header "Accept-Encoding" envoyé par le PSU au TPP lors de la connexion Chaîne de caractères Header Non
PSU-Accept-Language Header "Accept-Language" envoyé par le PSU au TPP lors de la connexion Chaîne de caractères Header Non
PSU-Device-ID UUID (Universally Unique Identifier) du périphérique utilisé par le PSU, si disponible Chaîne de caractères Header Non
Digest* donnée de la requête Chaîne de caractères Body Oui
Signature*

Signature http de la requête (voir https://datatracker.ietf.org/doc/draft-cavage-http-signatures/) La partie keyId du header devrait avoir le format suivant keyId="SN=XXX,CA=YYYYYYYYYYYYYYYY" où "XXX" est le numéro de série en hexadécimal sans aucun préfixe (comme 0x, du certificat QSEAL dont la clé privée a servi pour la signature de celui-ci

"YYYYYYYYYYYYYYYY" est l'émetteur DN, nom complet de l'autorité de certification ayant émise ce certificat HTTP400 qui sera renvoyé par le serveur dans le cas d'une signature invalide ou absente.

Chaîne de caractères Header Oui
X-Request-ID* Header de corrélation à paramétrer dans la requête et devant être récupéré dans la réponse à celle-ci Chaîne de caractères Header

Oui

 

Pour les paramètres de type de données "body", il est possible de copier-coller un exemple dans le formulaire (à droite de l'écran) grâce à la petite loupe bleue présente dans la description des paramètres en entrée de la requête, en changeant juste les valeurs spécifiques :

image loupe pour coller exple

Cette loupe déploie une fenêtre avec le modèle du swagger.

La fourniture d’un objet paymentRequest en exemple n’est malheureusement pas fourni dans le swagger.

 

 

Swagger try it pisp

Swagger ex try it pisp

Si un exemple de cette ressource avait été présent dans le swagger fourni par la STET, il serait alors possible de cliquer sur la flèche rose située en bas de cette fenêtre pour que les données de l'exemple alimentent la fenêtre du Try-It située sur la droite. A noter, l'exemple provient de STET, nous vous signalons qu'il comporte une erreur dans les codes schemeName utilisés.

Un exemple de requête est donné ci-après, les données suivantes devant être unique et donc modifiées à chaque appel, sans quoi la requête est rejetée pour cause de doublon (le rejeu n'est pas autorisé) :

  • paymentInformationId
  • instructionId
  • endToEndId
  • x-request-id
{

    "paymentInformationId": "azertyui 1631195080",

    "creationDateTime": "2021-09-12T10:45:09.209+02:00",

    "numberOfTransactions": 1,

    "requestedExecutionDate": "2021-09-13T14: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": "FR7613825003000400000541718"

        }

    },

    "chargeBearer": "SLEV",

    "creditTransferTransaction": [

        {

                  "purpose": "COMC",

                  "paymentId": {

                "instructionId": "instructionId 1631195080",

                "endToEndId": "endToEndId 1631195080"

            },

            "instructedAmount": {

                "currency": "EUR",

                "amount": "2.71"

            },

            "remittanceInformation": {

                  "unstructured" : [ "remittanceInformation01" ]

            }

        }

    ],

    "supplementaryData": {

        "acceptedAuthenticationApproach": [

            "REDIRECT",

            "DECOUPLED"

        ],

        "scaHint": "scaExemption",

        "successfulReportUrl": https://www.api.89c3.com/OAuth2Callback.aspx&state=OK-12345&code_challenge_method=S256&code_challenge=T3LPv9JWu_HtyEQOkDCo4YYRmZJXTjJ0Ng9jfq_UBBg,

        "unsuccessfulReportUrl": "https://www.api.89c3.com"

    }

}

Suite à l'alimentation des paramètres obligatoires, la requête peut être soumise via la bouton "Exécuter, le résultat est alors visible sous ce bouton :

 

RESULTAT

Status code : 201

 {
  "appliedAuthenticationApproach": "REDIRECT",
  "_links": {
    "consentApproval": {
      "href": "TPPPISPurlConsentApproval/psuId.html?resourceId=0000000a22-146329369000016907660677&nonce=Id-2ed9775ce61639e9a3c94ecc",
      "templated": null
    }
  }
}

 

Il est également possible de visualiser les données retournées dans le header en déroulant la fenêtre Entête :

image bandeau résultat try it

access-control-allow-origin: https://sandbox.api.89c3
access-control-expose-headers: x-correlationid
cache-control: no-cache, no-store, max-age=0, must-revalidate, public
connection: close
content-length: 218
content-type: application/hal+json;charset=utf-8
date: Thu, 13 March 2019 12:50:53 GMT
expires: 0
max-forwards: 5
pragma: no-cache
server: Apache
strict-transport-security: max-age=63072000; includeSubdomains;
via: 1.0 bilmwsg011.dom101.mapres ()
x-content-type-options: nosniff
x-correlationid: Id-2ed9775ce61639e9a3c94ecc 0
x-frame-options: SAMEORIGIN, DENY
x-nonce: Id-2ed9775ce61639e9a3c94ecc
x-xss-protection: 1; mode=block

 

Ecrans de la redirection ASPSP pour choix du compte à débiter et confirmation de l’initiation de paiement

Suite à la demande d’initiation de paiement (POST /payment-requests), il est possible de recopier l’URL contenu dans l’objet « consentApproval / href » de la réponse et de l’ouvrir dans un navigateur internet. Cela permet de faire jouer les écrans ASPSP de l’initiation de paiement.

 

➤ Récupérer le statut d'une initiation de paiement avec le Try-it

Pour restituer le statut d'une initiation de paiement avec la méthode GET /payment-requests/{paymentRequestResourceId} , il est nécessaire de passer :

  • en argument paymentRequestResourceId la valeur du champ de nom « resourceId » obtenu dans l’objet « consentApproval / href » en réponse de la méthode POST /payment-requests
  • le même x-request-id que celui utilisé pour la méthode POST /payment-requests 

RESULTAT

Status code : 200

{

    "paymentRequest": {

        "resourceId": "0000000a22-146329369000016907660677",

        "paymentInformationId": "azertyui 1631195853",

        "creationDateTime": "2021-09-12T10:45:09.209+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"

                ]

            }

        },

        "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": "FR7613825003000400000541718"

            }

        },

        "chargeBearer": "SLEV",

        "paymentInformationStatus": "PDNG",

        "requestedExecutionDate": "2021-09-13T15:10:10.109+02:00",

        "creditTransferTransaction": [

            {

                "paymentId": {

                    "resourceId": "0000000a22-146329369000016907660677",

                    "instructionId": "instructionId 1631195080",

                    "endToEndId": "endToEndId 1631195080"

                },

                "requestedExecutionDate": "2021-09-13T15:10:10.109+02:00",

                "instructedAmount": {

                    "currency": "EUR",

                    "amount": "2.71"

                },

                "purpose": "COMC",

                "regulatoryReportingCodes": [],

                "remittanceInformation": {

                    "unstructured": [

                        "remittanceInformation01"

                    ]

                },

                "transactionStatus": "PDNG"

            }

        ],

        "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"

        }

    },

    "_links": {

        "request": {

            "href": "/stet/psd2/v1.4.2/payment-requests/0000000a22-146329369000016907660677",

            "templated": false

        },

        "confirmation": {

            "href": "/stet/psd2/v1.4.2/payment-requests/0000000a22-146329369000016907660677/o-confirmation",

            "templated": false

        }

    }

}

 

➤ Annuler une initiation de paiement avec le Try-it

La description des différents paramètres pour annuler une initiation de paiement avec la méthode PUT /payment-requests/{paymentRequestResourceId}  sont les mêmes que ceux pour la méthode GET /payment-requests/{paymentRequestResourceId}

Il est nécessaire de passer :

  • en argument paymentRequestResourceId la valeur du champ de nom « resourceId » obtenu dans l’objet « consentApproval / href » en réponse de la méthode POST /payment-requests.
  • le même x-request-id que celui passé pour la méthode POST /payment-requests.

Pour constituer le body d’annulation d’un paiement, il convient de : 

  • Avoir effectuer une requête POST /payment-requests en prenant soin d’indiquer une date d’exécution postérieure à J+2 car on ne peut pas demander une annulation pour le même jour que la date d’exécution prévue pour un virement (donc ne pas mettre la date du jour à ce stade)
  • Effectuer une requête GET /payment-requests/{paymentRequestResourceId},
  • Recopier le body de réponse
  • Effectuer les modifications suivantes sur ce body : 
    • La donnée transactionStatus de l’objet creditTransferTransaction doit être passée à "RJCT" (rejeté)
    • La donnée statusReasonInformation de l’objet creditTransferTransaction doit être passée à "DS02" (annulation client)
    • Il faut également enlever toute la partie _links
    • Pour finir il faut supprimer l’objet parent (niveau 1) "paymentRequest": {" ainsi que l’accolade fermante en bas du flux "}"

 

Un exemple de requête est donné ci-après, 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.
{

        "resourceId": "0000000a22-146329369000016907660677",

        "paymentInformationId": "azertyui 1631195853",

        "creationDateTime": "2021-09-12T10:45:09.209+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"

                ]

            }

        },

        "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": "FR7613825002000400000041717"

            }

        },

        "chargeBearer": "SLEV",

        "paymentInformationStatus": "PDNG",

        "requestedExecutionDate": "2021-09-13T15:10:10.109+02:00",

        "creditTransferTransaction": [

            {

                "paymentId": {

                    "resourceId": "0000000a22-146329369000016907660677",

                    "instructionId": "instructionId 1631195080",

                    "endToEndId": "endToEndId 1631195080"

                },

                "requestedExecutionDate": "2021-09-13T15:10:10.109+02:00",

                "instructedAmount": {

                    "currency": "EUR",

                    "amount": "2.71"

                },

                "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"

        }

}

Suite à l'alimentation des paramètres obligatoires, la requête peut être soumise via la bouton "Exécuter, le résultat est alors visible sous ce bouton : 

Remarque : seules les initiations de paiement dans l’état ACTC or ACCP peuvent être annulées via une requête PUT  /stet/psd2/v1.4.2/payment-requests/{paymentRequestResourceId}

 

RESULTAT

Status code : 200

{
    "appliedAuthenticationApproach": "REDIRECT",
    "_links": {
        "consentApproval": {
            "href": "https://www.13807.sandbox.api.89c3.com/89C3api/accreditation/v1/cancellation?paymentRequestResourceId=00000046cf-160008779100013807600254&nonce=jWyvLAU8PNm34YCOidrg&creditorName=QW1hem9uIFNB&creditorAccount=RlI3NjEzODI1MDAyMDAwNDAwMDAwMDQxNzE3&amount=Mi4xMg%3D%3D&currency=RVVS&successfulReportUrl=aHR0cDovL3R1cmJvc2EuYmFucXVlcG9wdWxhaXJlLmZyLw%3D%3D&unsuccessfulReportUrl=aHR0cHM6Ly93d3cuYXBpLjg5YzMuY29tL2ZyL2NvbXBvbmVudC9icGNlcG9ydGFsL3Byb2R1Y3RzLzgwL3VzZWNhc2VzLzIyMQ%3D%3D&privateId=RDgxODMyNTBJMA%3D%3D&requestedExecutionDate=MjAyMC0wOS0yNFQwMTowMDowMC4wMDArMDI6MDA%3D&method=UFVU",
            "templated": true
        }
    }
}

 

Il est également possible de visualiser les données retournées dans le header en déroulant la fenêtre Entête :

payment 03

access-control-allow-origin: https://www.api.89c3.com
access-control-expose-headers: x-correlationid
cache-control: no-cache, no-store, max-age=0, must-revalidate, public
connection: Keep-Alive
content-length: 178
content-type: application/hal+json;charset=utf-8
date: Mon, 14 Sep 2020 10:15:19 GMT
expires: 0
keep-alive: timeout=5, max=299
max-forwards: 20
pragma: no-cache
strict-transport-security: max-age=63072000; includeSubdomains;
x-content-type-options: nosniff
x-correlationid: Id-b8425f5fd86fda545f6b2225 0
x-frame-options: SAMEORIGIN, DENY
x-request-id: 1
x-xss-protection: 1; mode=block

 

Ecrans de la redirection ASPSP pour confirmation de l’annulation de l’initiation de paiement

Suite à la demande d’initiation de paiement (POST /payment-requests), il convient de recopier l’URL contenu dans l’objet « consentApproval / href » de la réponse et de l’ouvrir dans un navigateur internet. Cela permet de jouer les écrans ASPSP de confirmation de l’annulation du virement différé.