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
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
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ètre | Description | Type de données | Type de paramètre | Obligatoire |
---|---|---|---|---|
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 :
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.
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 :
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¤cy=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 :
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é.