# Préface
Cette section contient des informations sur la maniĂšre d'utiliser ce document.
# Conventions utilisées dans ce document
Les conventions suivantes sont utilisées dans ce document pour identifier les types d'informations spécifiés.
| Type d'information | Convention | Exemple |
|---|---|---|
| ĂlĂ©ments de l'API, tels que les ressources | Gras | /authorization |
| Variables | Italique avec des chevrons | {ID} |
| Termes du glossaire | Italique lors de la premiĂšre occurrence ; dĂ©fini dans le Glossaire | Le but de lâAPI est de permettre des transactions financiĂšres interopĂ©rables entre un Payeur (un payeur de fonds Ă©lectroniques dans une transaction de paiement) situĂ© dans un FSP (une entitĂ© qui fournit un service financier numĂ©rique Ă un utilisateur final) et un BĂ©nĂ©ficiaire (un bĂ©nĂ©ficiaire de fonds Ă©lectroniques dans une transaction de paiement) situĂ© dans un autre FSP. |
| Documents de rĂ©fĂ©rence | Italique | Les informations utilisateur ne devraient gĂ©nĂ©ralement pas ĂȘtre utilisĂ©es par les dĂ©ploiements de lâAPI ; les mesures de sĂ©curitĂ© dĂ©taillĂ©es dans Signature API et Chiffrement API doivent ĂȘtre utilisĂ©es Ă la place. |
# Informations sur la version du document
| Version | Date | Description des modifications |
|---|---|---|
| 1.0 | 2018-03-13 | Version initiale |
| 1.1 | 2020-05-19 | 1. Cette version contient une nouvelle option pour qu'un FSP BĂ©nĂ©ficiaire demande une notification de validation (commit) du Switch. Le Switch doit ensuite envoyer la notification de validation Ă l'aide de la nouvelle requĂȘte PATCH /transfers/{ID}. L'option d'utiliser la notification de validation remplace l'ancienne option "ContrĂŽle supplĂ©mentaire de compensation facultatif". La section dĂ©crivant cela a Ă©tĂ© remplacĂ©e par la nouvelle section "Commit Notification (Notification de validation)". La ressource transfers a Ă©tĂ© mise Ă jour avec la nouvelle requĂȘte PATCH, cette ressource est donc passĂ©e en version 1.1. Dans le cadre de l'ajout de la possibilitĂ© d'utiliser une notification de validation, les changements suivants ont Ă©tĂ© apportĂ©s : a. PATCH a Ă©tĂ© ajoutĂ© comme mĂ©thode HTTP autorisĂ©e dans la section 3.2.2. b. Le flux dâappel pour PATCH est dĂ©crit dans la section 3.2.3.5. c. Le tableau 6 en section 6.1.1 a Ă©tĂ© mis Ă jour pour inclure PATCH comme mĂ©thode HTTP possible. d. La section 6.7.1 contient la nouvelle version de la ressource transfers. e. La section 6.7.2.6 dĂ©crit le processus dâutilisation des notifications de validation f. La section 6.7.3.3 dĂ©crit la nouvelle requĂȘte PATCH /transfers/{ID}. 2. En plus des changements mentionnĂ©s ci-dessus concernant la notification de validation, les modifications suivantes n'affectant pas l'API ont Ă©tĂ© apportĂ©es : a. Figure 6 mise Ă jour car elle contenait une erreur de copier-coller. b. Ajout de la section 6.1.2 pour fournir une vue complĂšte de la version actuelle de chaque ressource. c. Ajout d'une section pour chaque ressource afin de voir lâhistorique des versions de ressource. d. Corrections Ă©ditoriales mineures. 3. Les descriptions de deux des champs d'en-tĂȘte HTTP du Tableau 1 ont Ă©tĂ© mises Ă jour pour ajouter plus de spĂ©cificitĂ© et de contexte a. La description du champ d'en-tĂȘte FSPIOP-Destination a Ă©tĂ© mise Ă jour pour indiquer qu'il doit rester vide si la destination n'est pas connue de l'Ă©metteur original, mais dans tous les autres cas, doit ĂȘtre ajoutĂ© par l'Ă©metteur original de la requĂȘte. b. La description du champ d'en-tĂȘte FSPIOP-URI a Ă©tĂ© rendue plus spĂ©cifique. 4. Les exemples utilisĂ©s dans ce document ont Ă©tĂ© mis Ă jour pour utiliser la bonne interprĂ©tation du type complexe ExtensionList dĂ©fini dans le Tableau 84. Ceci n'implique pas de changement en soi. a. Lâexemple 5 a Ă©tĂ© mis Ă jour Ă ce sujet. 5. Le modĂšle de donnĂ©es est mis Ă jour pour ajouter un Ă©lĂ©ment optionnel ExtensionList au type complexe PartyIdInfo selon la demande de changement : https://github.com/mojaloop/mojaloop-specification/issues/30. Par consĂ©quent, le modĂšle de donnĂ©es comme spĂ©cifiĂ© dans le Tableau 103 a Ă©tĂ© mis Ă jour. Pour plus de cohĂ©rence, le modĂšle de donnĂ©es pour les appels POST /participants/{Type}/{ID} et POST /participants/{Type}/{ID}/{SubId} dans le Tableau 10 a Ă©galement Ă©tĂ© mis Ă jour pour inclure lâĂ©lĂ©ment optionnel ExtensionList. 6. Une nouvelle section 6.5.2.2 est ajoutĂ©e pour dĂ©crire le processus impliquĂ© dans le rejet dâun devis. 7. Une note est ajoutĂ©e Ă la Section 6.7.4.1 pour clarifier lâutilisation de lâĂ©tat ABORTED dans les callbacks PUT /transfers/{ID}. |
| 1.1.1 | 2021-09-22 | Cette version du document ajoute uniquement des informations sur les en-tĂȘtes HTTP optionnels relatifs Ă la prise en charge de la traçabilitĂ© dans Table 2, voir Distributed Tracing Support for OpenAPI Interoperability pour plus dâinformations. Aucun changement nâest apportĂ© Ă aucune ressource dans cette version. |
# Introduction
Ce document introduit et dĂ©crit lâAPI ouverte (Interface de Programmation Applicative) pour lâinteropĂ©rabilitĂ© des Fournisseurs de Services Financiers (FSP), appelĂ©e ci-aprĂšs « lâAPI ». L'objectif de l'API est de permettre des transactions financiĂšres interopĂ©rables entre un Payeur (un payeur de fonds Ă©lectroniques dans une transaction de paiement) situĂ© dans un FSP (une entitĂ© qui fournit un service financier numĂ©rique Ă un utilisateur final) et un BĂ©nĂ©ficiaire (un destinataire de fonds Ă©lectroniques dans une opĂ©ration de paiement) situĂ© dans un autre FSP. L'API ne prĂ©cise aucun service frontal entre un Payeur ou un BĂ©nĂ©ficiaire et son propre FSP ; tous les services dĂ©finis dans l'API sont entre FSPs. Les FSPs sont connectĂ©s soit (a) directement entre eux, soit (b) par un Switch placĂ© entre les FSPs pour router les transactions financiĂšres vers le FSP appropriĂ©.
Le transfert de fonds d'un Payeur Ă un BĂ©nĂ©ficiaire doit ĂȘtre effectuĂ© en quasi temps rĂ©el. DĂšs qu'une transaction financiĂšre a Ă©tĂ© acceptĂ©e par les deux parties, elle est rĂ©putĂ©e irrĂ©vocable. Cela signifie qu'une transaction terminĂ©e ne peut pas ĂȘtre annulĂ©e dans l'API. Pour annuler une transaction, une nouvelle transaction de remboursement inverse doit ĂȘtre créée Ă partir du BĂ©nĂ©ficiaire de la transaction d'origine.
L'API est conçue pour ĂȘtre suffisamment gĂ©nĂ©rique pour prendre en charge de nombreux cas d'utilisation et lâextensibilitĂ© de ceux-ci. Cependant, elle doit contenir suffisamment de dĂ©tails pour permettre une implĂ©mentation sans ambiguĂŻtĂ©.
La version 1.0 de l'API est conçue pour ĂȘtre utilisĂ©e dans un pays ou une rĂ©gion ; les envois internationaux nĂ©cessitant des opĂ©rations de change ne sont pas pris en charge. Cette version contient Ă©galement une prise en charge de base du protocole Interledger, qui sera utilisĂ© dans les futures versions de lâAPI pour gĂ©rer les transactions multi-devises et multi-intermĂ©diaires.
Ce document :
- Définit une liaison REST asynchrone de l'API logique introduite dans ModÚles de transactions génériques.
- ComplĂšte et dĂ©veloppe les informations fournies dans SpĂ©cification Open API pour lâInteropĂ©rabilitĂ© FSP.
# SpĂ©cification Open API pour lâInteropĂ©rabilitĂ© FSP
La spĂ©cification Open API pour lâInteropĂ©rabilitĂ© FSP inclut les documents suivants.
# Documents logiques
# Documents de liaison REST asynchrone
# Intégrité des données, confidentialité et non-répudiation
# Documents généraux
# DĂ©finition de lâAPI
Cette section introduit la technologie utilisĂ©e par lâAPI, incluant :
# Caractéristiques générales
Cette section dĂ©crit les caractĂ©ristiques gĂ©nĂ©rales de lâAPI.
# Style architectural
LâAPI est basĂ©e sur le style architectural REST (REpresentational State Transfer1). Il existe cependant quelques diffĂ©rences avec une implĂ©mentation REST typique. Ces diffĂ©rences incluent :
API totalement asynchrone : pour pouvoir gĂ©rer de nombreux processus longs concurrents et avoir un mĂ©canisme unique de gestion des requĂȘtes, tous les services API sont asynchrones. Exemples :
- Transactions financiĂšres en lots
- Une transaction financiÚre nécessitant une interaction utilisateur
DĂ©centralisĂ©e : les services sont dĂ©centralisĂ©s, il nâexiste pas dâautoritĂ© centrale pour piloter une transaction.
OrientĂ©e service : les ressources proposĂ©es par lâAPI sont relativement orientĂ©es service comparĂ©es Ă une API REST classique.
Pas entiĂšrement sans Ă©tat : certaines informations dâĂ©tat doivent ĂȘtre conservĂ©es Ă la fois cĂŽtĂ© client et cĂŽtĂ© serveur durant le processus de transaction.
Le client dĂ©termine lâidentifiant commun : dans une implĂ©mentation REST typique (avec distinction claire client/serveur), câest le serveur qui gĂ©nĂšre lâID lors de la crĂ©ation de lâobjet. Dans cette API, un devis ou une transaction financiĂšre rĂ©side Ă la fois dans le FSP du Payeur et du BĂ©nĂ©ficiaire, car les services sont dĂ©centralisĂ©s. Il est donc nĂ©cessaire dâavoir un identifiant commun pour lâobjet. Les raisons en sont doubles :
- LâID commun est utilisĂ© dans lâURI du callback asynchrone vers le client. Le client sait donc Ă quelle URI Ă©couter pour le callback correspondant Ă la requĂȘte.
- Le client peut utiliser lâID commun dans une requĂȘte HTTP GET directement sâil ne reçoit pas de callback depuis le serveur (voir DĂ©tails HTTP pour plus dâinformations).
Pour maintenir lâunicitĂ© des IDs communs, chacun est dĂ©fini comme un UUID (Identifiant Universel Unique2). Pour garantir encore plus lâunicitĂ©, il est recommandĂ© au serveur dâassocier chaque ID dâobjet Ă lâID FSP du client. Si un serveur reçoit tout de mĂȘme un ID commun non unique lors dâune requĂȘte HTTP POST (voir DĂ©tails HTTP pour plus de dĂ©tails), la requĂȘte doit ĂȘtre gĂ©rĂ©e comme indiquĂ© dans la section Services idempotents cĂŽtĂ© serveur.
# Protocole de niveau applicatif
HTTP, tel que dĂ©fini dans RFC 72303, est utilisĂ© comme protocole de niveau applicatif dans lâAPI. Toute communication en environnement de production doit ĂȘtre sĂ©curisĂ©e en utilisant HTTPS (HTTP sur TLS4). Pour plus de dĂ©tails, voir DĂ©tails HTTP.
# Syntaxe URI
La syntaxe des URIs suit la RFC 39865 pour identifier les ressources et services proposĂ©s par lâAPI. Cette section introduit et prĂ©cise les sujets dâimplĂ©mentation propres Ă chaque partie de la syntaxe.
Une URI gĂ©nĂ©rique a la forme prĂ©sentĂ©e dans Exemple 1, oĂč la partie [user:password@]host[:port] correspond Ă la partie Authority dĂ©crite dans la section Authority.
{resource}.
# Exemple 1
scheme:[//[user:password@]host[:port]][/]path[?query][#fragment]
Exemple 1 -- Format gĂ©nĂ©rique dâURI
# Scheme
Conformément à la section Protocole de niveau applicatif, le scheme sera toujours soit http, soit https.
# Autorité
La partie dâautoritĂ© consiste en une partie dâauthentification optionnelle (User Information), une partie hĂŽte obligatoire, suivie dâun port optionnel.
# Informations utilisateur
Les informations utilisateur ne devraient gĂ©nĂ©ralement pas ĂȘtre utilisĂ©es par les dĂ©ploiements API ; les mesures de sĂ©curitĂ© dĂ©taillĂ©es dans Signature API et Chiffrement API doivent ĂȘtre utilisĂ©es Ă la place.
# HĂŽte
LâhĂŽte correspond Ă lâadresse du serveur. Il peut sâagir dâune adresse IP ou dâun nom dâhĂŽte. Elle variera (gĂ©nĂ©ralement) selon le dĂ©ploiement.
# Port
Le numĂ©ro de port est optionnel ; par dĂ©faut, le port HTTP est 80 et HTTPS 443, mais dâautres ports peuvent ĂȘtre utilisĂ©s. Le port Ă utiliser peut diffĂ©rer selon le dĂ©ploiement.
# Chemin (Path)
Le chemin pointe vers une ressource ou un service effectif de lâAPI. Les ressources de lâAPI sont :
- participants
- parties
- quotes
- transactionRequests
- authorizations
- transfers
- transactions
- bulkQuotes
- bulkTransfers
Toutes les ressources ci-dessus sont également organisées de façon hiérarchique, séparées par un ou plusieurs slash ('/'). Les ressources supportent différents services selon la méthode HTTP utilisée. Toutes les ressources et services API supportés, avec URI et méthode HTTP, figurent dans le tableau 6.
# Query
La partie query est optionnelle ; elle nâest actuellement utilisĂ©e et prise en charge que par certains services de lâAPI. Voir les ressources API dans la section Services API pour plus de dĂ©tails sur les services qui prennent en charge les chaĂźnes de requĂȘte. Tous les autres services doivent ignorer toute chaĂźne de requĂȘte reçue, car des chaĂźnes de requĂȘte pourront ĂȘtre ajoutĂ©es dans de futures versions mineures de lâAPI (voir MĂ©thodes HTTP).
Sâil y a plusieurs paires clĂ©-valeur dans la chaĂźne de requĂȘte, celles-ci doivent ĂȘtre sĂ©parĂ©es par lâesperluette ('&').
L'exemple 2 montre un exemple dâURI issue de la ressource /authorization, oĂč quatre paires clĂ©-valeur diffĂ©rentes sont prĂ©sentes, sĂ©parĂ©es par lâesperluette.
# Exemple 2
/authorization/3d492671-b7af-4f3f-88de-76169b1bdf88?authenticationType=OTP&retriesLeft=2&amount=102¤cy=USD
Exemple 2 -- URI contenant plusieurs paires clĂ©-valeur dans la chaĂźne de requĂȘte
# Fragment
Le fragment est une partie optionnelle dâune URI. Il nâest pris en charge par aucun service de lâAPI et doit donc ĂȘtre ignorĂ© sâil est reçu.
# Normalisation et comparaison dâURI
Comme prĂ©cisĂ© dans la RFC 72306, les parties scheme) et hĂŽte) de lâURI doivent ĂȘtre considĂ©rĂ©es comme insensibles Ă la casse. Toutes les autres parties doivent ĂȘtre traitĂ©es en tenant compte de la casse.
# Jeu de caractĂšres
Le jeu de caractĂšres doit toujours ĂȘtre supposĂ© UTF-8, dĂ©fini dans 36297. Il nâest donc pas nĂ©cessaire de lâindiquer dans les en-tĂȘtes HTTP (voir Champs dâen-tĂȘte HTTP). Aucun autre jeu de caractĂšres que UTF-8 nâest pris en charge par lâAPI.
# Format dâĂ©change de donnĂ©es
LâAPI utilise JSON (JavaScript Object Notation), dĂ©fini dans RFC 71598, comme format dâĂ©change. JSON est ouvert, lĂ©ger, lisible et indĂ©pendant de la plateforme, bien adaptĂ© pour lâĂ©change de donnĂ©es entre systĂšmes.
# Détails HTTP
Cette section contient des informations dĂ©taillĂ©es concernant lâutilisation du protocole HTTP dans lâAPI.
# Champs dâen-tĂȘte HTTP
Les en-tĂȘtes HTTP sont gĂ©nĂ©ralement dĂ©crits dans la RFC 72309. Les deux sections suivantes dĂ©crivent les champs dâen-tĂȘte HTTP qui doivent ĂȘtre attendus et mis en Ćuvre dans lâAPI.
LâAPI prend en charge une taille maximale de 65536 octets (64 kilooctets) dans lâen-tĂȘte HTTP.
# Champs dâen-tĂȘte HTTP de requĂȘte
Le tableau 1 contient les champs dâen-tĂȘte HTTP de requĂȘte qui doivent ĂȘtre supportĂ©s par les implĂ©mentations de lâAPI. Une implĂ©mentation doit Ă©galement sâattendre Ă dâautres champs dâen-tĂȘte HTTP standards et non standards non listĂ©s ici.
# Tableau 1
| Champ | Exemples de valeurs | Cardinalité | Description |
|---|---|---|---|
| Accept | application/vnd.interoperability.resource+json | 0..1 Obligatoire dans une requĂȘte client. Non utilisĂ© dans un callback du serveur. Le champ dâen-tĂȘte Accept10 indique la version de lâAPI que le client souhaite utiliser cĂŽtĂ© serveur. Voir En-tĂȘte Accept HTTP pour demander une version spĂ©cifique de lâAPI. | |
| Content-Length | 3495 | 0..1 | Le champ Content-Length11 indique la taille attendue du corps de la requĂȘte. PrĂ©sent seulement sâil y a un corps. Note : lâAPI autorise une taille maximale de 5 Mo (5242880 octets). |
| Content-Type | application/vnd.interoperability.resource+json;version=1.0 | 1 | Content-Type12 indique la version spĂ©cifique de lâAPI utilisĂ©e pour envoyer le corps de la requĂȘte. Voir Version acceptĂ©e demandĂ©e par le client pour plus dâinformations. |
| Date | Tue, 15 Nov 1994 08:12:31 GMT | 1 | Le champ Date13 indique la date Ă laquelle la requĂȘte a Ă©tĂ© envoyĂ©e. |
| X-Forwarded-For | X-Forwarded-For: 192.168.0.4, 136.225.27.13 | 1..0 | Le champ X-Forwarded-For14 est une norme officieuse utilisĂ©e pour indiquer lâIP dâorigine du client Ă titre informatif, une requĂȘte pouvant passer par plusieurs proxys, pare-feux, etc. Plusieurs valeurs X-Forwarded-For comme dans lâexemple doivent ĂȘtre attendues et supportĂ©es. Note : Une alternative Ă X-Forwarded-For est dĂ©finie dans RFC 723915. Cependant, en 2018, RFC 7239 est moins utilisĂ©/supportĂ© que X-Forwarded-For. |
| FSPIOP-Source | FSP321 | 1 | Le champ dâen-tĂȘte FSPIOP-Source est un champ non standard HTTP utilisĂ© par lâAPI pour identifier lâĂ©metteur de la requĂȘte HTTP. Il doit ĂȘtre placĂ© par lâĂ©metteur original de la requĂȘte. NĂ©cessaire pour le routage (voir Routage des flux d'appels avec FSPIOP-Destination et FSPIOP-Source) et la vĂ©rification de signature (FSPIOP-Signature). |
| FSPIOP-Destination | FSP123 | 0..1 | Le champ FSPIOP-Destination est non standard HTTP, utilisĂ© pour le routage (via en-tĂȘte HTTP) des requĂȘtes/rĂ©ponses vers la destination. Il doit ĂȘtre dĂ©fini par lâĂ©metteur initial de la requĂȘte, si la destination est connue (valable pour tous les services sauf GET /parties), afin que les entitĂ©s intermĂ©diaires nâaient pas Ă parser le corps pour le routage (voir Routage). Si la destination nâest pas connue (valable pour GET /parties), ce champ doit rester vide. |
| FSPIOP-Encryption | 0..1 | Champ non standard HTTP utilisĂ© pour le chiffrement de bout en bout de la requĂȘte. Voir Chiffrement API. | |
| FSPIOP-Signature | 0..1 | Champ non standard, utilisĂ© pour la signature de bout en bout de la requĂȘte. Voir Signature API. | |
| FSPIOP-URI | /parties/msisdn/123456789 | 0..1 | Champ non standard HTTP utilisĂ© pour la vĂ©rification de la signature, contient lâURI du service. Obligatoire si la signature est utilisĂ©e. Dans le contexte de lâAPI Mojaloop FSPIOP, la valeur FSPIOP-URI commence au service dans lâURI. Par exemple, si lâURL est http://stg-simulator.moja.live/payerfsp/participants/MSISDN/123456789, alors la valeur FSPIOP-URI est « /participants/MSISDN/123456789 ». |
| FSPIOP-HTTP-Method | GET | 0..1 | Champ non standard HTTP utilisé pour la vérification de la signature : doit contenir la méthode HTTP du service utilisé. Obligatoire si la signature est utilisée, voir Signature API. |
Tableau 1 -- Champs dâen-tĂȘte HTTP de requĂȘte obligatoires
Le tableau 2 liste les champs dâen-tĂȘte de requĂȘte HTTP dont la prise en charge par les implĂ©mentations de lâAPI est optionnelle.
# Tableau 2
| Champ | Exemples de valeurs | Cardinalité | Description |
|---|---|---|---|
| traceparent | 00-91e502e28cd723686e9940bd3f378f85-b0f903d000944947-01 | 0..1 | Lâen-tĂȘte traceparent reprĂ©sente la requĂȘte entrante dans un systĂšme de traçage dans un format commun. Voir Distributed Tracing Support for OpenAPI Interoperability pour plus dâinformation. |
| tracestate | banknrone=b0f903d0009449475 | 0..1 | Fournit des informations de traçage spĂ©cifiques au fournisseur et prend en charge plusieurs traces distribuĂ©es. Voir Distributed Tracing Support for OpenAPI Interoperability pour plus dâinformation. |
Tableau 2 -- Champs dâen-tĂȘte HTTP de requĂȘte optionnels
# Champs dâen-tĂȘte HTTP de rĂ©ponse
Le tableau 3 contient les champs dâen-tĂȘte HTTP de rĂ©ponse obligatoires. Une implĂ©mentation peut aussi recevoir dâautres en-tĂȘtes HTTP standards ou non standards non listĂ©s ici.
# Tableau 3
| Champ | Exemples de valeurs | Cardinalité | Description |
|---|---|---|---|
| Content-Length | 3495 | 0..1 | Champ Content-Length16 indiquant la taille attendue du corps. Envoyé uniquement si corps présent. |
| Content-Type | application/vnd.interoperability.resource+json;version=1.0 | 1 | Champ Content-Type17 indiquant la version de lâAPI utilisĂ©e pour envoyer le corps. Voir Section 3.3.4.2 pour plus de dĂ©tails. |
Tableau 3 -- Champs dâen-tĂȘte HTTP de rĂ©ponse
# Méthodes HTTP
Les mĂ©thodes HTTP suivantes, telles que dĂ©finies dans RFC 723118, sont supportĂ©es par lâAPI :
GET : utilisĂ©e par le client pour demander des informations sur un objet prĂ©cĂ©demment créé cĂŽtĂ© serveur. Comme tous les services API sont asynchrones, la rĂ©ponse directe Ă la requĂȘte GET ne contient pas lâobjet demandé : cet objet viendra en callback dans une requĂȘte PUT.
PUT : utilisĂ©e comme callback Ă une prĂ©cĂ©dente requĂȘte GET, POST ou DELETE Ă©mise par le client. Le callback contient soit :
- Informations sur lâobjet prĂ©cĂ©demment créé (POST) ou informations demandĂ©es (GET)
- AccusĂ© de rĂ©ception de suppression dâun objet (DELETE)
- Informations dâerreur si la requĂȘte POST ou GET nâa pu ĂȘtre traitĂ©e cĂŽtĂ© serveur
POST : utilisĂ©e par le client pour demander la crĂ©ation dâun objet cĂŽtĂ© serveur. Comme lâAPI est asynchrone, la rĂ©ponse directe ne contient pas lâobjet : celui-ci viendra en callback via un PUT.
DELETE : utilisĂ©e pour demander la suppression dâun objet cĂŽtĂ© serveur. DELETE ne doit ĂȘtre supportĂ© quâau sein dâun systĂšme commun Account Lookup System (ALS) pour supprimer des informations sur une Party (dĂ©tenteur de compte chez un FSP) prĂ©cĂ©demment ajoutĂ©e ; aucun autre type dâobjet ne peut ĂȘtre supprimĂ©. Comme tous les services sont asynchrones, la rĂ©ponse Ă DELETE ne contient pas lâaccusĂ© de rĂ©ception final : celui-ci viendra via un callback en PUT.
PATCH : utilisĂ©e pour notifier une mise Ă jour dâun objet existant. Comme lâAPI est asynchrone, la rĂ©ponse Ă PATCH ne contient pas de corps : cette mĂ©thode sert de notification et ne gĂ©nĂšre pas de callback.
# Séquencement HTTP
Tous les séquences et services sont asynchrones. Aucun service ne supporte le mode synchrone.
# Appel POST HTTP
La figure 1 montre le cas normal de crĂ©ation dâun objet dans un FSP pair via HTTP POST. Le service /service du schĂ©ma doit ĂȘtre remplacĂ© par nâimporte lequel des services du Tableau 6 supportant POST.
# Figure 1
Figure 1 â SĂ©quence dâappel POST HTTP
# Appel GET HTTP
La figure 2 montre le cas dâobtention dâinformations sur un objet dans un FSP pair via HTTP GET. Le service /service/{ID} doit ĂȘtre remplacĂ© par nâimporte quel service listĂ© dans Tableau 6 prenant en charge GET.
# Figure 2
Figure 2 â SĂ©quence dâappel GET HTTP
# Appel DELETE HTTP
La figure 3 dĂ©crit lâappel dâAPI pour supprimer des informations FSP sur une Party via HTTP DELETE dans un ALS. Le service /service/{ID} doit ĂȘtre remplacĂ© par un service du Tableau 6 prenant en charge DELETE. DELETE nâest gĂ©rĂ© que par un ALS commun (câest pourquoi lâALS nâapparaĂźt que cĂŽtĂ© serveur dans la figure).
# Figure 3
Figure 3 â SĂ©quence dâappel DELETE HTTP
Remarque : il est Ă©galement possible que les requĂȘtes vers lâALS passent par un Switch, ou que lâALS et le Switch soient le mĂȘme serveur.
# Callback PUT HTTP
Le PUT HTTP est toujours utilisĂ© comme callback sur une requĂȘte POST, GET ou DELETE.
Le flux dâappel dâune requĂȘte PUT et de la rĂ©ponse peut ĂȘtre observĂ© dans les figures 1, 2 et 3 indiquĂ©es prĂ©cĂ©demment.
# Séquence PATCH HTTP
La figure 4 montre un exemple de sĂ©quence pour le PATCH HTTP, utilisĂ© pour envoyer une notification. Dâabord, un objet est créé via un POST depuis le Switch. Lâobjet est créé dans le FSP Ă lâĂ©tat non finalisĂ©. Le FSP demande ensuite Ă ĂȘtre notifiĂ© de lâĂ©tat final par le Switch via un callback PUT avec lâĂ©tat non finalisĂ©. Le Switch gĂšre le callback et envoie la notification dâĂ©tat finalisĂ© via un PATCH. La seule ressource supportant PATCH est /transfers.
# Figure 4
Figure 4 â SĂ©quence PATCH HTTP
Remarque : les requĂȘtes vers lâALS peuvent aussi ĂȘtre routĂ©es via un Switch, voire ALS et Switch peuvent ĂȘtre le mĂȘme serveur.
# Routage des flux d'appels avec FSPIOP-Destination et FSPIOP-Source
Les en-tĂȘtes HTTP non standard FSPIOP-Destination et FSPIOP-Source servent au routage et Ă la vĂ©rification de signature (voir Signature API). La figure 5 montre lâusage de ces en-tĂȘtes dans un appel POST /service abstrait, lorsque le FSP de destination est connu.
# Figure 5
Figure 5 â Usage des en-tĂȘtes HTTP personnalisĂ©s FSPIOP-Destination et FSPIOP-Source
Pour certains services avec un Switch, la destination nâest pas connue. Par exemple, un FSP envoie un GET /parties au Switch sans savoir quel autre FSP dĂ©tient la Party (voir Section 6.3.2). FSPIOP-Destination sera alors vide (ou dĂ©fini Ă lâID du Switch) Ă©mis depuis le FSP, et renseignĂ© Ă sa vraie valeur par le Switch lors du routage. Voir Figure 6 pour illustration.
# Figure 6
Figure 6 â Exemple : FSPIOP-Destination inconnu pour le FSP
# Codes de statut HTTP de réponse
LâAPI prend en charge les codes HTTP de rĂ©ponse indiquĂ©s dans le tableau 4 :
# Tableau 4
| Code | Raison | Description |
|---|---|---|
| 200 | OK | RĂ©ponse standard pour une requĂȘte rĂ©ussie. UtilisĂ© dans lâAPI en rĂ©ponse Ă un callback pour marquer la complĂ©tion dâun service asynchrone. |
| 202 | Accepted | La requĂȘte a Ă©tĂ© acceptĂ©e pour un traitement ultĂ©rieur cĂŽtĂ© serveur, sans garantie de succĂšs. UtilisĂ© comme accusĂ© de rĂ©ception dâune requĂȘte asynchrone. |
| 400 | Bad Request | Lâapplication ne peut pas traiter la requĂȘte : syntaxe incorrecte ou corps dĂ©passant la taille autorisĂ©e. |
| 401 | Unauthorized | La requĂȘte nĂ©cessite une authentification. |
| 403 | Forbidden | La requĂȘte a Ă©tĂ© refusĂ©e et sera systĂ©matiquement refusĂ©e Ă lâavenir. |
| 404 | Not Found | La ressource indiquĂ©e dans lâURI nâa pas Ă©tĂ© trouvĂ©e. |
| 405 | Method Not Allowed | Méthode HTTP non supportée ; voir Tableau 6 pour les méthodes autorisées par service. |
| 406 | Not acceptable | Le serveur ne peut gĂ©nĂ©rer de contenu conformĂ©ment Ă lâen-tĂȘte Accept reçu ; cela indique qu'il ne supporte pas la version demandĂ©e. |
| 501 | Not Implemented | Le serveur ne supporte pas le service demandé. Le client ne doit pas retenter. |
| 503 | Service Unavailable | Le serveur nâest actuellement pas disponible pour de nouvelles requĂȘtes. Cela devrait ĂȘtre temporaire : le client doit retenter dans un temps raisonnable. |
Tableau 4 â Codes de statut HTTP supportĂ©s dans lâAPI
Tout code de statut HTTP 3xx20 retourné cÎté serveur ne doit pas faire l'objet d'une nouvelle tentative et requiert une investigation manuelle.
Une implĂ©mentation de lâAPI doit aussi savoir gĂ©rer dâautres erreurs non listĂ©es, en particulier si la requĂȘte passe par des proxies.
Comme toutes les requĂȘtes API sont asynchrones, les codes dâerreur HTTP serveur supplĂ©mentaires (5xx21 non dĂ©finis au tableau 4) ne sont pas utilisĂ©s par lâAPI elle-mĂȘme. Toute erreur serveur lors du traitement rĂ©el sera notifiĂ©e via un callback dâerreur au client (voir Section 9.2).
# Informations dâerreur en rĂ©ponse HTTP
En plus du code HTTP, toutes les rĂ©ponses dâerreur HTTP (4xx et 5xx) peuvent contenir un Ă©lĂ©ment ErrorInformation, dĂ©fini dans la section ErrorInformation. Cet Ă©lĂ©ment doit, si possible, permettre de fournir plus dâinformations au client.
# Services idempotents cÎté serveur
Tout service supportant GET doit ĂȘtre idempotent : la mĂȘme requĂȘte peut ĂȘtre envoyĂ©e plusieurs fois sans changer lâobjet. (LâĂ©tat de lâobjet cĂŽtĂ© serveur peut toutefois Ă©voluer : par exemple, lâĂ©tat dâune transaction peut changer, mais le FSP envoyant GET ne peut changer lâĂ©tat).
Tout service supportant POST doit aussi ĂȘtre idempotent si le client rĂ©utilise le mĂȘme identifiant. Le serveur ne doit pas crĂ©er un nouvel objet sâil reçoit Ă nouveau la mĂȘme requĂȘte POST. Ceci facilite la gestion de la reprise aprĂšs erreur cĂŽtĂ© client, mais impose des contraintes au serveur â voir lâexemple ici.
# Analyse des duplicats cĂŽtĂ© serveur lors de la rĂ©ception dâun POST
Lors de la rĂ©ception dâune requĂȘte cĂŽtĂ© serveur, il doit vĂ©rifier si un objet de service portant le mĂȘme identifiant existe dĂ©jĂ Â : par exemple, si le client a dĂ©jĂ envoyĂ© POST /transfers avec le mĂȘme transferId. Si lâobjet existe dĂ©jĂ , le serveur vĂ©rifie si ses paramĂštres correspondent Ă ceux de la nouvelle requĂȘte.
Si lâobjet existant a les mĂȘmes paramĂštres que la nouvelle requĂȘte, on considĂšre quâil sâagit dâun renvoi de la part du client.
- Si le serveur nâa pas encore traitĂ© la requĂȘte prĂ©cĂ©dente/créée et nâa donc pas envoyĂ© de callback, la nouvelle requĂȘte peut ĂȘtre ignorĂ©e (un callback va ĂȘtre envoyĂ© de toute façon).
- Si le serveur a fini de traiter lâancienne requĂȘte et a dĂ©jĂ envoyĂ© un callback, un nouveau callback doit ĂȘtre envoyĂ©, comme si une requĂȘte GET avait Ă©tĂ© reçue.
Si lâancien objet nâa pas les mĂȘmes paramĂštres que la requĂȘte, un callback dâerreur expliquant quâun objet avec le mĂȘme identifiant existe dĂ©jĂ mais avec des paramĂštres diffĂ©rents doit ĂȘtre envoyĂ© au client.
Pour simplifier cette analyse, il est recommandĂ© de stocker un hash de toutes les requĂȘtes POST reçues cĂŽtĂ© serveur afin de les comparer facilement lors de rĂ©ceptions ultĂ©rieures.
# Gestion des versions de lâAPI
La stratĂ©gie de dĂ©veloppement de lâAPI est de maintenir la compatibilitĂ© ascendante entre lâAPI et ses ressources/services au maximum, cependant des changements doivent ĂȘtre attendus par les parties qui implĂ©mentent. La gestion des versions de lâAPI est propre Ă chaque ressource (par exemple : /participants, /quotes, /transfers).
Il existe deux types de versions de ressource API : les versions mineures (rétrocompatibles), et majeures (non rétrocompatibles).
- Ă chaque changement des caractĂ©ristiques de lâAPI impactant un service, la ressource concernĂ©e voit sa version augmentĂ©e (mineure ou majeure selon la compatibilitĂ©).
- Un changement dans un service spécifique voit sa ressource correspondante recevoir une nouvelle version.
Le format de la version de ressource est x.y oĂč x est le numĂ©ro majeur, y le mineur. Ă chaque nouvelle version majeure, la version mineure repart Ă 0. La version initiale de chaque ressource est 1.0.
# Changements nâaffectant pas la version de ressource API
Certains changements nâaffecteront pas la version, par exemple : modification de lâordre des paramĂštres dâune requĂȘte ou dâun callback.
# Changement mineur de version de ressource
Les modifications suivantes sont considĂ©rĂ©es comme rĂ©trocompatibles. Les implĂ©menteurs doivent concevoir client/serveur pour les accepter dâemblĂ©e sans casse fonctionnelle :
- Ajout de paramĂštres dâentrĂ©e facultatifs (chaĂźnes de requĂȘte, etc.)
- Ajout de paramĂštres facultatifs dans une requĂȘte ou un callback
- Ajout de codes dâerreur
Ces changements affectent la version mineure.
# Changement majeur de version de ressource
Les modifications ci-aprĂšs sont considĂ©rĂ©es comme rĂ©tro-incompatibles. LâimplĂ©menteur nâa PAS Ă garantir la prise en charge automatique :
- Suppression ou ajout de paramĂštres obligatoires
- ParamĂštres facultatifs devenant obligatoires
- Renommage de paramĂštres
- Changement de types de données
- Changement de logique métier
- Modification des URI de ressource/service
Cette liste nâest pas exhaustive.
# Négociation de version entre client et serveur
LâAPI prend en charge une nĂ©gociation basique par HTTP content negotiation. Un client doit envoyer la version de ressource API souhaitĂ©e dans lâen-tĂȘte Accept (voir En-tĂȘte Accept HTTP). Si le serveur supporte cette version, elle est utilisĂ©e au callback (Version acceptableâŠ). Si le serveur ne la supporte pas, il doit rĂ©pondre HTTP 40622 avec une liste des versions supportĂ©es (Version non acceptableâŠ).
# En-tĂȘte Accept HTTP
Voir ci-dessous un exemple de requĂȘte HTTP simplifiĂ©e avec seulement lâen-tĂȘte Accept23. Il convient de lâutiliser pour un client souhaitant une version majeure prĂ©cise dâune ressource. Exemple 3 : « Je souhaite la version majeure 1, sinon donne la derniĂšre ».
# Exemple 3
POST /service HTTP/1.1
Accept: application/vnd.interoperability.{resource}+json;version=1,
application/vnd.interoperability.{resource}+json
{
...
}
Exemple 3 â En-tĂȘte HTTP Accept : requĂȘte pour la version 1 ou la derniĂšre supportĂ©e
Pour lâexemple de lâexemple 3 :
- POST /service doit ĂȘtre remplacĂ© par nâimporte quelle mĂ©thode HTTP et le service associĂ© (voir Tableau 6).
- Lâen-tĂȘte Accept indique la version de ressource API que le client souhaite utiliser.
- Le type dâapplication est toujours application/vnd.interoperability.{resource} oĂč {resource} est la vraie ressource (participants, quotes, ...).
- Le seul format dâĂ©change de donnĂ©es actuellement supportĂ© est json.
- Pour nâimporte quelle version mineure dâune version majeure : envoyer uniquement la version majeure : version=1 ou version=2.
- Pour une version mineure prĂ©cise : utiliser version=1.2 ou version=2.8. Lâutilisation dâune version majeure.mineure spĂ©cifique est Ă Ă©viter habituellement (les versions mineures Ă©tant rĂ©trocompatibles).
# Version acceptable demandée par le client
Si le serveur supporte la version API demandĂ©e via Accept, il doit utiliser cette version dans le callback. La version majeure.mineure utilisĂ©e doit toujours ĂȘtre indiquĂ©e dans lâen-tĂȘte Content-Type, mĂȘme si le client nâa demandĂ© que la majeure. Par exemple (voir exemple 4) : version 1.0 utilisĂ©e :
# Exemple 4
Content-Type: application/vnd.interoperability.resource+json;version=1.0
Exemple 4 â Champ HTTP Content-Type
# Version non acceptable demandée par le client
Si le serveur ne supporte pas la version demandĂ©e dans Accept, il doit rĂ©pondre HTTP 406 pour signifier lâabsence de support.
Remarque : il est aussi possible que cette information soit envoyĂ©e via un callback dâerreur et non directement â par exemple si la requĂȘte passe via un Switch qui supporte la version, mais que le FSP de destination non.
En plus du HTTP 406, les versions supportĂ©es doivent figurer dans la liste des extensions de lâerreur, avec le numĂ©ro majeur comme clĂ© et le mineur comme valeur. Voir exemple 5 : « Je ne supporte pas la version demandĂ©e, mais je supporte 1.0, 2.1 et 4.2. »
# Exemple 5
{
"errorInformation": {
"errorCode": "3001",
"errorDescription": "Le client a demandé une version non supportée, voir la liste d'extensions pour les versions supportées.",
"extensionList": {
"extension":
[
{ "key": "1", "value": "0"},
{ "key": "2", "value": "1"},
{ "key": "4", "value": "2"}
]
}
}
}
Exemple 5 â Message dâerreur : la version demandĂ©e nâest pas supportĂ©e
# Protocole Interledger
La version actuelle de lâAPI introduit une prise en charge basique du protocole Interledger (ILP), Ă travers lâimplĂ©mentation concrĂšte du protocole Interledger Payment Request24 dans la ressource API /quotes et /transfers.
# Plus dâinformations
Ce document contient les informations ILP utiles Ă lâAPI. Pour davantage dâinformations, consultez le site du projet Interledger25, le livre blanc Interledger26, et la spĂ©cification Interledger architecture27.
# Introduction Ă Interledger
ILP est une norme pour lâinterconnexion des rĂ©seaux de paiement. De la mĂȘme façon que le protocole IP constitue les bases pour la transmission et lâadressage entre rĂ©seaux de donnĂ©es diffĂ©rents, ILP dĂ©finit des bases pour lâadressage des transactions financiĂšres et le transfert de valeur entre comptes sur diffĂ©rents rĂ©seaux de paiement.
ILP nâest pas un scheme en soi. Câest un ensemble de standards qui, sâil est mis en Ćuvre par plusieurs schemes de paiement, permettra leur interopĂ©rabilitĂ©. Par consĂ©quent, implĂ©menter ILP implique dâadapter un scheme existant Ă ces standards. Cela implique notamment que les transferts se fassent en deux phases (rĂ©serve et validation) et la dĂ©finition dâune correspondance entre les comptes du scheme et le systĂšme dâadressage mondial ILP. Cela peut se faire en modifiant le scheme lui-mĂȘme, ou via des entitĂ©s qui fournissent une compatibilitĂ© ILP via des adaptateurs.
Les prĂ©requis pour un paiement ILP sont lâadresse ILP du BĂ©nĂ©ficiaire (voir Adressage ILP) et la condition (voir Transferts conditionnels). Dans la version actuelle de lâAPI, ces deux informations doivent ĂȘtre renvoyĂ©es par le FSP BĂ©nĂ©ficiaire lors dâun devis (/quotes).
# Adressage ILP
Un composant clĂ© du standard ILP est le systĂšme dâadressage28. Il sâagit dâun systĂšme hiĂ©rarchique dĂ©finissant une ou plusieurs adresses pour chaque compte dâun registre.
Le tableau 5 donne des exemples dâadresses ILP dans diffĂ©rents scĂ©narios. Ă noter : la structure est standardisĂ©e, le contenu non, sauf pour le premier segment (avant le premier point).
# Tableau 5
| Adresse ILP | Description |
|---|---|
| g.tz.fsp1.msisdn.1234567890 | Un compte mobile money chez FSP1 pour lâutilisateur de MSISDN 1234567890. |
| g.pk.fsp2.ac03396c-4dba-4743 | Un compte mobile money chez FSP2 identifié par un ID opaque. |
| g.us.bank1.bob | Un compte bancaire chez Bank1 pour lâutilisateur bob. |
Tableau 5 â Exemples dâadresses ILP
Le but principal dâune adresse ILP est dâidentifier un compte et de router une transaction financiĂšre vers ce compte.
Remarque : Une adresse ILP ne doit pas servir Ă identifier une contrepartie dans lâAPI dâinteropĂ©rabilitĂ©. Voir la section Remboursement pour lâadressage dâune Party dans lâAPI.
Penser Ă une adresse ILP comme Ă une adresse IP : jamais vue par lâutilisateur final, mais utilisĂ©e cĂŽtĂ© systĂšme pour router une transaction et identifier un compte. Un mĂȘme compte aura souvent plusieurs adresses ILP. Le systĂšme qui tient le compte peut suivre toutes ou seulement une partie si elles partagent un prĂ©fixe commun.
# Transferts conditionnels
ILP se base sur les transferts conditionnels, oĂč tous les registres impliquĂ©s dans une transaction financiĂšre peuvent dâabord rĂ©server des fonds du compte Payeur puis, plus tard, les dĂ©poser dans celui du BĂ©nĂ©ficiaire. Le transfert du Payeur au BĂ©nĂ©ficiaire dĂ©pend de la prĂ©sentation dâun accomplissement (fulfilment) qui respecte la condition associĂ©e Ă la requĂȘte dâorigine.
Pour supporter les transferts conditionnels, un registre doit permettre dâattacher une condition et une expiration Ă chaque transfert. Le registre doit rĂ©server les fonds du compte Payeur, puis attendre lâun des Ă©vĂ©nements suivants :
- Lâaccomplissement de la condition est soumis au registre : les fonds sont crĂ©ditĂ©s sur le compte du BĂ©nĂ©ficiaire.
- Lâexpiration est atteinte, ou la transaction est rejetĂ©e (par le BĂ©nĂ©ficiaire, son FSPâŠ). Le transfert est alors annulĂ© et les fonds remis au Payeur.
Lorsquâun accomplissement est soumis, le registre doit sâassurer quâil satisfait bien la condition associĂ©e Ă la requĂȘte. Si oui, le transfert est validĂ© ; sinon, il est refusĂ©, et reste en attente jusquâĂ obtention dâun accomplissement valide ou expiration.
ILP supporte diffĂ©rentes conditions, mais les implĂ©menteurs de lâAPI doivent utiliser le hash SHA-256 dâun prĂ©-image de 32 octets. La condition jointe au transfert est le SHA-256, lâaccomplissement Ă©tant le prĂ©-image. Ainsi, quand la condition jointe est un SHA-256, une fois un accomplissement soumis, le registre le valide en calculant son SHA-256 et vĂ©rifiant quâil correspond.
Voir Interledger Payment Request pour des informations concrĂštes sur la gĂ©nĂ©ration de lâaccomplissement (fulfilment) et de la condition.
# Paquet ILP
Le paquet ILP sert Ă emballer des donnĂ©es de bout en bout pouvant ĂȘtre transmises service par service. Il est inclus comme champ dans les requĂȘtes « hop by hop » et ne doit jamais ĂȘtre modifiĂ© par un intermĂ©diaire. L'intĂ©gritĂ© du paquet est liĂ©e Ă celle du transfert de fonds, car le dĂ©clencheur de validation (fulfilment) est gĂ©nĂ©rĂ© Ă partir d'un hash du paquet.
Le paquet a un format binaire strict, car il peut transiter par des systĂšmes Ă haut dĂ©bit/volume, qui doivent lire lâadresse ILP et le montant depuis les headers, sans avoir Ă interprĂ©ter le champ data du paquet (voir Exemple 6). Comme ils ne doivent pas lâinterprĂ©ter, ce champ reste au format octet variable dans la dĂ©finition. Voir Interledger Payment Request pour le dĂ©tail sur la maniĂšre de peupler ce champ dans lâAPI.
Le paquet ILP relie les transferts livre Ă livre qui composent tout paiement ILP. Il est parsĂ© par le destinataire du premier transfert, utilisĂ© pour savoir vers oĂč router le suivant et pour quel montant, lui est passĂ©, etc., jusquâau BĂ©nĂ©ficiaire final qui fournit lâaccomplissement, ce qui valide les transferts en chaĂźne, du dernier au premier.
Le format du paquet ILP est dĂ©fini en ASN.129 (Abstract Syntax Notation One), voir Exemple 6. Lâencodage se fait avec les rĂšgles canoniques Octet Encoding Rules.
# Exemple 6
InterledgerProtocolPaymentMessage ::= SEQUENCE {
-- Montant qui doit ĂȘtre reçu Ă destination : amount UInt64,
-- Adresse ILP destinataire : account Address,
-- Information pour le destinataire (couche de transport) : data OCTET STRING (SIZE (0..32767)),
-- Extensibilité ASN.1
extensions SEQUENCE {
...
}
}
Exemple 6 â Format du paquet ILP en ASN.1
Remarque : Les seuls éléments obligatoires sont le montant à transférer au Bénéficiaire et son adresse ILP.
# Fonctionnalités courantes de l'API
Cette section décrit les fonctionnalités communes utilisées par l'API, incluant :
# Devis (Quoting)
Le devis est le processus qui dĂ©termine les frais et les commissions nĂ©cessaires pour effectuer une transaction financiĂšre entre deux FSP. Il est toujours initiĂ© par le FSP Payeur vers le FSP BĂ©nĂ©ficiaire, ce qui signifie que le devis circule dans le mĂȘme sens qu'une transaction financiĂšre.
Deux modes diffĂ©rents pour Ă©tablir un devis entre FSP sont pris en charge dans lâAPI : Non-divulgation des frais et Divulgation des frais.
La Non-divulgation des frais doit ĂȘtre utilisĂ©e lorsque le FSP Payeur ne souhaite pas montrer sa structure de frais au FSP BĂ©nĂ©ficiaire, ou lorsquâil souhaite avoir plus de contrĂŽle sur les frais payĂ©s par le Payeur une fois le devis Ă©tabli (ce dernier cas sâapplique uniquement pour le montant Ă recevoir ; voir la liste suivante).
La Divulgation des frais peut ĂȘtre utilisĂ©e dans des cas oĂč le FSP BĂ©nĂ©ficiaire souhaite subventionner la transaction ; par exemple, lors d'un dĂ©pĂŽt d'espĂšces chez un agent dâun autre FSP.
La Non-divulgation des frais doit ĂȘtre le mode standard de devis supportĂ© dans la plupart des schĂ©mas. La Divulgation des frais peut ĂȘtre utilisĂ©e dans certains schĂ©mas, par exemple lorsquâune structure de frais dynamique est utilisĂ©e et quâun FSP souhaite pouvoir subventionner le cas dâusage de dĂ©pĂŽt dâespĂšces sur la base dâun coĂ»t dynamique.
En outre, le Payeur peut dĂ©cider si le montant doit ĂȘtre un montant Ă recevoir ou montant Ă envoyer.
Montant Ă envoyer doit ĂȘtre interprĂ©tĂ© comme le montant rĂ©el Ă dĂ©duire du compte du Payeur, frais inclus.
Montant Ă recevoir doit ĂȘtre interprĂ©tĂ© comme le montant qui doit ĂȘtre crĂ©ditĂ© sur le compte du BĂ©nĂ©ficiaire, indĂ©pendamment des frais de transaction interopĂ©rables. Ce montant exclut dâĂ©ventuels frais internes ajoutĂ©s par le FSP BĂ©nĂ©ficiaire.
Le FSP BĂ©nĂ©ficiaire peut choisir dâenvoyer ou non le montant rĂ©ellement reçu par le BĂ©nĂ©ficiaire dans la rĂ©ponse au FSP Payeur. Ce montant doit inclure les Ă©ventuels frais internes appliquĂ©s par le FSP BĂ©nĂ©ficiaire au BĂ©nĂ©ficiaire.
Toutes les taxes sont supposĂ©es ĂȘtre internes au FSP, ce qui signifie qu'elles ne sont pas transmises via l'API. Consultez Informations fiscales pour plus de dĂ©tails sur la fiscalitĂ©.
Remarque : Les frais dynamiques mis en Ćuvre via un Switch ou tout autre intermĂ©diaire ne sont pas pris en charge dans cette version de lâAPI.
# Non-divulgation des frais
Les paiements de frais et de commissions relatifs Ă une transaction interopĂ©rable lorsque les frais ne sont pas divulguĂ©s sont illustrĂ©s dans la Figure 7. Les frais et commissions faisant directement partie de lâAPI sont identifiĂ©s en texte vert. Les Ă©lĂ©ments internes (frais, commissions, bonus internes) sont identifiĂ©s en texte rougeâet ne font pas partie de la transaction entre un FSP Payeur et un FSP BĂ©nĂ©ficiaire, mais le montant reçu par le BĂ©nĂ©ficiaire aprĂšs dĂ©duction de frais internes peut ĂȘtre communiquĂ© Ă titre informatif par le FSP BĂ©nĂ©ficiaire.
Pour un montant Ă envoyer (voir Montant Ă envoyer sans divulgation), des frais internes du FSP Payeur appliquĂ©s au Payeur vont affecter le montant envoyĂ© par ce FSP (ex : pour une transaction de 100 USD avec 1 USD de frais, 99 USD sont envoyĂ©s). Pour un montant Ă recevoir (voir Montant Ă recevoir sans divulgation), ces frais internes n'ont pas d'effet sur le montant envoyĂ©. Les bonus ou commissions internes du FSP Payeur doivent ĂȘtre cachĂ©s, quel que soit le mode (envoi/rĂ©ception).
# Figure 7
Figure 7 -- Frais et commissions liĂ©s Ă lâinteropĂ©rabilitĂ© lorsque les frais ne sont pas divulguĂ©s
Voir Types de frais pour plus dâinformations sur les types de frais envoyĂ©s via lâAPI.
# Montant Ă recevoir sans divulgation
Figure 8 prĂ©sente un exemple de montant Ă recevoir sans divulgation, oĂč le Payeur souhaite que le BĂ©nĂ©ficiaire reçoive exactement 100 USD. Dans ce cas, le FSP Payeur ne fixe pas nĂ©cessairement les frais internes avant dâavoir reçu le devis, puisque le FSP BĂ©nĂ©ficiaire connaĂźt dĂ©jĂ le montant quâil recevra.
Dans cet exemple, le FSP Bénéficiaire décide de verser une commission au FSP Payeur, car les fonds sont injectés dans le systÚme du FSP Bénéficiaire et seront ultérieurement dépensés, ce qui représente un gain futur pour le FSP Bénéficiaire. Le FSP Payeur décide ensuite des frais à facturer au Payeur. Par exemple, s'il veut percevoir 1 USD de frais du Payeur (et reçoit aussi 1 USD de commission), il gagne au total 2 USD.
# Figure 8
Figure 8 -- Exemple de montant Ă recevoir sans divulgation
# Figure 9
Figure 9 -- Vue simplifiĂ©e du mouvement de fonds pour lâexemple prĂ©cĂ©dent
Pour calculer lâĂ©lĂ©ment transferAmount dans le FSP BĂ©nĂ©ficiaire pour un devis Ă montant Ă recevoir sans divulgation, appliquer lâĂ©quation Listing 9, oĂč le Montant de transfert correspond Ă transferAmount (Tableau 24), le Montant du devis Ă amount (Tableau 23), les frais FSP BĂ©nĂ©ficiaire Ă payeeFspFee (Tableau 24), et la commission FSP BĂ©nĂ©ficiaire Ă payeeFspCommission (Tableau 24).
# Listing 7
Montant de transfert = Montant du devis + Frais FSP BĂ©nĂ©ficiaire â Commission FSP BĂ©nĂ©ficiaire
Listing 7 -- Relation entre le montant de transfert et le montant du devis pour ce cas
# Montant Ă envoyer sans divulgation
Figure 10 montre un exemple oĂč le Payeur souhaite envoyer 100 USD. Ici, le FSP Payeur doit dĂ©terminer les frais, commissions ou les deux avant dâenvoyer le devis, pour que le FSP BĂ©nĂ©ficiaire connaisse le montant qui sera reçu. Le montant retirĂ© du compte du Payeur nâest pas communiquĂ©, ni les frais.
Dans cet exemple, le FSP Payeur et le FSP BĂ©nĂ©ficiaire veulent chacun 1 USD de frais, donc le BĂ©nĂ©ficiaire recevra 98 USD. Le montant reçu peut ĂȘtre indiquĂ© dans la rĂ©ponse sous lâĂ©lĂ©ment payeeReceiveAmount, mais ce nâest pas obligatoire.
# Figure 10
Figure 10 -- Exemple de montant Ă envoyer sans divulgation
# Figure 11
Figure 11 : vue simplifiĂ©e du mouvement dâargent.
Figure 11 -- Vue simplifiée du mouvement de fonds pour cet exemple
Pour calculer transferAmount, utiliser lâĂ©quation du Listing 8 : Montant du transfert = transferAmount (Tableau 24), Montant du devis = amount, commission = payeeFspCommission.
# Listing 8
Montant de transfert = Montant du devis â Commission FSP BĂ©nĂ©ficiaire
Listing 8 -- Relation entre le montant de transfert et le montant du devis pour ce cas
La raison pour laquelle les frais FSP BĂ©nĂ©ficiaire sont absents de lâĂ©quation : le Payeur veut envoyer un certain montant de son compte, le BĂ©nĂ©ficiaire reçoit donc moins au lieu que des frais soient ajoutĂ©s au montant.
# Divulgation des frais
Les paiements de frais et de commissions relatifs Ă une transaction interopĂ©rable lorsque les frais sont divulguĂ©s se trouvent en Figure 12. Ce qui est directement liĂ© Ă lâAPI est indiquĂ© en vert. Les frais, bonus, et commissions internes sont en rouge : ils impactent le montant envoyĂ©/reçu mais ne sont pas transmis dans la transaction interopĂ©rable. Le montant net reçu par le BĂ©nĂ©ficiaire (aprĂšs frais internes) peut ĂȘtre transmis Ă titre dâinformation.
Quand la divulgation des frais est utilisĂ©e, la commission envoyĂ©e par le FSP BĂ©nĂ©ficiaire doit subventionner tout ou partie du coĂ»t de la transaction pour le Payeur. Si la commission est supĂ©rieure aux frais pour le Payeur, lâexcĂ©dent doit ĂȘtre traitĂ© comme un frais payĂ© du BĂ©nĂ©ficiaire au Payeur. Un exemple : ici.
# Figure 12
Figure 12 -- Frais et commissions liĂ©s Ă lâinteropĂ©rabilitĂ© lorsque les frais sont divulguĂ©s
Voir Types de frais pour plus d'informations.
# Montant Ă recevoir avec divulgation
Figure 13 : le Payeur veut que le BĂ©nĂ©ficiaire reçoive 100 USD. Le FSP Payeur doit Ă©valuer la transaction en interne avant dâenvoyer la demande de devis, car les frais sont divulguĂ©s. Exemple : le FSP Payeur veut 1 USD de frais, le FSP BĂ©nĂ©ficiaire attribue 1 USD de commission pour subventionner, rendant la transaction gratuite pour le Payeur.
# Figure 13
Figure 13 -- Exemple avec montant Ă recevoir en divulgation
Figure 14 : vue simplifiée.
# Figure 14
Figure 14 -- Vue simplifiée du mouvement de fonds
Pour calculer transferAmount cĂŽtĂ© FSP BĂ©nĂ©ficiaire pour ce type de devis, appliquer l'Ă©quation du Listing 9, oĂč Montant transfert = transferAmount, Montant devis = amount, frais FSP BĂ©nĂ©ficiaire = payeeFspFee, commission FSP BĂ©nĂ©ficiaire = payeeFspCommission.
# Listing 9
Montant de transfert = Montant du devis + Frais FSP BĂ©nĂ©ficiaire â Commission FSP BĂ©nĂ©ficiaire
Listing 9 -- Relation pour ce cas
# Montant Ă envoyer avec divulgation
Figure 15 : le Payeur souhaite envoyer 100 USD au BĂ©nĂ©ficiaire. Les frais doivent ĂȘtre calculĂ©s avant la demande de devis, car ils sont divulguĂ©s. Exemple : chaque FSP souhaite 1 USD de frais.
# Figure 15
Figure 15 -- Exemple avec montant Ă envoyer en divulgation
# Figure 16
Figure 16 : vue simplifiée du mouvement de fonds.
Figure 16 -- Vue simplifiée pour ce cas
Pour calculer transferAmount (cĂŽtĂ© FSP BĂ©nĂ©ficiaire), lâĂ©quation du Listing 10 doit ĂȘtre utilisĂ©e :
# Listing 10
Si (Frais Payeur <= Commission FSP Bénéficiaire)
Montant de transfert = Montant du devis
Sinon
Montant de transfert = Montant du devis â (Frais Payeur â Commission FSP BĂ©nĂ©ficiaire)
Listing 10 -- Relation pour ce cas
Les frais FSP BĂ©nĂ©ficiaire sont absents : on souhaite envoyer un montant prĂ©cis, le BĂ©nĂ©ficiaire reçoit donc moins, plutĂŽt que dâajouter les frais « par-dessus ».
# Exemple dâexcĂ©dent de commission FSP
Figure 17 : excédent de commission FSP avec divulgation du montant à envoyer : le Payeur souhaite envoyer 100 USD, le FSP Payeur veut 1 USD de frais, le FSP Bénéficiaire donne 3 USD de commission. Sur les 3 USD, 1 USD couvre les frais Payeur, 2 USD reviennent au FSP Payeur.
# Figure 17
Figure 17 -- Exemple dâexcĂ©dent de commission
# Figure 18
Figure 18 : vue simplifiée du mouvement de fonds.
Figure 18 -- Vue simplifiée pour ce cas
# Types de frais
Comme vu en Figure 7 et Figure 12, il existe deux types de frais et commissions dans lâobjet Quote entre FSPÂ :
- Frais FSP Bénéficiaire : frais de transaction que le FSP Bénéficiaire souhaite obtenir pour la gestion de la transaction.
- Commission FSP BĂ©nĂ©ficiaire : commission que le FSP BĂ©nĂ©ficiaire veut verser au FSP Payeur (non-divulgation) ou subventionner la transaction en payant Ă la place du FSP Payeur (divulgation). Si excĂ©dent, il est traitĂ© comme frais payĂ© du BĂ©nĂ©ficiaire vers le Payeur, voir lâexemple dâexcĂšs de commission.
# Ăquations de devis
Section contenant des formules utiles pour les devis qui nâont pas encore Ă©tĂ© mentionnĂ©es.
# Relation entre montant reçu par le Bénéficiaire et montant de transfert
Le montant que doit recevoir le BĂ©nĂ©ficiaire, hors frais internes, bonus ou commission FSP BĂ©nĂ©ficiaire, peut ĂȘtre calculĂ© par le FSP Payeur via Listing 11. Montant de transfert = transferAmount, frais FSP BĂ©nĂ©ficiaire = payeeFspFee, commission = payeeFspCommission.
# Listing 11
Montant reçu Bénéficiaire = Montant de transfert - Frais FSP Bénéficiaire + Commission FSP Bénéficiaire
Listing 11 -- Relation entre montant de transfert et montant reçu
Le montant reçu peut optionnellement ĂȘtre transmis lors du retour du devis sous payeeReceiveAmount.
# Informations fiscales
Aucune information de taxe nâest transmise via lâAPI (toute la fiscalitĂ© est considĂ©rĂ©e comme interne). Les sections suivantes dĂ©taillent les cas les plus courants.
# Taxe sur la commission des agents
Taxe sur la commission dâun agent (en tant que revenu). Câest lâagent ou son FSP qui gĂšre la relation avec lâadministration fiscale, selon le cas. Toutes les commissions agent Ă©tant internes, rien nâest transmis dans lâAPI.
# Taxe sur les frais internes FSP
Un FSP peut ĂȘtre taxĂ© sur certains frais internes reçus : ex : frais Payeur vers son FSP, ou frais BĂ©nĂ©ficiaire vers son FSP. Cette taxe doit ĂȘtre gĂ©rĂ©e et collectĂ©e en interne par le FSP concernĂ©.
# Taxe sur le montant (TVA, taxe de vente, ... )
La TVA ou les taxes de vente sont des taxes sur un montant, typiquement supportĂ©es par le consommateur lors dâun achat marchand. Le marchand collecte la taxe et reverse Ă lâadministration. Si la TVA sâapplique, elle doit ĂȘtre incluse dans la somme demandĂ©e au client, et le montant reçu par le FSP BĂ©nĂ©ficiaire est taxĂ© en consĂ©quence.
# Taxe sur frais FSP
Dans lâAPI, un FSP BĂ©nĂ©ficiaire peut ajouter un frais Ă payer par le Payeur ou son FSP. Il doit gĂ©rer la fiscalitĂ© conformĂ©ment Ă la pratique locale, en interne et sans transmettre de dĂ©tail via lâAPI.
# Taxe sur la commission FSP
Un FSP Bénéficiaire peut ajouter une commission, soit pour subventionner la transaction (divulgation), soit pour inciter le FSP Payeur (non-divulgation).
# Non-divulgation des frais
Dans ce cas, toute commission FSP BĂ©nĂ©ficiaire doit ĂȘtre considĂ©rĂ©e comme un frais reçu par le FSP Payeur. La taxe correspondante est gĂ©rĂ©e en interne comme tout frais reçu.
# Divulgation des frais
Si le montant de commission est infĂ©rieur ou Ă©gal aux frais Ă la charge du Payeur, la commission sert Ă couvrir ces frais. Si elle les dĂ©passe, lâexcĂ©dent est traitĂ© comme dans la non-divulgation.
# Exemples pour chaque cas dâusage
Cette section présente un ou plusieurs exemples pour chaque cas.
# Virement P2P
Un virement P2P est typiquement un montant à recevoir, sans aucune divulgation de frais cÎté Bénéficiaire (Figure 19). Ex : le Payeur veut que le Bénéficiaire reçoive 100 USD. Le FSP Bénéficiaire offre une commission au FSP Payeur. Le FSP Payeur prend 1 USD de frais à son client : il gagne donc 2 USD (1 USD venant du client, 1 USD en commission). 99 USD sont transférés aprÚs déduction de la commission.
# Figure 19
Figure 19 -- Exemple virement P2P avec montant Ă recevoir
# Vue simplifiée du mouvement de fonds
# Figure 20
Voir Figure 20 pour une vue trÚs simplifiée du mouvement.
Figure 20 -- Vue simplifiée virement P2P
# DĂ©pĂŽt dâespĂšces initiĂ© par lâagent (Montant Ă envoyer)
Figure 21 : dĂ©pĂŽt avec divulgation des frais. Le BĂ©nĂ©ficiaire veut savoir les frais avant dâaccepter lâopĂ©ration. Exemple : le client souhaite dĂ©poser 100 USD chez un agent du FSP Payeur. Celui-ci prend 2 USD de frais, le FSP BĂ©nĂ©ficiaire subventionne la transaction avec 2 USD de commission pour couvrir ces frais. 98 USD sont transfĂ©rĂ©s aprĂšs dĂ©duction de la commission.
# Figure 21
Figure 21 -- Exemple dépÎt agent, montant à envoyer
# Vue simplifiée
Voir Figure 22.
# Figure 22
Figure 22 -- Vue simplifiée dépÎt agent
# DĂ©pĂŽt dâespĂšces initiĂ© par lâagent (Montant Ă recevoir)
Figure 23 : dépÎt avec divulgation des frais, client souhaite recevoir exactement 100 USD. Le FSP Payeur souhaite 2 USD de frais pour la commission agent ; le FSP Bénéficiaire subventionne 1 USD en commission (50 % des frais). 99 USD transférés aprÚs déduction de la commission.
# Figure 23
Figure 23 -- Exemple dépÎt agent, montant à recevoir
# Vue simplifiée
# Figure 24
Voir Figure 24.
Figure 24 -- Vue simplifiée dépÎt agent montant à recevoir
# Paiement marchand initié par le client
Typiquement un montant Ă recevoir sans divulgation des frais. Ex : achat de biens/ services pour 100 USD auprĂšs dâun marchand dans le FSP BĂ©nĂ©ficiaire. Le FSP BĂ©nĂ©ficiaire ne facture pas le client mais prend un frais cachĂ© dâ1 USD au marchand. Le FSP Payeur prĂ©lĂšve 1 USD au client. 100 USD sont transfĂ©rĂ©s.
# Figure 25
Figure 25 -- Exemple paiement marchand client
# Vue simplifiée
Voir Figure 26.
# Figure 26
Figure 26 -- Vue simplifiée paiement marchand client
# Retrait dâespĂšces initiĂ© par le client (Montant Ă recevoir)
Typiquement, montant à recevoir sans divulgation des frais. Ex : le client veut retirer 100 USD en espÚces. Le FSP Bénéficiaire prend 2 USD de frais (commission agent), le FSP Payeur prend 1 USD. 102 USD transférés.
# Figure 27
Figure 27 -- Exemple retrait client (montant Ă recevoir)
# Vue simplifiée
Voir Figure 28.
# Figure 28
Figure 28 -- Vue simplifiée retrait client (montant à recevoir)
# Retrait dâespĂšces initiĂ© par le client (Montant Ă envoyer)
Normalement, typiquement montant à recevoir, mais ici exemple avec montant à envoyer : voir Figure 29. Le client veut retirer 100 USD de son compte. Le FSP Bénéficiaire prend 2 USD (commission agent), le FSP Payeur prend 1 USD. 99 USD transférés.
# Figure 29
Figure 29 -- Exemple retrait client (montant Ă envoyer)
# Vue simplifiée
Voir Figure 30.
# Figure 30
Figure 30 -- Vue simplifiée retrait client (montant à envoyer)
# Retrait initié par agent
Montant à recevoir, pas de divulgation des frais cÎté FSP Payeur. Ex : le client veut recevoir 100 USD en liquide. Frais : 2 USD cÎté FSP Bénéficiaire ; 1 USD cÎté FSP Payeur. 102 USD transférés.
# Figure 31
Figure 31 -- Exemple retrait agent
# Vue simplifiée
Voir Figure 32.
# Figure 32
Figure 32 -- Vue simplifiée retrait agent
# Paiement marchand initié par le marchand
Montant à recevoir, pas de divulgation des frais. Ex : achat de 100 USD, aucun frais Bénéficiaire, mais 1 USD de frais cÎté Payeur. 100 USD transférés.
# Figure 33
Figure 33 -- Exemple paiement marchand initié par marchand
# Vue simplifiée
Voir Figure 34.
# Figure 34
Figure 34 -- Vue simplifiée paiement marchand initié par marchand
# Retrait initié par ATM
Montant à recevoir, pas de divulgation. Ex : retrait de 100 USD en espÚces, 1 USD de frais cÎté FSP Bénéficiaire (frais ATM), 1 USD cÎté FSP Payeur. 101 USD transférés.
# Figure 35
Figure 35 -- Exemple retrait ATM
# Vue simplifiée
Voir Figure 36.
# Figure 36
Figure 36 -- Vue simplifiée retrait ATM
# Paiement marchand initié par le marchand autorisé sur un TPE
Montant Ă recevoir, pas de divulgation des frais. Ex : achat de 100 USD, le FSP BĂ©nĂ©ficiaire accorde 1 USD de commission, le FSP Payeur lâutilise comme frais. 100 USD transfĂ©rĂ©s.
# Figure 37
Figure 37 -- Exemple paiement marchand sur TPE
# Vue simplifiée
Voir Figure 38.
# Figure 38
Figure 38 -- Vue simplifiée paiement marchand sur TPE
# Remboursement
Figure 39 prĂ©sente un exemple de remboursement du montant entier dâun dĂ©pĂŽt dâespĂšces (voir exemple plus haut).
# Figure 39
Figure 39 -- Exemple de remboursement
# 5.1.6.11.1 Vue simplifiée du mouvement de fonds
Voir Figure 40.
# Figure 40
Figure 40 -- Vue simplifiée du remboursement
# Adressage des Parties
Les deux parties dâune transaction financiĂšre (le Payeur et le BĂ©nĂ©ficiaire) sont identifiĂ©es dans lâAPI par un Type dâID de Partie (PartyIdType), un ID de Partie (PartyIdentifier), et, Ă©ventuellement, un Sous-ID ou Type de Partie (PartySubIdOrType). Certains sous-types sont prĂ©vus en standard pour des identifiants personnels (PersonalIdentifierType), par ex. pour le numĂ©ro de passeport ou le permis de conduire.
Exemples de base dâutilisation des Ă©lĂ©ments Party ID Type et Party ID :
Pour utiliser le numéro de téléphone mobile +123456789 comme contrepartie, mettre Party ID Type à MSISDN et Party ID à +123456789.
Exemple de service pour obtenir le FSPÂ :
**GET /participants/MSISDN/+123456789**
Pour utiliser l'adresse email john@doe.com, mettre Party ID Type Ă EMAIL et Party ID Ă john@doe.com.
Exemple :
**GET /participants/EMAIL/john\@doe.com**
Pour utiliser lâIBAN SE45 5000 0000 0583 9825 7466Â : Party ID Type = IBAN, Party ID = SE4550000000058398257466 (sans espaces).
Exemple :
**GET /participants/IBAN/SE4550000000058398257466**
Exemples avancés :
Pour une personne dont le numéro de passeport est 12345678 : Party ID Type = PERSONAL_ID, Party ID = 12345678, Party Sub ID or Type = PASSPORT.
Exemple :
**GET /participants/PERSONAL_ID/123456789/PASSPORT**
Pour employeeId1 travaillant chez Shoe-company : Party ID Type = BUSINESS, Party ID = Shoe-company, Party Sub ID or Type = employeeId1
Exemple :
**GET /participants/BUSINESS/Shoe-company/employeeId1**
5.2.1 CaractĂšres interdits dans Party ID et Party Sub ID or Type
Le Party ID et Party Sub ID or Type font partie de lâURI (voir Syntaxe URI), donc certaines restrictions existent :
- Barre oblique (/) interdite (utilisée dans le Path pour la séparation).
- Point dâinterrogation (?) interdit (identifie la Query dans lâURI).
# Correspondance des cas dâusage et des types de transaction
Cette section dĂ©crit comment mapper les cas dâusage non-bulk actuellement supportĂ©s dans lâAPI vers le type complexe TransactionType), en utilisant les Ă©lĂ©ments TransactionScenario), et TransactionInitiator).
Plus de dĂ©tails dans Cas dâusage de lâAPI.
# Virement P2P
Pour effectuer un virement P2PÂ :
- TransactionScenario = TRANSFER
- TransactionInitiator = PAYER
- TransactionInitiatorType = CONSUMER
# DĂ©pĂŽt dâespĂšces initiĂ© par agent
- TransactionScenario = DEPOSIT
- TransactionInitiator = PAYER
- TransactionInitiatorType = AGENT
# Retrait dâespĂšces initiĂ© par agent
- TransactionScenario = WITHDRAWAL
- TransactionInitiator = PAYEE
- TransactionInitiatorType = AGENT
# Retrait dâespĂšces par agent sur TPE
- TransactionScenario = WITHDRAWAL
- TransactionInitiator = PAYEE
- TransactionInitiatorType = AGENT
# Retrait dâespĂšces initiĂ© par client
- TransactionScenario = WITHDRAWAL
- TransactionInitiator = PAYER
- TransactionInitiatorType = CONSUMER
# Paiement marchand initié par client
- TransactionScenario = PAYMENT
- TransactionInitiator = PAYER
- TransactionInitiatorType = CONSUMER
# Paiement marchand initié par marchand
- TransactionScenario = PAYMENT
- TransactionInitiator = PAYEE
- TransactionInitiatorType = BUSINESS
# Paiement marchand initié par marchand sur TPE
- TransactionScenario = PAYMENT
- TransactionInitiator = PAYEE
- TransactionInitiatorType = DEVICE
# Retrait initié par ATM
- TransactionScenario = WITHDRAWAL
- TransactionInitiator = PAYEE
- TransactionInitiatorType = DEVICE
# Remboursement
Pour effectuer un remboursement, configurez les éléments comme suit :
- TransactionScenario Ă REFUND
- TransactionInitiator Ă PAYER
- TransactionInitiatorType dĂ©pend de lâinitiateur du remboursement.
De plus, le type complexe Refund doit ĂȘtre renseignĂ© avec lâidentifiant de la transaction dâorigine Ă rembourser.
# Services de lâAPI
Cette section prĂ©sente et dĂ©taille tous les services que lâAPI prend en charge pour chaque ressource et mĂ©thode HTTP. Chaque ressource et service de lâAPI est Ă©galement mappĂ© Ă une ressource et un service logique dĂ©crits dans les ModĂšles gĂ©nĂ©riques de transaction.
# Services API de haut niveau
Ă un niveau Ă©levĂ©, lâAPI peut ĂȘtre utilisĂ©e pour rĂ©aliser les actions suivantes :
Recherche dâinformations sur un participant â DĂ©terminer dans quel FSP se situe la contrepartie dâune transaction financiĂšre.
- Utilisez les services fournis par la ressource API /participants.
Recherche dâinformations sur une partie â Obtenir des informations sur la contrepartie dâune transaction financiĂšre.
- Utilisez les services fournis par la ressource API /parties.
Demande de transaction â Demander Ă un payeur de transfĂ©rer des fonds Ă©lectroniques au bĂ©nĂ©ficiaire, Ă la demande du bĂ©nĂ©ficiaire. Le payeur peut approuver ou refuser la demande. Une approbation initiera effectivement la transaction financiĂšre.
- Utilisez les services fournis par la ressource API /transactionRequests.
Calculer une devis â Calculer tous les Ă©lĂ©ments dâune transaction qui influenceront le montant de la transaction, câest-Ă -dire les frais et la commission du FSP.
- Utilisez les services fournis par la ressource API /quotes pour le devis dâune transaction individuelle (un payeur vers un bĂ©nĂ©ficiaire).
- Utilisez les services fournis par la ressource API /bulkQuotes pour le devis dâune transaction groupĂ©e (un payeur vers plusieurs bĂ©nĂ©ficiaires).
RĂ©aliser une autorisation â Demander au payeur de saisir les identifiants requis lorsquâil a initiĂ© la transaction depuis un terminal de paiement, un DAB, ou un appareil similaire dans le systĂšme FSP du bĂ©nĂ©ficiaire.
- Utilisez les services fournis par la ressource API /authorizations.
Effectuer un transfert â RĂ©aliser effectivement la transaction financiĂšre en transfĂ©rant les fonds Ă©lectroniques du payeur au bĂ©nĂ©ficiaire, Ă©ventuellement via des registres intermĂ©diaires.
- Utilisez les services fournis par la ressource API /transfers pour une transaction unique (un payeur vers un bénéficiaire).
- Utilisez les services fournis par la ressource API /bulkTransfers pour une transaction groupée (un payeur vers plusieurs bénéficiaires).
RĂ©cupĂ©rer les informations de transaction â Obtenir les informations relatives Ă la transaction financiĂšre ; par exemple, un jeton créé en cas de transaction rĂ©ussie.
- Utilisez les services fournis par la ressource API /transactions.
# Services API pris en charge
Tableau 6 inclut des descriptions de haut niveau des services que lâAPI propose. Pour plus dâinformations dĂ©taillĂ©es, consultez les sections suivantes.
# Tableau 6
| URI | Méthode HTTP GET | Méthode HTTP PUT | Méthode HTTP POST | Méthode HTTP DELETE | Méthode HTTP PATCH |
|---|---|---|---|---|---|
| /participants | Non pris en charge | Non pris en charge | Demande Ă un ALS de crĂ©er les informations FSP concernant les parties fournies dans le corps ou, si l'information existe dĂ©jĂ , demande Ă lâALS de la mettre Ă jour | Non pris en charge | Non pris en charge |
| /participants/{ID} | Non pris en charge | Callback pour informer un FSP pair dâune liste de parties prĂ©cĂ©demment créée. | Non pris en charge | Non pris en charge | Non pris en charge |
| /participants/{Type}/{ID} Alternative : /participants/{Type}/{ID}/{SubId} | Obtenir les informations FSP concernant une partie depuis un FSP pair ou un ALS. | Callback pour informer un FSP pair des informations FSP demandées ou créées. | Demander à un ALS de créer une information FSP concernant une partie ou, si elle existe déjà , de la mettre à jour | Demander à un ALS de supprimer les informations FSP concernant une partie. | Non pris en charge |
| /parties/{Type}/{ID} Alternative : /parties/{Type}/{ID}/{SubId} | Obtenir des informations concernant une partie depuis un FSP pair. | Callback pour informer un FSP pair des informations demandées sur la partie. | Non pris en charge | Non pris en charge | Non pris en charge |
| /transactionRequests | Non pris en charge | Non pris en charge | Demander Ă un FSP pair de solliciter lâapprobation dâun payeur pour transfĂ©rer des fonds Ă un bĂ©nĂ©ficiaire. Le payeur peut approuver ou refuser la demande. | Non pris en charge | Non pris en charge |
| /transactionRequests/{ID} | Obtenir des informations concernant une demande de transaction dĂ©jĂ envoyĂ©e. | Callback pour informer un FSP pair dâune demande de transaction dĂ©jĂ envoyĂ©e. | Non pris en charge | Non pris en charge | Non pris en charge |
| /quotes | Non pris en charge | Non pris en charge | Demander à un FSP pair de créer une nouvelle devis pour réaliser une transaction. | Non pris en charge | Non pris en charge |
| /quotes/{ID} | Obtenir des informations concernant une devis dĂ©jĂ demandĂ©e. | Callback pour informer un FSP pair dâune devis demandĂ©e prĂ©cĂ©demment. | Non pris en charge | Non pris en charge | Non pris en charge |
| /authorizations/{ID} | Obtenir lâautorisation pour une transaction du payeur qui interagit avec le systĂšme FSP du bĂ©nĂ©ficiaire. | Callback pour informer le FSP payeur concernant les informations dâautorisation. | Non pris en charge | Non pris en charge | Non pris en charge |
| /transfers | Non pris en charge | Non pris en charge | Demander Ă un FSP pair dâeffectuer le transfert des fonds liĂ©s Ă une transaction. | Non pris en charge | Non pris en charge |
| /transfers/{ID} | Obtenir des informations concernant un transfert dĂ©jĂ effectuĂ©. | Callback pour informer un FSP pair dâun transfert dĂ©jĂ effectuĂ©. | Non pris en charge | Non pris en charge | Notification dâengagement au FSP bĂ©nĂ©ficiaire |
| /transactions/{ID} | Obtenir des informations concernant une transaction dĂ©jĂ rĂ©alisĂ©e. | Callback pour informer un FSP pair dâune transaction dĂ©jĂ rĂ©alisĂ©e. | Non pris en charge | Non pris en charge | Non pris en charge |
| /bulkQuotes | Non pris en charge | Non pris en charge | Demander à un FSP pair de créer une nouvelle devis pour effectuer une transaction groupée. | Non pris en charge | Non pris en charge |
| /bulkQuotes/{ID} | Obtenir des informations concernant une devis groupĂ© dĂ©jĂ demandĂ©e. | Callback pour informer un FSP pair dâune devis groupĂ© dĂ©jĂ demandĂ©e. | Non pris en charge | Non pris en charge | Non pris en charge |
| /bulkTransfers | Non pris en charge | Non pris en charge | Demander à un FSP pair de créer un transfert groupé. | Non pris en charge | Non pris en charge |
| /bulkTransfers/{ID} | Obtenir des informations concernant un transfert groupĂ© dĂ©jĂ envoyĂ©. | Callback pour informer un FSP pair dâun transfert groupĂ© dĂ©jĂ envoyĂ©. | Non pris en charge | Non pris en charge | Non pris en charge |
Tableau 6 â Services fournis par lâAPI
# Versions actuelles des ressources
Tableau 7 contient la version de chaque ressource décrite dans ce document.
# Tableau 7
| Ressource | Version actuelle | DerniĂšre modification |
|---|---|---|
| /participants | 1.1 | Le modÚle de données a été mis à jour pour ajouter un élément ExtensionList optionnel au type complexe PartyIdInfo selon la Change Request : https://github.com/mojaloop/mojaloop-specification/issues/30. à la suite de cela, le modÚle de données décrit dans le Tableau 93 a été mis à jour. |
| /parties | 1.1 | Le modÚle de données a été mis à jour pour ajouter un élément ExtensionList optionnel au type complexe PartyIdInfo selon la Change Request : https://github.com/mojaloop/mojaloop-specification/issues/30. à la suite de cela, le modÚle de données décrit dans le Tableau 93 a été mis à jour. |
| /transactionRequests | 1.1 | Le modÚle de données a été mis à jour pour ajouter un élément ExtensionList optionnel au type complexe PartyIdInfo selon la Change Request : https://github.com/mojaloop/mojaloop-specification/issues/30. à la suite de cela, le modÚle de données décrit dans le Tableau 93 a été mis à jour. |
| /quotes | 1.1 | Le modÚle de données a été mis à jour pour ajouter un élément ExtensionList optionnel au type complexe PartyIdInfo selon la Change Request : https://github.com/mojaloop/mojaloop-specification/issues/30. à la suite de cela, le modÚle de données décrit dans le Tableau 93 a été mis à jour. |
| /authorizations | 1.0 | Le modÚle de données a été mis à jour pour ajouter un élément ExtensionList optionnel au type complexe PartyIdInfo selon la Change Request : https://github.com/mojaloop/mojaloop-specification/issues/30. à la suite de cela, le modÚle de données décrit dans le Tableau 93 a été mis à jour. |
| /transfers | 1.1 | Ajout dâune possible notification de validation via PATCH /transfers/<ID>. Le processus dâutilisation des notifications de validation est dĂ©crit Ă la section 6.7.2.6. Le modĂšle de donnĂ©es a Ă©tĂ© mis Ă jour pour ajouter un Ă©lĂ©ment ExtensionList optionnel au type complexe PartyIdInfo selon la Change Request : https://github.com/mojaloop/mojaloop-specification/issues/30. Ă la suite de cela, le modĂšle de donnĂ©es dĂ©crit dans le Tableau 93 a Ă©tĂ© mis Ă jour. |
| /transactions | 1.0 | Le modÚle de données a été mis à jour pour ajouter un élément ExtensionList optionnel au type complexe PartyIdInfo selon la Change Request : https://github.com/mojaloop/mojaloop-specification/issues/30. à la suite de cela, le modÚle de données décrit dans le Tableau 93 a été mis à jour. |
| /bulkQuotes | 1.1 | Le modÚle de données a été mis à jour pour ajouter un élément ExtensionList optionnel au type complexe PartyIdInfo selon la Change Request : https://github.com/mojaloop/mojaloop-specification/issues/30. à la suite de cela, le modÚle de données décrit dans le Tableau 93 a été mis à jour. |
| /bulkTransfers | 1.1 | Le modÚle de données a été mis à jour pour ajouter un élément ExtensionList optionnel au type complexe PartyIdInfo selon la Change Request : https://github.com/mojaloop/mojaloop-specification/issues/30. à la suite de cela, le modÚle de données décrit dans le Tableau 93 a été mis à jour. |
Tableau 7 â Versions actuelles des ressources
# Ressource API /participants
Cette section définit la ressource API logique Participants, décrite dans les ModÚles génériques de transaction.
Les services fournis par la ressource /participants servent principalement Ă dĂ©terminer dans quel FSP se trouve la contrepartie dâune transaction financiĂšre. Selon le schĂ©ma, ces services doivent ĂȘtre pris en charge, au minimum, soit par les FSP individuels soit par un service commun.
Si un service commun (par exemple, un ALS) est pris en charge dans le schĂ©ma, les services de la ressource /participants peuvent aussi ĂȘtre utilisĂ©s par les FSP pour ajouter et supprimer des informations dans ce systĂšme.
# Historique des versions de la ressource
Tableau 8 fournit une description de chaque version différente de la ressource /participants.
# Tableau 8
| Version | Date | Description |
|---|---|---|
| 1.0 | 2018-03-13 | Version initiale |
| 1.1 | 2020-05-19 | Le modÚle de données a été mis à jour pour ajouter un élément ExtensionList optionnel au type complexe PartyIdInfo selon la Change Request : https://github.com/mojaloop/mojaloop-specification/issues/30. à la suite de cela, le modÚle de données décrit dans le Tableau 93 a été mis à jour. |
| Pour garantir la cohĂ©rence, le modĂšle de donnĂ©es pour les appels POST /participants/{Type}/{ID} et POST /participants/{Type}/{ID}/{SubId} du Tableau 10 a Ă©galement Ă©tĂ© mis Ă jour pour inclure lâĂ©lĂ©ment ExtensionList optionnel. |
Tableau 8 â Historique des versions pour la ressource /participants
# Détails des services
DiffĂ©rents modĂšles sont utilisĂ©s pour la recherche de compte, selon quâun ALS existe ou non. Les sections suivantes dĂ©crivent chaque modĂšle Ă tour de rĂŽle.
# SystĂšme sans service commun de recherche de comptes
Figure 41 montre comment effectuer une recherche de compte sâil nâexiste pas dâALS commun dans un schĂ©ma. Le processus consiste Ă demander aux autres FSP (en sĂ©quence) sâils « possĂšdent » la partie avec le couple identitĂ©/type dĂ©livrĂ© jusquâĂ trouver la partie.
Si ce modĂšle est utilisĂ©, tous les FSP doivent prendre en charge Ă la fois la partie cliente et serveur des diffĂ©rents services HTTP GET de la ressource /participants. Les services HTTP POST ou DELETE de la ressource /participants ne doivent pas ĂȘtre utilisĂ©s, car les FSP sont directement sollicitĂ©s pour rĂ©cupĂ©rer les informations (au lieu dâun ALS commun).
# Figure 41
Figure 41 â Comment utiliser les services fournis par /participants sâil nâexiste pas de systĂšme commun de recherche de comptes
# SystĂšme de recherche de comptes commun
Figure 42 montre comment une recherche de compte peut ĂȘtre effectuĂ©e sâil existe un ALS commun dans un schĂ©ma. Le processus consiste Ă demander au service commun de recherche de comptes quel FSP dĂ©tient la partie avec lâidentitĂ© fournie. Le service commun est reprĂ©sentĂ© comme « Account Lookup » dans les flux ; ce service peut ĂȘtre mis en Ćuvre par le Switch ou comme un service sĂ©parĂ©, selon le marchĂ©.
Les FSP nâont pas besoin de prendre en charge la partie serveur des diffĂ©rents services HTTP GET sous la ressource /participants ; cette partie doit ĂȘtre assurĂ©e par lâALS. Ă la place, les FSP (clients) doivent fournir des informations FSP concernant leurs comptes et titulaires de comptes (parties) Ă lâALS (serveur) en utilisant les mĂ©thodes HTTP POST (pour crĂ©er ou mettre Ă jour les informations FSP, voir POST /participants et POST /participants/{Type}/{ID}) et HTTP DELETE (pour supprimer les informations FSP existantes, voir DELETE /participants/{Type}/{ID}).
# Figure 42
Figure 42 â Comment utiliser les services fournis par /participants sâil existe un systĂšme commun de recherche de comptes
# RequĂȘtes
Cette section dĂ©crit les services quâun client peut demander sur la ressource /participants.
# GET /participants/{Type}/{ID}
URI alternative : GET /participants/{Type}/{ID}/{SubId}
Service logique API : Recherche dâinformations sur un participant
La requĂȘte HTTP GET /participants/{Type}/{ID} (ou GET /participants/{Type}/{ID}/{SubId}) sert Ă dĂ©terminer dans quel FSP se trouve la partie demandĂ©e, dĂ©finie par {Type}, {ID} et Ă©ventuellement {SubId} (par exemple, GET /participants/MSISDN/123456789, ou GET /participants/BUSINESS/shoecompany/employee1). Voir Remboursement pour plus dâinformations sur lâadressage dâune partie.
Cette requĂȘte HTTP doit prendre en charge une chaĂźne de requĂȘte (voir Syntaxe URI pour plus dâinformations sur la syntaxe URI) pour filtrer par devise. Pour utiliser le filtrage par devise, la requĂȘte HTTP GET /participants/{Type}/{ID}?currency=XYZ doit ĂȘtre utilisĂ©e, oĂč XYZ est la devise demandĂ©e.
Informations de callback et de modÚle de données pour GET /participants/{Type}/{ID} (alternative GET /participants/{Type}/{ID}/{SubId}):
- Callback â PUT /participants/{Type}/{ID}
- Callback dâerreur â PUT /participants/{Type}/{ID}/error
- ModĂšle de donnĂ©es â Corps vide
# POST /participants
URI alternative : N/A
Service logique API : CrĂ©ation dâinformations bulk sur un participant
La requĂȘte HTTP POST /participants est utilisĂ©e pour crĂ©er des informations sur le serveur concernant la liste dâidentitĂ©s fournie. Cette requĂȘte doit ĂȘtre utilisĂ©e pour la crĂ©ation groupĂ©e dâinformations FSP pour plusieurs parties. Le paramĂštre de devise optionnel doit indiquer que chaque partie fournie prend en charge la devise.
Callback et modÚle de données pour POST /participants :
- Callback â PUT /participants/{ID}
- Callback dâerreur â PUT /participants/{ID} /error
- ModĂšle de donnĂ©es â Voir Tableau 9
# Tableau 9
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| requestId | 1 | CorrelationId | Lâidentifiant de la requĂȘte, choisi par le client. UtilisĂ© pour identifier le callback du serveur. |
| partyList | 1..10000 | PartyIdInfo | Liste des éléments PartyIdInfo pour lesquels le client souhaite créer ou mettre à jour les informations FSP. |
| currency | 0..1 | Currency | Indique que la devise fournie est prise en charge par chaque PartyIdInfo de la liste. |
Tableau 9 â ModĂšle de donnĂ©es POST /participants
# POST /participants/{Type}/{ID}
URI alternative : POST /participants/{Type}/{ID}/{SubId}
Service logique API : CrĂ©ation dâinformations sur un participant
La requĂȘte HTTP POST /participants/{Type}/{ID} (ou POST /participants/{Type}/{ID}/{SubId}) est utilisĂ©e pour crĂ©er sur le serveur les informations concernant lâidentitĂ© fournie, dĂ©finie par {Type}, {ID} et Ă©ventuellement {SubId} (par exemple, POST /participants/MSISDN/123456789 ou POST /participants/BUSINESS/shoecompany/employee1). Voir Remboursement pour plus dâinformations sur lâadressage dâune partie.
Callback et modÚle de données pour POST /participants/{Type}/{ID} (alternative POST /participants/{Type}/{ID}/{SubId}):
- Callback â PUT /participants/{Type}/{ID}
- Callback dâerreur â PUT /participants/{Type}/{ID}/error
- ModĂšle de donnĂ©es â Voir Tableau 10
# Tableau 10
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| fspId | 1 | FspId | Identifiant FSP auquel appartient la partie. |
| currency | 0..1 | Currency | Indique que la devise fournie est prise en charge par la partie. |
| extensionList | 0..1 | ExtensionList | Extension optionnelle, spécifique au déploiement. |
Tableau 10 â ModĂšle de donnĂ©es POST /participants/{Type}/{ID} (ou POST /participants/{Type}/{ID}/{SubId})
# DELETE /participants/{Type}/{ID}
URI alternative : DELETE /participants/{Type}/{ID}/{SubId}
Service logique API : Suppression dâinformations sur un participant
La requĂȘte HTTP DELETE /participants/{Type}/{ID} (ou DELETE /participants/{Type}/{ID}/{SubId}) est utilisĂ©e pour supprimer les informations sur le serveur concernant lâidentitĂ© fournie, dĂ©finie par {Type} et {ID} (par exemple, DELETE /participants/MSISDN/123456789) et Ă©ventuellement {SubId}. Voir Remboursement pour plus dâinformations sur lâadressage dâune partie.
Cette requĂȘte HTTP doit prendre en charge une chaĂźne de requĂȘte (voir Syntaxe URI) pour supprimer les informations FSP concernant uniquement une devise spĂ©cifique. Pour supprimer uniquement une devise spĂ©cifique, la requĂȘte HTTP DELETE /participants/{Type}/{ID}?currency=XYZ doit ĂȘtre utilisĂ©e, oĂč XYZ est la devise demandĂ©e.
Note : LâALS doit vĂ©rifier que câest bien le FSP actuel de la partie qui supprime lâinformation FSP.
Callback et modÚle de données pour DELETE /participants/{Type}/{ID} (alternative GET /participants/{Type}/{ID}/{SubId}):
- Callback â PUT /participants/{Type}/{ID}
- Callback dâerreur â PUT /participants/{Type}/{ID}/error
- ModĂšle de donnĂ©es â Corps vide
# Callbacks
Cette section décrit les callbacks utilisés par le serveur pour les services fournis par la ressource /participants.
# PUT /participants/{Type}/{ID}
URI alternative : PUT /participants/{Type}/{ID}/{SubId}
Service logique API : Retour dâinformation sur un participant
Le callback PUT /participants/{Type}/{ID} (ou PUT /participants/{Type}/{ID}/{SubId}) est utilisĂ© pour informer le client dâun succĂšs Ă la suite dâune recherche, crĂ©ation ou suppression des informations FSP liĂ©es Ă la partie. Si lâinformation FSP a Ă©tĂ© supprimĂ©e, lâĂ©lĂ©ment fspId doit ĂȘtre vide ; sinon il doit contenir lâinformation FSP de la partie.
Voir Tableau 11 pour le modÚle de données.
# Tableau 11
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| fspId | 0..1 | FspId | Identifiant FSP auquel appartient la partie. |
Tableau 11 â ModĂšle de donnĂ©es PUT /participants/{Type}/{ID} (ou PUT /participants/{Type}/{ID}/{SubId})
# PUT /participants/{ID}
URI alternative : N/A
Service logique API : Retour dâinformations groupĂ©es sur les participants
Le callback PUT /participants/{ID} est utilisĂ© pour informer le client du rĂ©sultat de la crĂ©ation de la liste dâidentitĂ©s fournie.
Voir Tableau 12 pour le modÚle de données.
# Tableau 12
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| partyList | 1..10000 | PartyResults | Liste des éléments PartyResult qui ont été créés ou dont la création a échoué. |
| currency | 0..1 | Currency | Indique que la devise fournie a été définie comme prise en charge par chaque PartyIdInfo ajouté avec succÚs. |
Tableau 12 â ModĂšle de donnĂ©es PUT /participants/{ID}
####Callbacks dâerreur
Cette section dĂ©crit les callbacks dâerreur utilisĂ©s par le serveur pour la ressource /participants.
# PUT /participants/{Type}/{ID}/error
URI alternative : PUT /participants/{Type}/{ID}/{SubId}/error
Service logique API : Erreur de retour dâinformation sur un participant
Si le serveur ne parvient pas Ă trouver, crĂ©er ou supprimer lâassociation FSP pour lâidentitĂ© fournie, ou si une autre erreur de traitement est survenue, le callback dâerreur PUT /participants/{Type}/{ID}/error (ou PUT /participants/{Type}/{ID}/{SubId}/error) est utilisĂ©. Voir Tableau 13 pour le modĂšle de donnĂ©es.
# Tableau 13
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| errorInformation | 1 | ErrorInformation | Code dâerreur, description de la catĂ©gorie. |
Tableau 13 â ModĂšle de donnĂ©es PUT /participants/{Type}/{ID}/error (ou PUT /participants/{Type}/{ID}/{SubId}/error)
# PUT /participants/{ID}/error
URI alternative : N/A
Service logique API : Erreur de retour dâinformations sur des participants groupĂ©s
En cas dâerreur lors de la crĂ©ation des informations FSP sur le serveur, le callback dâerreur PUT /participants/{ID}/error est utilisĂ©. Lâ{ID} de lâURI doit contenir le requestId (voir Tableau 9) qui a servi Ă la crĂ©ation de lâinformation du participant. Voir Tableau 14 pour le modĂšle de donnĂ©es.
# Tableau 14
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| errorInformation | 1 | ErrorInformation | Code dâerreur, description de la catĂ©gorie. |
Tableau 14 â ModĂšle de donnĂ©es PUT /participants/{ID}/error
# Ătats
Aucun Ă©tat nâest dĂ©fini pour la ressource /participants ; soit le serveur dĂ©tient des informations FSP pour lâidentitĂ© demandĂ©e, soit il nâen dĂ©tient pas.
# Ressource API /parties
Cette section définit la ressource API logique Parties, décrite dans les ModÚles génériques de transaction.
Les services fournis par la ressource /parties servent à obtenir des informations concernant une partie détenue par un FSP pair.
# Historique des versions de la ressource
Tableau 15 présente une description de chaque version de la ressource /parties.
# Tableau 15
| Version | Date | Description |
|---|---|---|
| 1.0 | 2018-03-13 | Version initiale |
| 1.1 | 2020-05-19 | Le modÚle de données a été mis à jour pour ajouter un élément ExtensionList optionnel au type complexe PartyIdInfo selon la Change Request : https://github.com/mojaloop/mojaloop-specification/issues/30. à la suite de cela, le modÚle de données décrit dans le Tableau 93 a été mis à jour. |
Tableau 15 â Historique des versions de la ressource /parties
# Détails des services
Figure 43 contient un exemple de processus pour la ressource /parties. Dâautres dĂ©ploiements sont possibles, par exemple un oĂč le Switch et lâALS sont sur le mĂȘme serveur, ou un oĂč le FSP de lâutilisateur interroge directement le FSP 1 pour obtenir les informations sur la partie.
# Figure 43
Figure 43 â Exemple de processus pour la ressource /parties
# RequĂȘtes
Cette section dĂ©crit les services qui peuvent ĂȘtre demandĂ©s par un client sur la ressource /parties de lâAPI.
# GET /parties/{Type}/{ID}
URI alternative : GET /parties/{Type}/{ID}/{SubId}
Service logique API : Recherche dâinformations sur une partie
La requĂȘte HTTP GET /parties/{Type}/{ID} (ou GET /parties/{Type}/{ID}/{SubId}) est utilisĂ©e pour rechercher des informations sur la partie demandĂ©e, dĂ©finie par {Type}, {ID} et Ă©ventuellement {SubId} (par exemple, GET /parties/MSISDN/123456789 ou GET /parties/BUSINESS/shoecompany/employee1). Voir Remboursement pour plus dâinformations sur lâadressage dâune partie.
Callback et modÚle de données pour GET /parties/{Type}/{ID} (alternative GET /parties/{Type}/{ID}/{SubId}):
- Callback â PUT /parties/{Type}/{ID}
- Callback dâerreur â PUT /parties/{Type}/{ID}/error
- ModĂšle de donnĂ©es â Corps vide
# Callbacks
Cette section décrit les callbacks utilisés par le serveur pour les services fournis par la ressource /parties.
# PUT /parties/{Type}/{ID}
URI alternative : PUT /parties/{Type}/{ID}/{SubId}
Service logique API : Retour dâinformations sur une partie
Le callback PUT /parties/{Type}/{ID} (ou PUT /parties/{Type}/{ID}/{SubId}) est utilisĂ© pour informer le client dâun succĂšs Ă la suite de la recherche dâune partie. Voir Tableau 16 pour le modĂšle de donnĂ©es.
# Tableau 16
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| party | 1 | Party | Informations sur la partie demandée. |
Tableau 16 â ModĂšle de donnĂ©es PUT /parties/{Type}/{ID} (ou PUT /parties/{Type}/{ID}/{SubId})
# Callbacks dâerreur
Cette section dĂ©crit les callbacks dâerreur utilisĂ©s par le serveur pour la ressource /parties.
# PUT /parties/{Type}/{ID}/error
URI alternative : PUT /parties/{Type}/{ID}/{SubId}/error
Service logique API : Erreur de retour dâinformations sur une partie
Si le serveur ne peut pas trouver les informations de la partie pour lâidentitĂ© fournie, ou si une autre erreur de traitement est survenue, le callback dâerreur PUT /parties/{Type}/{ID}/error (ou PUT /parties/{Type}/{ID}/{SubId}/error) est utilisĂ©. Voir Tableau 17 pour le modĂšle de donnĂ©es.
# Tableau 17
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| errorInformation | 1 | ErrorInformation | Code dâerreur, description de la catĂ©gorie. |
Tableau 17 â ModĂšle de donnĂ©es PUT /parties/{Type}/{ID}/error (ou PUT /parties/{Type}/{ID}/{SubId}/error)
# Ătats
Aucun Ă©tat nâest dĂ©fini pour la ressource /parties ; soit un FSP dispose dâinformations sur lâidentitĂ© demandĂ©e, soit il nâen a pas.
# Ressource API /transactionRequests
Cette section définit la ressource API logique Transaction Requests (« demandes de transaction »), décrite dans les ModÚles génériques de transaction.
Le service principal quâoffre la ressource /transactionRequests permet Ă un bĂ©nĂ©ficiaire de demander Ă un payeur de lui transfĂ©rer des fonds Ă©lectroniques. Le payeur peut approuver ou refuser la demande Ă©mise par le bĂ©nĂ©ficiaire. La dĂ©cision du payeur peut ĂȘtre prise de maniĂšre programmatique si :
- Le bĂ©nĂ©ficiaire est de confiance (câest-Ă -dire que le payeur lâa prĂ©-approuvĂ© dans son FSP), ou
- Une valeur dâautorisation â câest-Ă -dire un mot de passe Ă usage unique (OTP) â a Ă©tĂ© vĂ©rifiĂ©e correctement Ă lâaide de la ressource API /authorizations (voir Section 6.6).
Alternativement, le payeur peut prendre la décision manuellement.
# Historique des versions de la ressource
Tableau 18 présente une description de chaque version de la ressource /transactionRequests.
# Tableau 18
| Version | Date | Description |
|---|---|---|
| 1.0 | 2018-03-13 | Version initiale |
| 1.1 | 2020-05-19 | Le modÚle de données a été mis à jour pour ajouter un élément ExtensionList optionnel au type complexe PartyIdInfo selon la Change Request : https://github.com/mojaloop/mojaloop-specification/issues/30. à la suite de cela, le modÚle de données décrit dans le Tableau 93 a été mis à jour. |
Tableau 18 â Historique des versions de la ressource /transactionRequests
# Détails des services
Figure 44 montre comment fonctionne le processus de demande de transaction Ă lâaide de la ressource /transactionRequests. Lâapprobation ou le refus nâest pas montrĂ© dans la figure. Un refus est un callback PUT /transactionRequests/{ID} avec un Ă©tat REJECTED, similaire au callback de la figure avec lâĂ©tat RECEIVED, tel que dĂ©crit dans la Section 6.4.2.1. Une approbation du payeur nâest pas envoyĂ©e en tant que callback ; Ă la place, une devis et un transfert sont envoyĂ©s contenant une rĂ©fĂ©rence Ă la demande de transaction.
# Figure 44
Figure 44 â Comment utiliser le service /transactionRequests
# Demande de transaction rejetée par le payeur
Figure 45 montre le processus par lequel une demande de transaction est rejetée. Les raisons possibles du refus incluent :
- Le payeur a rejeté la demande manuellement.
- Un dĂ©passement de limite automatique sâest produit.
- Le payeur a saisi un OTP de façon erronée plus que le nombre de fois autorisé.
# Figure 45
Figure 45 â Exemple de processus dans lequel une demande de transaction est rejetĂ©e
# RequĂȘtes
Cette section dĂ©crit les services quâun client peut demander pour la ressource /transactionRequests.
# GET /transactionRequests/{ID}
URI alternative : N/A
Service logique API : Récupérer les informations de demande de transaction
La requĂȘte HTTP GET /transactionRequests/{ID} est utilisĂ©e pour obtenir des informations sur une demande de transaction prĂ©alablement créée ou sollicitĂ©e. Lâ{ID} dans lâURI doit contenir le transactionRequestId (voir Tableau 15) qui a Ă©tĂ© utilisĂ© lors de la crĂ©ation de la demande de transaction.
Callback et modÚle de données pour GET /transactionRequests/{ID} :
- Callback â PUT /transactionRequests/{ID}
- Callback dâerreur â PUT /transactionRequests/{ID}/error
- ModĂšle de donnĂ©es â Corps vide
# POST /transactionRequests
URI alternative : N/A
Service logique API : Effectuer une demande de transaction
La requĂȘte HTTP POST /transactionRequests est utilisĂ©e pour demander la crĂ©ation dâune demande de transaction financiĂšre sur le serveur.
Callback et modÚle de données pour POST /transactionRequests :
- Callback â PUT /transactionRequests/{ID}
- Callback dâerreur â PUT /transactionRequests/{ID}/error
- ModĂšle de donnĂ©es â Voir Tableau 19
# Tableau 19
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| transactionRequestId | 1 | CorrelationId | Identifiant partagĂ© entre les FSP pour lâobjet de la demande de transaction, dĂ©fini par le FSP bĂ©nĂ©ficiaire. LâID doit ĂȘtre rĂ©utilisĂ© pour les renvois de la mĂȘme demande de transaction. Un nouvel ID doit ĂȘtre gĂ©nĂ©rĂ© pour chaque nouvelle demande. |
| payee | 1 | Party | Informations sur le bénéficiaire de la transaction financiÚre proposée. |
| payer | 1 | PartyInfo | Informations sur le type de payeur, id, sous-type/id, FSP Id dans la transaction financiÚre proposée. |
| amount | 1 | Money | Montant demandé à transférer du payeur au bénéficiaire. |
| transactionType | 1 | TransactionType | Type de transaction. |
| note | 0..1 | Note | Motif de la demande de transaction, destiné au payeur. |
| geoCode | 0..1 | GeoCode | Longitude et latitude de la partie initiatrice. Peut ĂȘtre utilisĂ© pour dĂ©tecter une fraude. |
| authenticationType | 0..1 | AuthenticationType | OTP ou code QR, sinon vide. |
| expiration | 0..1 | DateTime | Peut ĂȘtre dĂ©fini pour obtenir un Ă©chec rapide si le FSP pair met trop longtemps Ă rĂ©pondre. Il peut aussi ĂȘtre utile pour le consommateur, lâagent ou le commerçant de savoir que leur demande a une durĂ©e limitĂ©e. |
| extensionList | 0..1 | ExtensionList | Extension optionnelle, spécifique au déploiement. |
Tableau 19 â ModĂšle de donnĂ©es POST /transactionRequests
# Callbacks
Cette section décrit les callbacks utilisés par le serveur pour la ressource /transactionRequests.
# PUT /transactionRequests/{ID}
URI alternative : N/A
Service logique API : Retour dâinformations de demande de transaction
Le callback PUT /transactionRequests/{ID} est utilisĂ© pour informer le client dâune demande de transaction créée ou sollicitĂ©e. Lâ{ID} dans lâURI doit contenir le transactionRequestId (voir Tableau 19) utilisĂ© lors de la crĂ©ation de la demande, ou lâ{ID} utilisĂ© dans le GET /transactionRequests/{ID}. Voir Tableau 20 pour le modĂšle de donnĂ©es.
# Tableau 20
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| transactionId | 0..1 | CorrelationId | Identifie la transaction liée (si une transaction a été créée). |
| transactionRequestState | 1 | TransactionRequestState | Ătat de la demande de transaction. |
| extensionList | 0..1 | ExtensionList | Extension optionnelle, spécifique au déploiement. |
Tableau 20 â ModĂšle de donnĂ©es PUT /transactionRequests/{ID}
# Callbacks dâerreur
Cette section dĂ©crit les callbacks dâerreur utilisĂ©s par le serveur pour la ressource /transactionRequests.
# PUT /transactionRequests/{ID}/error
URI alternative : N/A
Service logique API : Erreur de retour dâinformations sur une demande de transaction
Si le serveur ne parvient pas Ă trouver ou crĂ©er une demande de transaction, ou si une autre erreur de traitement survient, le callback dâerreur PUT /transactionRequests/{ID}/error est utilisĂ©. Lâ{ID} de lâURI doit contenir le transactionRequestId (voir Tableau 19) utilisĂ© lors de la crĂ©ation de la demande, ou lâ{ID} utilisĂ© dans le GET /transactionRequests/{ID}. Voir Tableau 21 pour le modĂšle de donnĂ©es.
# Tableau 21
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| errorInformation | 1 | ErrorInformation | Code dâerreur, description de la catĂ©gorie. |
Tableau 21 â ModĂšle de donnĂ©es PUT /transactionRequests/{ID}/error
# 6.4.6 Ătats
Les Ă©tats possibles dâune demande de transaction sont reprĂ©sentĂ©s dans la Figure 46.
Note : Un serveur nâa pas besoin de conserver les objets de demande de transaction qui ont Ă©tĂ© rejetĂ©s dans sa base de donnĂ©es. Cela signifie quâun client doit sâattendre Ă recevoir un callback dâerreur pour une demande de transaction rejetĂ©e.
# Figure 46
Figure 46 â Ătats possibles dâune demande de transaction
# Ressource API /quotes
Cette section définit la ressource API logique Quotes (« Devis »), décrite dans les ModÚles génériques de transaction.
Le principal service proposĂ© par la ressource /quotes est le calcul des frais Ă©ventuels et des commissions FSP liĂ©s Ă la rĂ©alisation dâune transaction financiĂšre interopĂ©rable. Les FSP payeur et bĂ©nĂ©ficiaire doivent chacun calculer leur part du devis pour obtenir une vue globale de tous les frais et commissions applicables Ă la transaction.
Une devis est irrĂ©vocable ; elle ne peut pas ĂȘtre modifiĂ©e aprĂšs sa crĂ©ation. Elle peut cependant expirer (toutes les devis sont valables uniquement jusquâĂ leur date dâexpiration).
Note : Une devis nâest pas une garantie que la transaction financiĂšre rĂ©ussira. La transaction peut toujours Ă©chouer ultĂ©rieurement. Une devis garantit uniquement que les frais et commissions appliquĂ©s Ă la transaction spĂ©cifiĂ©e restent valables jusquâĂ expiration du devis.
Pour plus dâinformations, voir la section Devis.
# Historique des versions de la ressource
Tableau 22 présente une description de chaque version de la ressource /quotes.
# Tableau 22
| Version | Date | Description |
|---|---|---|
| 1.0 | 2018-03-13 | Version initiale |
| 1.1 | 2020-05-19 | Le modÚle de données a été mis à jour pour ajouter un élément ExtensionList optionnel au type complexe PartyIdInfo selon la Change Request : https://github.com/mojaloop/mojaloop-specification/issues/30. à la suite de cela, le modÚle de données décrit dans le Tableau 93 a été mis à jour. |
Tableau 22 â Historique des versions de la ressource /quotes
# Détails des services
Figure 47 prĂ©sente un exemple de processus pour la ressource API /quotes. Cet exemple montre une transaction initiĂ©e par le payeur, mais elle peut aussi ĂȘtre initiĂ©e par le bĂ©nĂ©ficiaire, en utilisant la ressource API /transactionRequests. Dans ce cas, la recherche sera effectuĂ©e par le FSP du bĂ©nĂ©ficiaire.
# Figure 47
Figure 47 â Exemple de processus pour la ressource /quotes
# DĂ©tails de lâexpiration du devis
La demande de devis du FSP payeur peut contenir une date dâexpiration, si le FSP payeur souhaite indiquer Ă partir de quand il nâest plus utile pour le FSP bĂ©nĂ©ficiaire de renvoyer une devis. Par exemple, la transaction peut expirer ou sa devis peut expirer.
Le FSP bĂ©nĂ©ficiaire doit dĂ©finir une expiration dans le callback du devis pour indiquer Ă partir de quand elle nâest plus valable pour le FSP payeur.
# Rejet dâune devis
Le FSP bĂ©nĂ©ficiaire peut rejeter une demande de devis Ă©mise par le FSP payeur en envoyant le callback dâerreur PUT /quotes/{ID}/error plutĂŽt que le callback PUT /quotes/{ID}. Selon le modĂšle gĂ©nĂ©rique de transaction utilisĂ© (voir Section 8 pour plus dâinformations), le FSP payeur peut rejeter une devis en utilisant lâune des mĂ©thodes suivantes :
- Si la transaction est initiĂ©e par le payeur (voir Section 8.1), le FSP payeur ne doit pas informer le FSP bĂ©nĂ©ficiaire du rejet. La devis créée chez le FSP bĂ©nĂ©ficiaire doit avoir une date dâexpiration, aprĂšs laquelle elle est automatiquement supprimĂ©e.
- Si la transaction est initiée par le bénéficiaire (voir Section 8.2 et 8.3), le FSP payeur doit informer le FSP bénéficiaire du rejet par le callback PUT /transactionRequests/{ID} avec un état « rejected ». Le processus est décrit plus en détail à la Section 6.4.2.1.
# Demande de paiement Interledger
Dans le cadre de la prise en charge dâInterledger et de lâimplĂ©mentation concrĂšte de la demande de paiement Interledger (voir Protocole Interledger), le FSP bĂ©nĂ©ficiaire doit :
DĂ©terminer lâadresse ILP (voir Adresses ILP pour plus dâinformations) du bĂ©nĂ©ficiaire et le montant quâil recevra. Notez que puisque lâĂ©lĂ©ment amount dans le paquet ILP est dĂ©fini comme un UInt64 (donc valeur entiĂšre), le montant doit ĂȘtre multipliĂ© par lâexposant du devise (par exemple, lâexposant de lâUSD est 2, donc le montant doit ĂȘtre multipliĂ© par 102, et celui du JPY est 0, donc multipliĂ© par 100). Lâadresse ILP et le montant doivent ĂȘtre renseignĂ©s dans le paquet ILP (voir ILP Packet pour plus dâinformations).
Renseigner lâĂ©lĂ©ment data dans le paquet ILP par le modĂšle de donnĂ©es Transaction.
GĂ©nĂ©rer la fulfilment et la condition (voir Transferts conditionnels pour plus de dĂ©tails). Renseigner lâĂ©lĂ©ment condition dans le PUT /quotes/**{ID}). Le Tableau 19 montre le modĂšle de donnĂ©es avec la condition gĂ©nĂ©rĂ©e.
La fulfilment est un secret temporaire généré pour chaque transaction financiÚre par le FSP bénéficiaire et utilisé comme déclencheur pour valider les transferts constituant un paiement ILP.
Le FSP bĂ©nĂ©ficiaire utilise un secret local pour gĂ©nĂ©rer un HMAC SHA-256 du paquet ILP. Le mĂȘme secret peut ĂȘtre utilisĂ© pour toutes les transactions financiĂšres, ou le FSP bĂ©nĂ©ficiaire peut stocker un secret diffĂ©rent par bĂ©nĂ©ficiaire ou selon une autre segmentation.
Le choix et la cardinalitĂ© du secret local sont une dĂ©cision dâimplĂ©mentation, qui peut ĂȘtre dictĂ©e par les rĂšgles du systĂšme. Le seul prĂ©requis est que le FSP bĂ©nĂ©ficiaire puisse dĂ©terminer Ă quel secret correspond un paquet ILP reçu ultĂ©rieurement dans le cadre dâun transfert entrant (voir Ressource API Transfers).
La fulfilment et la condition sont gĂ©nĂ©rĂ©es conformĂ©ment Ă lâalgorithme dĂ©fini dans le Listing 12. Une fois que le FSP bĂ©nĂ©ficiaire a dĂ©rivĂ© la condition, la fulfilment peut ĂȘtre supprimĂ©e puisquâelle peut ĂȘtre rĂ©gĂ©nĂ©rĂ©e plus tard.
# Listing 12
Génération du fulfilment (accomplissement) et de la condition
Entrées :
- Secret local (chaĂźne binaire de 32 octets)
- Paquet ILP
Algorithme :
Le fulfilment est obtenu en exĂ©cutant lâalgorithme HMAC SHA-256 sur le paquet ILP en utilisant le secret local comme clĂ©.
La condition est obtenue en exĂ©cutant lâalgorithme de hachage SHA-256 sur le fulfilment.
Sorties :
- Fulfilment (chaĂźne binaire de 32 octets)
- Condition (chaĂźne binaire de 32 octets)
Listing 12 -- Algorithme pour générer le fulfilment et la condition
# RequĂȘtes
Cette section dĂ©crit les services pouvant ĂȘtre demandĂ©s par un client de lâAPI sur la ressource /quotes.
# GET /quotes/{ID}
URI alternative : N/A
Service logique de lâAPI : RĂ©cupĂ©rer les informations du devis
La requĂȘte HTTP GET /quotes/{ID} permet dâobtenir des informations sur une devis prĂ©alablement créée ou demandĂ©e. Le {ID} dans lâURI doit contenir le quoteId (voir Tableau 23) qui a Ă©tĂ© utilisĂ© pour la crĂ©ation du devis.
Informations sur les callbacks et le modÚle de données pour GET /quotes/{ID} :
- Callback -- PUT /quotes/{ID}
- Callback dâerreur -- PUT /quotes/{ID}/error
- ModÚle de données -- Corps vide
# POST /quotes
URI alternative : N/A
Service logique de lâAPI : Calculer les informations du devis
La requĂȘte HTTP POST /quotes est utilisĂ©e pour demander la crĂ©ation dâune devis pour la transaction financiĂšre fournie sur le serveur.
Informations sur les callbacks et le modÚle de données pour POST /quotes :
- Callback -- PUT /quotes/{ID}
- Callback dâerreur -- PUT /quotes/{ID}/error
- ModÚle de données -- Voir Tableau 23
# Tableau 23
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| quoteId | 1 | CorrelationId | Identifiant commun entre les FSPs pour lâobjet devis, dĂ©cidĂ© par le FSP du payeur. Cet ID doit ĂȘtre rĂ©utilisĂ© pour les renvois de la mĂȘme devis pour une transaction. Un nouvel ID doit ĂȘtre gĂ©nĂ©rĂ© pour chaque nouvelle devis pour une transaction. |
| transactionId | 1 | CorrelationId | Identifiant commun (dĂ©cidĂ© par le FSP du payeur) entre les FSPs pour lâobjet de la future transaction. La transaction rĂ©elle sera créée dans le cadre dâun processus de transfert rĂ©ussi. LâID doit ĂȘtre rĂ©utilisĂ© pour les renvois de la mĂȘme devis pour une transaction. Un nouvel ID doit ĂȘtre gĂ©nĂ©rĂ© pour chaque nouvelle devis pour une transaction. |
| transactionRequestId | 0..1 | CorrelationId | Identifie une demande de transaction optionnelle envoyée précédemment. |
| payee | 1 | Party | Informations concernant le bénéficiaire de la transaction financiÚre proposée. |
| payer | 1 | Party | Informations concernant le payeur de la transaction financiÚre proposée. |
| amountType | 1 | AmountType | SEND pour montant envoyé, RECEIVE pour montant reçu. |
| amount | 1 | Money | Selon amountType : Si SEND : Le montant que le payeur souhaite envoyer ; câest-Ă -dire le montant Ă prĂ©lever du compte payeur, frais inclus. Le montant est mis Ă jour par chaque entitĂ© participant Ă la transaction. Si RECEIVE : Le montant que le bĂ©nĂ©ficiaire doit recevoir ; câest-Ă -dire le montant qui doit ĂȘtre envoyĂ© au destinataire, frais exclus. Le montant nâest pas mis Ă jour par les entitĂ©s participantes. |
| fees | 0..1 | Money | Frais associés à la transaction. |
| transactionType | 1 | TransactionType | Type de transaction pour laquelle le devis est demandée. |
| geoCode | 0..1 | GeoCode | Longitude et latitude de la partie initiatrice. Peut ĂȘtre utilisĂ© pour dĂ©tecter la fraude. |
| note | 0..1 | Note | Mémo à joindre à la transaction. |
| expiration | 0..1 | DateTime | Lâexpiration est optionnelle. Elle peut ĂȘtre fixĂ©e afin dâobtenir un Ă©chec rapide si le FSP pair met trop de temps Ă rĂ©pondre. Elle peut Ă©galement ĂȘtre utile pour que le consommateur, lâagent ou le commerçant sache que leur demande a une limite de temps. |
| extensionList | 0..1 | ExtensionList | Extension optionnelle, spécifique au déploiement. |
Tableau 23 -- ModÚle de données POST /quotes
# Callbacks
Cette section décrit les callbacks utilisés par le serveur sous la ressource /quotes.
# PUT /quotes/{ID}
URI alternative : N/A
Service logique de lâAPI : Retourner les informations du devis
Le callback PUT /quotes/{ID} est utilisĂ© pour informer le client dâune devis demandĂ©e ou créée. Le {ID} dans lâURI doit contenir le quoteId (voir Tableau 23) qui a Ă©tĂ© utilisĂ© pour la crĂ©ation du devis, ou le {ID} utilisĂ© dans le GET /quotes/{ID}. Voir Tableau 24 pour le modĂšle de donnĂ©es.
# Tableau 24
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| transferAmount | 1 | Money | Le montant que le FSP payeur doit transférer au FSP bénéficiaire. |
| payeeReceiveAmount | 0..1 | Money | Le montant que le bénéficiaire doit recevoir dans la transaction de bout en bout. Optionnel si le FSP bénéficiaire ne souhaite pas divulguer de potentiels frais au bénéficiaire. |
| payeeFspFee | 0..1 | Money | Partie des frais de la transaction imputée au FSP bénéficiaire. |
| payeeFspCommission | 0..1 | Money | Commission du FSP bénéficiaire sur la transaction. |
| expiration | 1 | DateTime | Date et heure jusquâĂ laquelle le devis est valide et peut ĂȘtre honorĂ©e lorsquâelle est utilisĂ©e dans la transaction suivante. |
| geoCode | 0..1 | GeoCode | Longitude et latitude du bĂ©nĂ©ficiaire. Peut ĂȘtre utilisĂ© pour dĂ©tecter la fraude. |
| ilpPacket | 1 | IlpPacket | Le paquet ILP qui doit ĂȘtre joint au transfert par le payeur. |
| condition | 1 | IlpCondition | La condition qui doit ĂȘtre jointe au transfert par le payeur. |
| extensionList | 0..1 | ExtensionList | Extension optionnelle, spécifique au déploiement. |
Tableau 24 -- ModÚle de données PUT /quotes/{ID}
# Callbacks dâerreur
Cette section dĂ©crit les callbacks dâerreur utilisĂ©s par le serveur sous la ressource /quotes.
# PUT /quotes/{ID}/error
URI alternative : N/A
Service logique de lâAPI : Retourner une erreur dâinformation de devis
Si le serveur ne parvient pas Ă trouver ou crĂ©er une devis, ou quâune autre erreur de traitement se produit, le callback dâerreur PUT /quotes/{ID}/error est utilisĂ©. Le {ID} dans lâURI doit contenir le quoteId (voir Tableau 23) utilisĂ© pour la crĂ©ation du devis, ou le {ID} utilisĂ© dans le GET /quotes/{ID}. Voir Tableau 25 pour le modĂšle de donnĂ©es.
# Tableau 25
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| errorInformation | 1 | ErrorInformation | Code dâerreur, description de la catĂ©gorie. |
Tableau 25 -- ModÚle de données PUT /quotes/{ID}/error
# Ătats
# Figure 48
Figure 48 contient la machine Ă Ă©tats UML (Unified Modeling Language) pour les Ă©tats possibles dâun objet devis.
Remarque : Un serveur nâa pas besoin de conserver en base les objets devis ayant Ă©tĂ© rejetĂ©s ou expirĂ©s. Cela signifie quâun client doit sâattendre Ă ce quâun callback dâerreur puisse ĂȘtre retournĂ© pour une devis expirĂ©e ou rejetĂ©e.
Figure 48 -- Ătats possibles dâune devis
# Ressource dâAPI /authorizations
Cette section dĂ©finit la ressource logique dâAPI Authorizations, dĂ©crite dans ModĂšles de transaction gĂ©nĂ©riques.
La ressource /authorizations est utilisĂ©e pour demander au payeur de saisir les identifiants applicables dans le systĂšme du FSP bĂ©nĂ©ficiaire pour approuver la transaction financiĂšre, lorsquâil a initiĂ© la transaction depuis un POS, un DAB ou similaire, dans le systĂšme du FSP bĂ©nĂ©ficiaire et souhaite autoriser via un OTP.
# Historique des versions de la ressource
Tableau 26 décrit les différentes versions de la ressource /authorizations.
# Tableau 26
| Version | Date | Description |
|---|---|---|
| 1.0 | 2018-03-13 | Version initiale |
Tableau 26 â Historique des versions de la ressource /authorizations
# Détails des services
Figure 49 prĂ©sente un exemple de processus pour la ressource API /authorizations. Le FSP bĂ©nĂ©ficiaire envoie dâabord une demande de transaction) qui est autorisĂ©e via OTP. Le FSP payeur rĂ©alise ensuite le devis (voir Ressource API Quotes) avant quâune demande dâautorisation soit envoyĂ©e au systĂšme du FSP bĂ©nĂ©ficiaire pour que le payeur approuve via la saisie de lâOTP. Si lâOTP est correct, le processus de transfert doit ĂȘtre initiĂ© (voir Ressource API Transfers).
# Figure 49
Figure 49 -- Exemple de processus pour la ressource /authorizations
# Renvoi de la valeur dâautorisation
Si la notification contenant la valeur dâautorisation nâatteint pas le payeur, celui-ci peut demander le renvoi de la valeur dâautorisation si le POS, le DAB ou appareil similaire propose cette option. Voir Figure 50 pour un exemple oĂč le payeur demande un renvoi de lâOTP.
# Figure 50
Figure 50 -- Le payeur demande le renvoi de la valeur dâautorisation (OTP)
# Tentative de saisie de la valeur dâautorisation
Le FSP payeur doit dĂ©cider du nombre de tentatives autorisĂ©es pour la saisie de la valeur dâautorisation sur le POS, DAB ou appareil similaire. Ce nombre est fixĂ© dans la chaĂźne de requĂȘte retriesLeft (voir Syntaxe URI pour plus de dĂ©tails) dans le service GET /authorizations/{ID}. Si le FSP payeur envoie retriesLeft=1, cela signifie quâil sâagit de la derniĂšre tentative autorisĂ©e par le payeur. Voir Figure 51 pour un exemple oĂč le payeur saisit un OTP incorrect et oĂč la valeur retriesLeft est alors dĂ©crĂ©mentĂ©e.
# Figure 51
Figure 51 -- Le payeur saisit une valeur dâautorisation incorrecte (OTP)
# Ăchec de lâautorisation OTP
Si lâutilisateur Ă©choue Ă saisir le bon OTP dans le nombre de tentatives autorisĂ©es, le processus dĂ©crit dans Demande de transaction rejetĂ©e par le payeur est suivi.
# RequĂȘtes
Cette section dĂ©crit les services pouvant ĂȘtre demandĂ©s par un client de lâAPI sur la ressource /authorizations.
# GET /authorizations/{ID}
URI alternative : N/A
Service logique dâAPI : RĂ©aliser lâautorisation
La requĂȘte HTTP GET /authorizations/{ID} est utilisĂ©e pour demander au payeur de saisir les identifiants dans le systĂšme du FSP bĂ©nĂ©ficiaire. Le {ID} dans lâURI doit contenir le transactionRequestID (voir Tableau 15), obtenu via le service POST /transactionRequests) plus tĂŽt dans le processus.
Cette requĂȘte nĂ©cessite que la chaĂźne de requĂȘte (voir Syntaxe URI pour plus dâinfos) contienne les paires clĂ©-valeur suivantes :
- authenticationType={Type}, oĂč {Type} est une valeur valide de lâĂ©numĂ©ration AuthenticationType.
- retriesLeft={NrOfRetries}, oĂč {NrOfRetries} est le nombre de tentatives restantes avant le rejet de la transaction financiĂšre. {NrOfRetries} doit ĂȘtre exprimĂ© via le type de donnĂ©es Integer). retriesLeft=1 signifie quâil sâagit de la derniĂšre tentative.
- amount={Amount}, oĂč {Amount} est le montant de la transaction qui sera prĂ©levĂ© du compte du payeur. {Amount} doit ĂȘtre de type Amount.
- currency={Currency}, oĂč {Currency} est la devise de la transaction. La valeur {Currency} doit ĂȘtre conforme Ă lâĂ©numĂ©ration CurrencyCode).
Exemple dâURI contenant toutes les clĂ©s requises :
GET /authorization/3d492671-b7af-4f3f-88de-76169b1bdf88?authenticationType=OTP&retriesLeft=2&amount=102¤cy=USD
Informations sur les callbacks et le modÚle de données pour GET /authorization/{ID} :
- Callback - PUT /authorizations/{ID}
- Callback dâerreur - PUT /authorizations/{ID}/error
- ModÚle de données -- Corps vide
# 6.6.4 Callbacks
Cette section décrit les callbacks utilisés par le serveur sous la ressource /authorizations.
# 6.6.4.1 PUT /authorizations/{ID}
URI alternative : N/A
Service logique dâAPI : Retourner le rĂ©sultat de lâautorisation
Le callback PUT /authorizations/ {ID} est utilisĂ© pour informer le client du rĂ©sultat dâune autorisation prĂ©cĂ©demment demandĂ©e. Le {ID} dans lâURI doit contenir lâidentifiant utilisĂ© dans le GET /authorizations/{ID}. Voir Tableau 27 pour le modĂšle de donnĂ©es.
# Tableau 27
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| authenticationInfo | 0..1 | AuthenticationInfo | OTP ou code QR si renseigné, sinon vide. |
| responseType | 1 | AuthorizationResponse | Enum contenant le rĂ©sultat : si le client a saisi la valeur dâauthentification, a rejetĂ© la transaction ou a demandĂ© le renvoi de la valeur dâauthentification. |
Tableau 27 â ModĂšle de donnĂ©es PUT /authorizations/{ID}
# Callbacks dâerreur
Cette section dĂ©crit les callbacks dâerreur utilisĂ©s par le serveur sous la ressource /authorizations.
# PUT /authorizations/{ID}/error
URI alternative : N/A
Service logique dâAPI : Retourner une erreur dâautorisation
Si le serveur ne trouve pas la demande de transaction, ou une autre erreur de traitement survient, le callback dâerreur PUT /authorizations/{ID} /error est utilisĂ©. Le {ID} dans lâURI doit ĂȘtre celui utilisĂ© dans le GET /authorizations/{ID}. Voir Tableau 28 pour le modĂšle de donnĂ©es.
# Tableau 28
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| errorInformation | 1 | ErrorInformation | Code dâerreur, description de la catĂ©gorie |
Tableau 28 -- ModÚle de données PUT /authorizations/{ID}/error
# Ătats
Aucun Ă©tat nâest dĂ©fini pour la ressource /authorizations.
# Ressource dâAPI /transfers
Cette section dĂ©finit la ressource logique dâAPI Transfers, dĂ©crite dans ModĂšles de transaction gĂ©nĂ©riques.
Les services fournis par la ressource dâAPI /transfers servent Ă effectuer le(s) transfert(s) ILP hop-by-hop et Ă rĂ©aliser la transaction financiĂšre de bout en bout en envoyant les dĂ©tails de transaction du FSP payeur au FSP bĂ©nĂ©ficiaire. Les dĂ©tails de la transaction sont envoyĂ©s en tant que partie du modĂšle de donnĂ©es de transfert dans le paquet ILP.
Le protocole Interledger suppose que la mise en place dâune transaction financiĂšre se fait via un protocole de bout en bout, mais quâun transfert ILP est rĂ©alisĂ© via des protocoles hop-by-hop entre FSPs connectĂ©s au mĂȘme registre. Dans la version actuelle de lâAPI, la ressource /quotes Ă©tablit la transaction financiĂšre. Avant de rĂ©aliser un transfert, le devis doit ĂȘtre effectuĂ©e pour prĂ©parer la transaction. Voir Ressource API Quotes pour plus dâinformations.
Un transfert ILP sâeffectue entre deux dĂ©tenteurs de comptes sur chaque cĂŽtĂ© dâun registre commun. Il sâexprime gĂ©nĂ©ralement par une demande dâexĂ©cution dâun transfert sur le registre et une notification au bĂ©nĂ©ficiaire que le transfert est rĂ©servĂ© en sa faveur, incluant une condition devant ĂȘtre remplie pour commettre le transfert.
Quand le FSP bénéficiaire présente le fulfilment au registre commun, le transfert est commis sur le registre. Simultanément, le FSP payeur est notifié que le transfert a été commis ainsi que du fulfilment.
# Historique des versions de la ressource
Le Tableau 29 décrit les différentes versions de la ressource /transfers.
| Version | Date | Description |
|---|---|---|
| 1.0 | 2018-03-13 | Version initiale |
| 1.1 | 2020-05-19 | Ajout du support des notifications de commit via la mĂ©thode HTTP PATCH. La nouvelle requĂȘte PATCH /transfers/{ID} est dĂ©crite en Section 6.7.3.3. Le processus dâutilisation des notifications de commit est dĂ©crit en Section 6.7.2.6. Le modĂšle de donnĂ©es est mis Ă jour pour inclure un Ă©lĂ©ment ExtensionList optionnel au type complexe PartyIdInfo (voir Change Request : https://github.com/mojaloop/mojaloop-specification/issues/30 (opens new window)). Suite Ă cela, le modĂšle de donnĂ©es du Tableau 93 a Ă©tĂ© mis Ă jour. |
Tableau 29 â- Historique des versions pour la ressource /transfers
# Détails des services
Cette section fournit des détails concernant les transferts hop-by-hop et les transactions financiÚres de bout en bout.
# Processus
Figure 52 illustre le fonctionnement du processus transactionnel utilisant le service POST /transfers.
# Figure 52
Figure 52 -- Utilisation du service POST /transfers
# Irrévocabilité des transactions
LâAPI est conçue pour ne supporter que les transactions financiĂšres irrĂ©vocables ; câest-Ă -dire quâune transaction ne peut pas ĂȘtre modifiĂ©e, annulĂ©e ou inversĂ©e aprĂšs sa crĂ©ation. Cela vise Ă simplifier et rĂ©duire les coĂ»ts pour les FSPs utilisant lâAPI. Une grande partie du coĂ»t opĂ©rationnel des systĂšmes financiers est due Ă lâinversion des transactions.
DĂšs quâun FSP payeur envoie une transaction au FSP bĂ©nĂ©ficiaire (via POST /transfers incluant la transaction de bout en bout), la transaction est irrĂ©vocable cĂŽtĂ© FSP payeur. Elle peut toutefois encore ĂȘtre rejetĂ©e cĂŽtĂ© FSP bĂ©nĂ©ficiaire, mais le payeur ne peut plus modifier ou rejeter la transaction. Une exception Ă cela serait si le dĂ©lai dâexpiration du transfert est dĂ©passĂ© avant que le FSP bĂ©nĂ©ficiaire ne rĂ©ponde (voir Quote expirĂ©e et Client recevant un transfert expirĂ© pour plus dâinformations). DĂšs que la transaction a Ă©tĂ© acceptĂ©e par le FSP bĂ©nĂ©ficiaire, elle est irrĂ©vocable pour toutes les parties.
# Devis expirée
Si un serveur reçoit une transaction utilisant une devis expirée, il doit refuser le transfert ou la transaction.
# Timeout et expiration
Le FSP payeur doit toujours dĂ©finir un temps dâexpiration pour le transfert afin de permettre les cas dâutilisation nĂ©cessitant un traitement ou un Ă©chec rapide. Si le cas dâutilisation ne nĂ©cessite pas de rĂ©ponse rapide, un dĂ©lai dâexpiration plus long peut ĂȘtre fixĂ©. Si le FSP bĂ©nĂ©ficiaire ne rĂ©pond pas avant le temps dâexpiration, la transaction est annulĂ©e cĂŽtĂ© FSP payeur. Ce dernier doit cependant sâattendre Ă un callback du bĂ©nĂ©ficiaire.
Les dĂ©lais dâexpiration courts sont souvent requis dans le commerce de dĂ©tail, oĂč un client se trouve devant un commerçant ; les deux parties doivent savoir si la transaction a rĂ©ussi avant la remise dâun produit ou service.
Dans Figure 52, un dĂ©lai dâexpiration de 30 secondes Ă partir de lâheure courante a Ă©tĂ© dĂ©fini dans la requĂȘte du FSP payeur, et de 20 secondes dans la requĂȘte du Switch au FSP bĂ©nĂ©ficiaire. Cette stratĂ©gie de rĂ©duction du dĂ©lai Ă chaque maillon de la chaĂźne du FSP payeur au bĂ©nĂ©ficiaire doit toujours ĂȘtre utilisĂ©e pour permettre un dĂ©lai de communication supplĂ©mentaire.
Remarque : Il est possible quâun callback de succĂšs soit reçu par le FSP payeur aprĂšs lâexpiration, par exemple lors dâune congestion rĂ©seau. Le FSP payeur devrait laisser un dĂ©lai supplĂ©mentaire aprĂšs lâexpiration avant dâannuler la transaction dans le systĂšme. Si un callback de succĂšs arrive aprĂšs annulation, la transaction doit ĂȘtre marquĂ©e pour rapprochement et traitĂ©e Ă part.
# Client recevant un transfert expiré
Figure 53 illustre un scĂ©nario dâerreur liĂ© Ă lâexpiration et au timeout. Pour une raison quelconque, le callback du FSP bĂ©nĂ©ficiaire prend plus de temps Ă arriver que le dĂ©lai dâexpiration dans le Switch. Cela conduit le Switch Ă annuler le transfert rĂ©servĂ© et Ă envoyer un callback dâerreur au FSP payeur. Ainsi, FSP payeur et bĂ©nĂ©ficiaire ont deux visions diffĂ©rentes du rĂ©sultat de la transaction ; celle-ci doit ĂȘtre marquĂ©e pour rapprochement.
# Figure 53
Figure 53 -- Client recevant un transfert expiré
Pour limiter ce type dâerreur, les clients (FSP payeur et Switch optionnel dans la Figure 52) participant au transfert ILP doivent permettre un dĂ©lai supplĂ©mentaire post expiration permettant de recevoir le callback du serveur. Le(s) client(s) doivent aussi interroger le serveur aprĂšs expiration et avant la fin du dĂ©lai supplĂ©mentaire en cas de perte du callback. Un rapprochement pourrait nĂ©anmoins rester nĂ©cessaire, mĂȘme avec ce dĂ©lai et une interrogation du serveur.
# Notification de commit
Comme alternative pour Ă©viter le scĂ©nario dâerreur dĂ©crit dans Client recevant un transfert expirĂ©, pour les cas oĂč il est compliquĂ© dâeffectuer un remboursement, un FSP bĂ©nĂ©ficiaire peut (si le schĂ©ma le permet) rĂ©server le transfert puis attendre la notification de commit Ă©mise par le Switch. Demander une notification de commit plutĂŽt quâun commit direct relĂšve de la dĂ©cision mĂ©tier du FSP bĂ©nĂ©ficiaire (si le schĂ©ma lâautorise), selon le contexte de la transaction. Par exemple, un retrait cash ou un paiement commerçant est plus risquĂ© quâun transfert P2P du fait de la difficultĂ© de remboursement a posteriori. Pour demander la notification de commit depuis le Switch, le FSP bĂ©nĂ©ficiaire doit marquer lâĂ©tat du transfert (voir Section 6.7.6) comme rĂ©servĂ© (reserved) au lieu de commis (committed) dans le callback PUT /transfers/{ID} . Selon lâĂ©tat, le Switch doit alors effectuer :
- Si le transfert est commis, le Switch nâenvoie pas de notification de commit puisque le FSP bĂ©nĂ©ficiaire a dĂ©jĂ acceptĂ© le risque. Câest la mĂ©thode de commit par dĂ©faut dĂ©crite dans Processus.
- Si le transfert est réservé, le Switch doit envoyer une notification de commit au FSP bénéficiaire à la fin du traitement (commit ou annulation).
La notification de commit est envoyĂ©e avec la requĂȘte PATCH /transfers/{ID} du Switch au FSP bĂ©nĂ©ficiaire. Si ce dernier ne reçoit pas la notification dans un dĂ©lai raisonnable, il doit renvoyer le callback PUT /transfers/{ID} au Switch. Le FSP bĂ©nĂ©ficiaire doit recevoir la notification de commit du Switch avant de commettre le transfert, ou accepter le risque que le transfert ait Ă©chouĂ© cĂŽtĂ© Switch. Il nâa pas le droit de rollbacker sans avoir reçu un Ă©tat "aborted" (voir Section 6.7.6) du Switch, car il a dĂ©jĂ envoyĂ© le fulfilment (dĂ©clencheur du commit). Figure 54 illustre un cas oĂč une notification de commit est demandĂ©e. Ici, le commit a rĂ©ussi cĂŽtĂ© Switch.
# Figure 54
Figure 54 -- Notification de commit aprĂšs succĂšs du transfert dans le Switch
Figure 55 montre un exemple oĂč le commit dans le Switch a Ă©chouĂ© (par exemple expiration du dĂ©lai dans le Switch Ă cause dâun incident rĂ©seau). Câest le mĂȘme scĂ©nario que Figure 53, mais sans rapprochement Ă rĂ©aliser car le FSP bĂ©nĂ©ficiaire reçoit la notification de commit avant de rĂ©aliser effectivement le transfert.
# Figure 55
Figure 55 -- Notification de commit aprÚs échec du commit dans le Switch
# Remboursements
Au lieu de supporter les inversions, lâAPI supporte les remboursements. Pour rembourser une transaction via lâAPI, une nouvelle transaction doit ĂȘtre créée par le bĂ©nĂ©ficiaire initial. Celle-ci doit annuler la transaction originale (en totalitĂ© ou partiellement) ; par exemple, si le client X a envoyĂ© 100 USD au commerçant Y, celui-ci crĂ©e une nouvelle transaction pour reverser 100 USD Ă X. Il existe un type de transaction spĂ©cifique pour indiquer un remboursement ; cela permet de gĂ©rer diffĂ©remment le devis. LâID de la transaction dâorigine doit ĂȘtre inclus dans la nouvelle transaction Ă des fins dâinformation et de rapprochement.
# Demande de paiement Interledger
Dans le cadre du support dâInterledger et de la demande de paiement Interledger (voir Protocole Interledger), le FSP payeur doit joindre au transfert le paquet ILP, la condition ainsi quâune date dâexpiration. La condition et le paquet ILP sont les mĂȘmes que ceux envoyĂ©s par le FSP bĂ©nĂ©ficiaire dans le callback du devis ; voir Demande de paiement Interledger pour plus dâinformations.
Le paiement ILP de bout en bout est une chaĂźne dâun ou plusieurs transferts conditionnels tous dĂ©pendants de la mĂȘme condition. La condition est fournie par le FSP payeur lors de lâinitiation du transfert vers le prochain ledger.
Le rĂ©cepteur du transfert extrait lâadresse ILP du bĂ©nĂ©ficiaire dans le paquet ILP et effectue un autre transfert sur le ledger suivant, en joignant le mĂȘme paquet ILP et condition et en fixant une expiration plus courte que celle du transfert entrant.
Quand le FSP bénéficiaire reçoit le dernier transfert entrant pour le compte du bénéficiaire, il extrait le paquet ILP et procÚde ainsi :
- Valide que lâadresse ILP du bĂ©nĂ©ficiaire dans le paquet ILP correspond au compte bĂ©nĂ©ficiaire de destination.
- Valide que le montant dans le paquet ILP correspond au montant du transfert et déclenche la réservation sur le registre local (moins les éventuels frais cachés au bénéficiaire, voir Devis).
- Si la rĂ©servation est un succĂšs, le FSP bĂ©nĂ©ficiaire gĂ©nĂšre le fulfilment Ă lâaide du mĂȘme algorithme que celui utilisĂ© pour gĂ©nĂ©rer la condition envoyĂ©e dans le callback du devis (voir Demande de paiement Interledger).
- Le fulfilment est soumis au registre du FSP bénéficiaire pour engager la réservation en faveur du bénéficiaire. Le registre valide que le hash SHA-256 du fulfilment correspond à la condition du transfert. Si oui, il valide la transaction. Sinon, il la rejette, et le FSP bénéficiaire annule la réservation préalablement effectuée.
Le fulfilment est ensuite transmis au FSP payeur via la mĂȘme chaĂźne de registres dans le callback du transfert. Chaque ledger engage les fonds aprĂšs validation du fulfilment, et lâentitĂ© initiatrice est notifiĂ©e que ses fonds ont Ă©tĂ© libĂ©rĂ©s et reçoit le fulfilment.
Le dernier transfert Ă engager est celui sur le registre du FSP payeur, oĂč la rĂ©servation est dĂ©duite de son compte. Le FSP payeur notifie alors le payeur du succĂšs de la transaction.
# RequĂȘtes
Cette section dĂ©crit les services pouvant ĂȘtre demandĂ©s par un client de lâAPI sur la ressource /transfers.
# GET /transfers/{ID}
URI alternative : N/A
Service logique dâAPI : Retourner le rĂ©sultat de lâautorisation
La requĂȘte HTTP GET /transfers/{ID} est utilisĂ©e pour obtenir des informations sur un transfert créé ou demandĂ© prĂ©cĂ©demment. Le {ID} dans lâURI doit contenir le transferId (voir Tableau 23) utilisĂ© lors de la crĂ©ation du transfert.
Informations sur les callbacks et modÚle de données pour GET /transfers/{ID} :
- Callback -- PUT /transfers/{ID}
- Callback dâerreur -- PUT /transfers/{ID}/error
- ModÚle de données -- Corps vide
# POST /transfers
URI alternative : N/A
Service logique dâAPI : Effectuer le transfert
La requĂȘte HTTP POST /transfers est utilisĂ©e pour demander la crĂ©ation dâun transfert pour le prochain ledger, et une transaction financiĂšre pour le FSP bĂ©nĂ©ficiaire.
Informations sur les callbacks et modÚle de données pour POST /transfers :
- Callback -- PUT /transfers/{ID}
- Callback dâerreur -- PUT /transfers/{ID}/error
- ModÚle de données -- Voir Tableau 30
# Tableau 30
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| transferId | 1 | CorrelationId | Identifiant commun entre les FSPs et le Switch optionnel pour lâobjet de transfert, dĂ©fini par le FSP payeur. Ă rĂ©utiliser pour les rééditions, Ă rĂ©gĂ©nĂ©rer pour chaque nouveau transfert. |
| payeeFsp | 1 | FspId | FSP bénéficiaire dans la transaction financiÚre proposée. |
| payerFsp | 1 | FspId | FSP payeur dans la transaction financiÚre proposée. |
| amount | 1 | Money | Montant à transférer. |
| ilpPacket | 1 | IlpPacket | Paquet ILP contenant le montant remis au bĂ©nĂ©ficiaire, lâadresse ILP du bĂ©nĂ©ficiaire et toutes donnĂ©es end-to-end. |
| condition | 1 | IlpCondition | Condition devant ĂȘtre remplie pour engager le transfert. |
| expiration | 1 | DateTime | Lâexpiration permet de gĂ©nĂ©rer un Ă©chec rapide si besoin. Le transfert doit ĂȘtre annulĂ© si aucun fulfilment nâest dĂ©livrĂ© avant cette limite. |
| extensionList | 0..1 | ExtensionList | Extension optionnelle, spécifique au déploiement. |
Tableau 30 â ModĂšle de donnĂ©es POST /transfers
# PATCH /transfers/{ID}
URI alternative : N/A
Service logique dâAPI : Notification de commit
La requĂȘte HTTP PATCH /transfers/{ID} est utilisĂ©e par un Switch pour mettre Ă jour lâĂ©tat dâun transfert rĂ©servĂ© si le FSP bĂ©nĂ©ficiaire a demandĂ© une notification de commit, une fois le traitement terminĂ© cĂŽtĂ© Switch. Le {ID} doit contenir le transferId (voir Tableau 30) utilisĂ© pour la crĂ©ation du transfert. Notez que cette requĂȘte ne gĂ©nĂšre pas de callback. Voir Tableau 31 pour le modĂšle de donnĂ©es.
# Tableau 31
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| completedTimestamp | 1 | DateTime | Date et heure dâachĂšvement de la transaction |
| transferState | 1 | TransferState | Ătat du transfert |
| extensionList | 0..1 | ExtensionList | Extension optionnelle, spécifique au déploiement. |
Tableau 31 â ModĂšle de donnĂ©es PATCH /transfers/{ID}
# Callbacks
Cette section décrit les callbacks utilisés par le serveur sous la ressource /transfers.
# PUT /transfers/{ID}
URI alternative : N/A
Service logique dâAPI : Retourner les informations du transfert
Le callback PUT /transfers/{ID} est utilisĂ© pour informer le client dâun transfert demandĂ© ou créé. Le {ID} dans lâURI doit contenir le transferId (voir Tableau 30) utilisĂ© Ă la crĂ©ation ou celui utilisĂ© dans le GET /transfers/{ID}. Voir Tableau 32 pour le modĂšle de donnĂ©es.
Remarque : pour les callbacks PUT /transfers/{ID} , lâĂ©tat ABORTED nâest pas une option valide pour le champ transferState en Tableau 32. Si un transfert doit ĂȘtre rejetĂ©, lâĂ©metteur du callback doit utiliser un callback dâerreur, câest-Ă -dire callback sur lâendpoint /error. Cependant, lâĂ©tat âABORTEDâ est valide en rĂ©ponse Ă un appel GET /transfers/{ID} .
# Tableau 32
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| fulfilment | 0..1 | IlpFulfilment | Fulfilment (accomplissement) de la condition spécifiée avec la transaction. Obligatoire en cas de succÚs du transfert. |
| completedTimestamp | 0..1 | DateTime | Date et heure dâachĂšvement de la transaction |
| transferState | 1 | TransferState | Ătat du transfert |
| extensionList | 0..1 | ExtensionList | Extension optionnelle, spécifique au déploiement |
Tableau 32 -- ModÚle de données PUT /transfers/{ID}
# Callbacks dâerreur
Cette section dĂ©crit les callbacks dâerreur utilisĂ©s par le serveur sous la ressource /transfers.
# PUT /transfers/{ID}/error
URI alternative : N/A
Service logique dâAPI : Retourner une erreur dâinformation de transfert
Si le serveur ne trouve pas ou ne crĂ©e pas un transfert, ou quâune autre erreur de traitement survient, le callback dâerreur PUT
/transfers/{ID}/error est utilisĂ©. Le {ID} dans lâURI doit ĂȘtre le transferId (voir Tableau 30) utilisĂ© lors de la crĂ©ation du transfert, ou celui utilisĂ© dans le GET /transfers/{ID}. Voir Tableau 33 pour le modĂšle de donnĂ©es.
# Tableau 33
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| errorInformation | 1 | ErrorInformation | Code dâerreur, description de la catĂ©gorie. |
Tableau 33 -- ModÚle de données PUT /transfers/{ID}/error
6.7.6 Ătats
# Figure 56
Les Ă©tats possibles dâun transfert sont reprĂ©sentĂ©s dans Figure 56.
Figure 56 -- Ătats possibles dâun transfert
# Ressource dâAPI /transactions
Cette section dĂ©finit la ressource logique dâAPI Transactions, dĂ©crite dans ModĂšles de transaction gĂ©nĂ©riques.
Les services fournis par la ressource /transactions permettent dâobtenir des informations sur la transaction financiĂšre de bout en bout exĂ©cutĂ©e ; par exemple, obtenir les dĂ©tails dâun Ă©ventuel code/ticket gĂ©nĂ©rĂ© lors de la transaction.
La transaction financiĂšre rĂ©elle est exĂ©cutĂ©e via la ressource dâAPI /transfers, qui inclut la transaction de bout en bout entre le FSP payeur et le FSP bĂ©nĂ©ficiaire.
# Historique des versions de la ressource
Tableau 34 décrit les différentes versions de la ressource /transactions.
# Tableau 34
| Version | Date | Description |
|---|---|---|
| 1.0 | 2018-03-13 | Version initiale |
Tableau 34 â Historique des versions de la ressource /transactions
# Détails des services
Figure 57 montre un exemple du processus de transaction. La transaction rĂ©elle sera exĂ©cutĂ©e lors du processus de transfert. Le service GET /transactions/{TransactionID} peut ensuite ĂȘtre utilisĂ© pour obtenir plus dâinformations sur la transaction financiĂšre exĂ©cutĂ©e lors du transfert.
# Figure 57
Figure 57 -- Exemple de processus de transaction
# RequĂȘtes
Cette section dĂ©crit les services pouvant ĂȘtre demandĂ©s par un client sur la ressource /transactions.
# GET /transactions/{ID}
URI alternative : N/A
Service logique dâAPI : RĂ©cupĂ©rer les informations sur la transaction
La requĂȘte HTTP GET /transactions/{ID} est utilisĂ©e pour obtenir des informations sur une transaction financiĂšre prĂ©cĂ©demment créée. Le {ID} doit correspondre au transactionId utilisĂ© lors de la crĂ©ation du devis (voir Tableau 23), car la transaction est créée dans le cadre dâun autre processus (le transfert, voir API Resource Transfers).
Informations sur les callbacks et modÚles de données pour GET /transactions/{ID} :
- Callback -- PUT /transactions/{ID}
- Callback dâerreur -- PUT /transactions/{ID}/error
- ModÚle de données -- Corps vide
# Callbacks
Cette section décrit les callbacks utilisés par le serveur sous la ressource /transactions.
# PUT /transactions/{ID}
URI alternative : N/A
Service logique dâAPI : Retourner les informations de la transaction
Le callback PUT /transactions/{ID} est utilisĂ© pour informer le client dâune transaction demandĂ©e. Le {ID} doit ĂȘtre celui utilisĂ© dans le GET /transactions/{ID}. Voir Tableau 35 pour le modĂšle de donnĂ©es.
# Tableau 35
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| completedTimestamp | 0..1 | DateTime | Date et heure dâachĂšvement de la transaction. |
| transactionState | 1 | TransactionState | Ătat de la transaction. |
| code | 0..1 | Code | Information de code/jeton de rédemption optionnelle fournie au payeur aprÚs finalisation de la transaction. |
| extensionList | 0..1 | ExtensionList | Extension optionnelle, spécifique au déploiement. |
Tableau 35 -- ModÚle de données PUT /transactions/{ID}
# Callbacks dâerreur
Cette section dĂ©crit les callbacks dâerreur utilisĂ©s par le serveur sous la ressource /transactions.
# PUT /transactions/{ID}/error
URI alternative : N/A
Service logique dâAPI : Retourner une erreur concernant la transaction
Si le serveur ne parvient pas Ă trouver ou crĂ©er une transaction, ou en cas dâerreur de traitement, le callback dâerreur PUT /transactions/{ID}/error est utilisĂ©. Le {ID} doit ĂȘtre celui utilisĂ© dans le GET /transactions/{ID}. Voir Tableau 36 pour le modĂšle de donnĂ©es.
# Tableau 36
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| errorInformation | 1 | ErrorInformation | Code dâerreur, description de la catĂ©gorie. |
Tableau 36 -- ModÚle de données PUT /transactions/{ID}/error
# Ătats
# Figure 58
Les états possibles d'une transaction sont illustrés à la Figure 58.
Remarque : Ă des fins de rapprochement, un serveur doit conserver dans sa base de donnĂ©es, pendant une pĂ©riode dĂ©finie par le systĂšme, les objets transactionnels ayant Ă©tĂ© rejetĂ©s. Cela signifie quâun client peut sâattendre Ă recevoir un callback appropriĂ© concernant une transaction (si celle-ci a bien Ă©tĂ© reçue par le serveur) lorsquâil demande des informations Ă son sujet.
Figure 58 -- Ătats possibles d'une transaction
# Ressource API /bulkQuotes
Cette section définit la ressource logique d'API Bulk Quotes (Devis en lot), comme décrit dans ModÚles de transactions génériques.
Les services fournis par la ressource API /bulkQuotes sont utilisĂ©s pour demander la crĂ©ation dâun devis en lot, câest-Ă -dire un devis pour plus dâune transaction financiĂšre. Pour plus dâinformations concernant un devis unique pour une transaction, voir la ressource API /quotes.
Un objet de devis en lot créé contient un devis pour chaque transaction individuelle du lot au sein dâun FSP Pair. Un devis en lot est irrĂ©vocable ; il ne peut pas ĂȘtre modifiĂ© aprĂšs sa crĂ©ation. Toutefois, il peut expirer (tous les devis en lot ne sont valables que jusquâĂ leur expiration).
Remarque : Un devis en lot nâest pas une garantie de rĂ©ussite de la transaction financiĂšre. La transaction en lot peut toujours Ă©chouer ultĂ©rieurement dans le processus. Un devis en lot garantit seulement que les frais et commissions FSP applicables Ă l'opĂ©ration spĂ©cifiĂ©e restent valables tant que le devis nâest pas expirĂ©.
# Historique des versions de la ressource
Le Tableau 37 présente une description de chaque version différente de la ressource /bulkQuotes.
| Version | Date | Description |
|---|---|---|
| 1.0 | 2018-03-13 | Version initiale |
| 1.1 | 2020-05-19 | Le modÚle de données a été mis à jour pour ajouter un élément optionnel ExtensionList au type complexe PartyIdInfo suite à la demande de changement : https://github.com/mojaloop/mojaloop-specification/issues/30. Par la suite, le modÚle de données tel que spécifié dans le Tableau 93 a été mis à jour. |
Tableau 37 â- Historique des versions pour la ressource /bulkQuotes
# Détails du service
La Figure 59 illustre le fonctionnement du processus de devis en lot, utilisant le service POST /bulkQuotes. Ă la rĂ©ception dâun lot de transactions de la part du Payeur, le FSP du Payeur doit :
Rechercher à quel FSP appartient chaque Bénéficiaire ; par exemple, en utilisant la ressource API /participants.
Diviser le lot selon le FSP du Bénéficiaire. Le service POST /bulkQuotes est alors utilisé pour chaque FSP de Bénéficiaire pour obtenir les devis en lot de chacun. Chaque résultat de devis contiendra le paquet ILP et la condition (voir Paquet ILP et Transferts conditionnels) nécessaires pour effectuer chaque transfert dans le transfert en lot (voir la ressource API /bulkTransfers), qui réalisera effectivement la transaction financiÚre du Payeur vers chaque Bénéficiaire.
# Figure 59
Figure 59 -- Exemple de processus de devis en lot
# RequĂȘtes
Cette section dĂ©crit les services pouvant ĂȘtre demandĂ©s par un client sur la ressource API /bulkQuotes.
# GET /bulkQuotes/{ID}
URI alternative : N/A
Service logique dâAPI : RĂ©cupĂ©rer les informations du devis en lot
La requĂȘte HTTP GET /bulkQuotes/{ID} est utilisĂ©e pour obtenir des informations concernant un devis en lot prĂ©alablement créé ou demandĂ©.
Le {ID} de lâURI doit contenir le bulkQuoteId (voir Tableau 38) utilisĂ© pour la crĂ©ation du devis en lot.
Informations sur les callbacks et le modÚle de données pour GET /bulkQuotes/{ID} :
- Callback -- PUT /bulkQuotes/**{ID}
- Callback dâerreur -- PUT /bulkQuotes/{ID}/error**
- ModÚle de données -- Corps vide
# POST /bulkQuotes
URI alternative : N/A
Service logique dâAPI : Calculer un devis en lot
La requĂȘte HTTP POST /bulkQuotes est utilisĂ©e pour demander la crĂ©ation dâun devis en lot pour les transactions financiĂšres fournies sur le serveur.
Informations sur les callbacks et le modÚle de données pour POST /bulkQuotes :
- Callback -- PUT /bulkQuotes/{ID}
- Callback dâerreur -- PUT /bulkQuotes/{ID}/error
- ModÚle de données -- Voir Tableau 38
# Tableau 38
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| bulkQuoteId | 1 | CorrelationId | Identifiant commun entre les FSPs pour l'objet devis en lot, dĂ©cidĂ© par le FSP du Payeur. LâID doit ĂȘtre rĂ©utilisĂ© pour les renvois du mĂȘme devis en lot. Un nouvel ID doit ĂȘtre gĂ©nĂ©rĂ© pour chaque nouveau devis en lot. |
| payer | 1 | Party | Informations sur le Payeur dans la transaction financiÚre proposée. |
| geoCode | 0..1 | GeoCode | Longitude et latitude de la Partie initiatrice. Peut ĂȘtre utilisĂ© pour dĂ©tecter une fraude. |
| expiration | 0..1 | DateTime | Lâexpiration est optionnelle et permet au FSP du BĂ©nĂ©ficiaire de savoir quand un devis nâa plus besoin dâĂȘtre renvoyĂ©. |
| individualQuotes | 1..1000 | IndividualQuote | Liste des éléments de devis individuels. |
| extensionList | 0..1 | ExtensionList | Extension optionnelle, spécifique au déploiement. |
Tableau 38 -- ModÚle de données POST /bulkQuotes
# Callbacks
Cette section décrit les callbacks utilisés par le serveur sous la ressource /bulkQuotes.
# PUT /bulkQuotes/{ID}
URI alternative : N/A
Service logique dâAPI : Retourner les informations du devis en lot
Le callback PUT /bulkQuotes/{ID} est utilisĂ© pour informer le client dâun devis en lot demandĂ© ou créé. Le {ID} de lâURI doit contenir le bulkQuoteId (voir Tableau 38) utilisĂ© pour la crĂ©ation du devis en lot, ou le {ID} qui a Ă©tĂ© utilisĂ© dans le GET /bulkQuotes/{ID}. Voir Tableau 39 pour le modĂšle de donnĂ©es.
# Tableau 39
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| individualQuoteResults | 0..1000 | IndividualQuoteResult | Frais pour chaque transaction individuelle, si certains sont facturés par transaction. |
| expiration | 1 | DateTime | Date et heure jusqu'Ă laquelle le devis est valable et peut ĂȘtre honorĂ© dans une demande de transaction ultĂ©rieure. |
| extensionList | 0..1 | ExtensionList | Extension optionnelle, spécifique au déploiement. |
Tableau 39 -- ModÚle de données PUT /bulkQuotes/{ID}
# Callbacks dâerreur
Cette section dĂ©crit les callbacks dâerreur utilisĂ©s par le serveur sous la ressource /bulkQuotes.
# PUT /bulkQuotes/{ID}/error
URI alternative : N/A
Service logique dâAPI : Retourner une erreur concernant le devis en lot
Si le serveur ne parvient pas Ă trouver ou crĂ©er un devis en lot, ou en cas dâerreur de traitement, le callback dâerreur PUT /bulkQuotes/{ID}/error est utilisĂ©. Le {ID} de lâURI doit contenir le bulkQuoteId (voir Tableau 38) utilisĂ© pour la crĂ©ation du devis, ou le {ID} utilisĂ© dans le GET /bulkQuotes/{ID}. Voir Tableau 40 pour le modĂšle de donnĂ©es.
# Tableau 40
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| errorInformation | 1 | ErrorInformation | Code dâerreur, description de la catĂ©gorie. |
Tableau 40 -- ModÚle de données PUT /bulkQuotes/{ID}/error
# Ătats
# Figure 60
Les Ă©tats possibles dâun devis en lot sont illustrĂ©s Ă la Figure 60.
Remarque : Un serveur nâa pas besoin de conserver dans sa base de donnĂ©es les objets de devis en lot qui ont Ă©tĂ© rejetĂ©s ou expirĂ©s. Cela signifie quâun client doit sâattendre Ă recevoir un callback dâerreur pour un devis en lot rejetĂ© ou expirĂ©.
Figure 60 -- Ătats possibles dâun devis en lot
# Ressource API /bulkTransfers
Cette section définit la ressource logique d'API Bulk Transfers (Transferts en lot), comme décrit dans ModÚles de transactions génériques.
Les services fournis par la ressource API /bulkTransfers sont utilisĂ©s pour demander la crĂ©ation dâun transfert en lot ou pour obtenir des informations sur un transfert en lot prĂ©cĂ©demment demandĂ©. Pour plus d'informations sur un transfert individuel, voir la ressource API /transfers. Avant quâun transfert en lot ne puisse ĂȘtre demandĂ©, un devis en lot doit ĂȘtre rĂ©alisĂ©. Voir la ressource API /bulkQuotes pour plus dâinformations.
Un transfert en lot est irrĂ©vocable ; il ne peut pas ĂȘtre modifiĂ©, annulĂ© ou inversĂ© aprĂšs avoir Ă©tĂ© envoyĂ© par le FSP du Payeur.
# Historique des versions de la ressource
Le Tableau 41 présente une description de chaque version différente de la ressource /bulkTransfers.
| Version | Date | Description |
|---|---|---|
| 1.0 | 2018-03-13 | Version initiale |
| 1.1 | 2020-05-19 | Le modÚle de données a été mis à jour pour ajouter un élément optionnel ExtensionList au type complexe PartyIdInfo suite à la demande de changement : https://github.com/mojaloop/mojaloop-specification/issues/30. Par la suite, le modÚle de données tel que spécifié dans le Tableau 93 a été mis à jour. |
Tableau 41 â- Historique des versions pour la ressource /bulkTransfers
# Détails du service
La Figure 61 illustre le fonctionnement du processus de transfert en lot utilisant le service POST /bulkTransfers. Lors de la réception des transactions groupées du Payeur, le FSP du Payeur doit effectuer les étapes suivantes :
- Rechercher à quel FSP appartient chaque Bénéficiaire ; par exemple, en utilisant la ressource API /participants, Section 6.2.
- Effectuer le processus de devis en lot en utilisant la ressource API /bulkQuotes, Section 6.9. Le callback du devis en lot doit contenir les paquets ILP requis et les conditions nĂ©cessaires Ă lâexĂ©cution de chaque transfert.
- Effectuer le processus de transfert en lot comme dans la Figure 61 en utilisant POST /bulkTransfers. Ceci rĂ©alise chaque transfert âhop-to-hopâ et la transaction financiĂšre de bout en bout. Pour plus dâinformations sur les transferts âhop-to-hopâ versus les transactions financiĂšres de bout en bout, voir Section 6.7.
# Figure 61
Figure 61 -- Exemple de processus de transfert en lot
# RequĂȘtes
Cette section dĂ©crit les services pouvant ĂȘtre demandĂ©s par un client sur la ressource /bulkTransfers.
# GET /bulkTransfers/{ID}
URI alternative : N/A
Service logique dâAPI : RĂ©cupĂ©rer les informations du transfert en lot
La requĂȘte HTTP GET /bulkTransfers/{ID} est utilisĂ©e pour obtenir des informations concernant un transfert en lot prĂ©alablement créé ou demandĂ©. Le {ID} de lâURI doit contenir le bulkTransferId (voir Tableau 42) utilisĂ© pour la crĂ©ation du transfert.
Informations sur les callbacks et le modÚle de données pour GET /bulkTransfers/{ID} :
- Callback -- PUT /bulkTransfers/{ID}
- Callback dâerreur -- PUT /bulkTransfers/{ID}/error
- ModÚle de données -- Corps vide
# POST /bulkTransfers
URI alternative : N/A
Service logique dâAPI : ExĂ©cuter un transfert en lot
La requĂȘte HTTP POST /bulkTransfers est utilisĂ©e pour demander la crĂ©ation dâun transfert en lot sur le serveur.
- Callback - PUT /bulkTransfers/{ID}
- Callback dâerreur - PUT /bulkTransfers/{ID}/error
- ModÚle de données -- Voir Tableau 42
# Tableau 42
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| bulkTransferId | 1 | CorrelationId | Identifiant commun entre les FSPs et Ă©ventuellement le Switch pour l'objet transfert en lot, dĂ©cidĂ© par le FSP du Payeur. LâID doit ĂȘtre rĂ©utilisĂ© pour les renvois du mĂȘme transfert en lot. Un nouvel ID doit ĂȘtre gĂ©nĂ©rĂ© pour chaque nouveau transfert en lot. |
| bulkQuoteId | 1 | CorrelationId | ID du devis en lot associé |
| payeeFsp | 1 | FspId | Identifiant du FSP du Bénéficiaire. |
| payerFsp | 1 | FspId | Identifiant du FSP du Payeur. |
| individualTransfers | 1..1000 | IndividualTransfer | Liste des éléments IndividualTransfer. |
| expiration | 1 | DateTime | Date dâexpiration des transferts. |
| extensionList | 0..1 | ExtensionList | Extension optionnelle, spécifique au déploiement. |
Tableau 42 -- ModÚle de données POST /bulkTransfers
# Callbacks
Cette section décrit les callbacks utilisés par le serveur sous la ressource /bulkTransfers.
# PUT /bulkTransfers/{ID}
URI alternative : N/A
Service logique dâAPI : RĂ©cupĂ©rer les informations du transfert en lot
Le callback PUT /bulkTransfers/{ID} est utilisĂ© pour informer le client dâun transfert en lot demandĂ© ou créé. Le {ID} de lâURI doit contenir le bulkTransferId (voir Tableau 42) utilisĂ© pour la crĂ©ation du transfert (POST /bulkTransfers), ou le {ID} utilisĂ© dans le GET /bulkTransfers/{ID}. Voir Tableau 43 pour le modĂšle de donnĂ©es.
# Tableau 43
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| completedTimestamp | 0..1 | DateTime | Date et heure de la finalisation de la transaction de lot. |
| individualTransferResults | 0..1000 | Erreur ! Source de référence introuvable. | Liste des éléments Erreur ! Source de référence introuvable. |
| bulkTransferState | 1 | BulkTransferState | Ătat du transfert en lot. |
| extensionList | 0..1 | ExtensionList | Extension optionnelle, spécifique au déploiement. |
Tableau 43 -- ModÚle de données PUT /bulkTransfers/{ID}
# Callbacks dâerreur
Cette section dĂ©crit les callbacks dâerreur utilisĂ©s par le serveur sous la ressource /bulkTransfers.
# PUT /bulkTransfers/{ID}/error
URI alternative : N/A
Service logique dâAPI : Retourner une erreur concernant le transfert en lot
Si le serveur ne parvient pas Ă trouver ou crĂ©er un transfert en lot, ou en cas dâerreur de traitement, le callback dâerreur PUT /bulkTransfers/{ID}/error est utilisĂ©. Le {ID} de lâURI doit contenir le bulkTransferId (voir Tableau 42) utilisĂ© pour la crĂ©ation du transfert (POST /bulkTransfers), ou le {ID} utilisĂ© dans le GET /bulkTransfers/{ID}. Voir Tableau 44 pour le modĂšle de donnĂ©es.
# Tableau 44
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| errorInformation | 1 | ErrorInformation | Code dâerreur, description de la catĂ©gorie. |
Tableau 44 -- ModÚle de données PUT /bulkTransfers/{ID}/error
# Ătats
# Figure 62
Les Ă©tats possibles dâun transfert en lot sont illustrĂ©s Ă la Figure 62.
Remarque : Ă des fins de rapprochement, un serveur doit conserver dans sa base de donnĂ©es les objets de transfert en lot ayant Ă©tĂ© rejetĂ©s durant une pĂ©riode dĂ©finie par le marchĂ©. Cela signifie quâun client peut sâattendre Ă recevoir un callback appropriĂ© concernant un transfert en lot (si celui-ci a bien Ă©tĂ© reçu par le serveur) lorsquâil demande des informations Ă son sujet.
Figure 62 -- Ătats possibles dâun transfert en lot
# ModĂšles de donnĂ©es de support de lâAPI
Cette section fournit des informations sur des modĂšles de donnĂ©es complĂ©mentaires utilisĂ©s par lâAPI.
# Introduction sur le format
Cette section introduit les formats utilisĂ©s pour les types de donnĂ©es des Ă©lĂ©ments employĂ©s par lâAPI.
Tous les types de donnĂ©es dâĂ©lĂ©ment ont Ă la fois une longueur minimale et maximale. Ces longueurs sont indiquĂ©es de lâune des façons suivantes :
- Une longueur minimale et maximale
- Une longueur exacte
- Une expression rĂ©guliĂšre limitant lâĂ©lĂ©ment de façon Ă nâautoriser quâune ou plusieurs longueurs spĂ©cifiques.
# Longueur minimale et maximale
Lorsquâune longueur minimale et maximale est utilisĂ©e, cela sera indiquĂ© aprĂšs le type de donnĂ©es entre parenthĂšses : dâabord la valeur minimale (incluse), suivie de deux points consĂ©cutifs, puis la valeur maximale (incluse).
Exemples :
String(1..32)â Une chaĂźne de caractĂšres dâau moins un caractĂšre et au maximum 32 caractĂšres.Integer(3..10)- Un entier dâau moins 3 chiffres et au maximum 10 chiffres.
# Longueur exacte
Lorsquâune longueur exacte est utilisĂ©e, cela sera indiquĂ© aprĂšs le type de donnĂ©es entre parenthĂšses contenant une seule valeur exacte. Les autres longueurs ne sont pas permises.
Exemples :
String(3)â Une chaĂźne de caractĂšres dâexactement trois caractĂšres.Integer(4)â Un entier dâexactement quatre chiffres.
# Expressions réguliÚres
Certains types de donnĂ©es dâĂ©lĂ©ment sont limitĂ©s par des expressions rĂ©guliĂšres. Les expressions rĂ©guliĂšres dans ce document utilisent la norme de syntaxe et les classes de caractĂšres Ă©tablies par le langage de programmation Perl30 (opens new window).
# Formats des types de donnĂ©es dâĂ©lĂ©ments
Cette section dĂ©finit les types de donnĂ©es dâĂ©lĂ©ments utilisĂ©s par lâAPI.
# String
Le type de données API String est une chaßne JSON normale31 (opens new window), limitée par un nombre maximum et minimum de caractÚres.
# Exemple de format I
String(1..32) â Une chaĂźne de caractĂšres dâau moins 1 caractĂšre et au maximum 32 caractĂšres.
Un exemple de String(1..32) apparaĂźt ci-dessous :
- Cette chaĂźne fait 28 caractĂšres
# Exemple de format II
String(1..128) â Une chaĂźne de caractĂšres dâau moins 1 caractĂšre et au maximum 128 caractĂšres.
Un exemple de String(32..128) apparaĂźt ci-dessous :
- Cette chaßne est plus longue que 32 caractÚres, mais inférieure à 128
# Enum
Le type de donnĂ©es API Enum est une liste restreinte de valeurs JSON String) autorisĂ©es ; une Ă©numĂ©ration de valeurs. Dâautres valeurs que celles dĂ©finies dans la liste ne sont pas autorisĂ©es.
# Exemple de format
Enum of String(1..32) â Une chaĂźne de caractĂšres dâau moins un caractĂšre et au maximum 32 caractĂšres restreinte par la liste des valeurs autorisĂ©es. La description de lâĂ©lĂ©ment contient un lien vers lâĂ©numĂ©ration.
# UndefinedEnum
Le type de donnĂ©es dâAPI UndefinedEnum est une chaĂźne JSON constituĂ©e de 1 Ă 32 caractĂšres en majuscule, incluant le caractĂšre de soulignement (**_****).
# Expression réguliÚre
Lâexpression rĂ©guliĂšre limitant le type UndefinedEnum apparaĂźt dans Liste 13.
# Liste 13
^[A-Z_]{1,32}$
Liste 13 -- Expression réguliÚre pour le type de données UndefinedEnum
# Name
Le type de données API Name est une chaßne JSON, restreinte par une expression réguliÚre pour éviter les caractÚres généralement non utilisés dans un nom.
# Expression réguliÚre
Lâexpression rĂ©guliĂšre limitant le type Name apparaĂźt dans la Liste 14 ci-dessous. La contrainte nâautorise pas une chaĂźne constituĂ©e uniquement dâespaces, tous les caractĂšres Unicode32 sont autorisĂ©s, ainsi que le point (.), lâapostrophe ('), le tiret (-), la virgule (,) et lâespace ( ). Le nombre maximal de caractĂšres pour Name est 128.
Remarque : Dans certains langages de programmation, le support Unicode doit ĂȘtre explicitement activĂ©. Par exemple, si Java est utilisĂ©, il faut activer le flag UNICODE_CHARACTER_CLASS pour permettre les caractĂšres Unicode.
# Liste 14
^(?!\s*$)[\w .,'-]{1,128}$
Liste 14 -- Expression réguliÚre pour le type de données Name
# Integer
Le type de données API Integer est une chaßne JSON composée uniquement de chiffres. Les nombres négatifs et les zéros initiaux ne sont pas autorisés. Le type de données est toujours limité par un nombre de chiffres.
# 7.2.5.1 Expression réguliÚre
Lâexpression rĂ©guliĂšre restreignant le type Integer apparaĂźt Ă la Liste 15.
# Liste 15
^[1-9]\d*$
Liste 15 -- Expression réguliÚre pour le type de données Integer
# Exemple de format
Integer(1..6) â Un Integer dâau moins un chiffre et de six chiffres au maximum.
Un exemple de Integer(1..6) apparaĂźt ci-dessous :
- 123456
# OtpValue
Le type de données API OtpValue est une chaßne JSON de trois à dix caractÚres composée uniquement de chiffres. Les nombres négatifs ne sont pas autorisés. Un ou plusieurs zéros initiaux sont autorisés.
# Expression réguliÚre
Lâexpression rĂ©guliĂšre limitant le type OtpValue apparaĂźt dans la Liste 16.
# Liste 16
^\d{3,10}$
Liste 16 -- Expression réguliÚre pour le type de données OtpValue
# BopCode
Le type de donnĂ©es API BopCode est une chaĂźne JSON de trois caractĂšres, composĂ©e uniquement de chiffres. Les nombres nĂ©gatifs ne sont pas autorisĂ©s. Un zĂ©ro initial nâest pas permis.
# Expression réguliÚre
Lâexpression rĂ©guliĂšre limitant le type BopCode apparaĂźt Ă la Liste 17.
# Liste 17
^[1-9]\d{2}$
Liste 17 -- Expression réguliÚre pour le type de données BopCode
# ErrorCode
Le type de donnĂ©es API ErrorCode est une chaĂźne JSON de quatre caractĂšres, composĂ©e uniquement de chiffres. Les nombres nĂ©gatifs ne sont pas autorisĂ©s. Un zĂ©ro initial nâest pas permis.
# Expression réguliÚre
Lâexpression rĂ©guliĂšre limitant le type ErrorCode apparaĂźt Ă la Liste 18.
# Liste 18
^[1-9]\d{3}$
Liste 18 -- Expression réguliÚre pour le type de données ErrorCode
# TokenCode
Le type de donnĂ©es API TokenCode est une chaĂźne JSON comprise entre quatre et 32 caractĂšres. Elle peut ĂȘtre composĂ©e de chiffres, de lettres majuscules (A Ă Z), de lettres minuscules (a Ă z), ou dâune combinaison des trois.
# 7.2.9.1 Expression réguliÚre
Lâexpression rĂ©guliĂšre limitant le type TokenCode apparaĂźt Ă la Liste 19.
# Liste 19
^[0-9a-zA-Z]{4,32}$
Liste 19 -- Expression réguliÚre pour le type de données TokenCode
# MerchantClassificationCode
Le type de données API MerchantClassificationCode est une chaßne JSON composée de un à quatre chiffres.
# 7.2.10.1 Expression réguliÚre
Lâexpression rĂ©guliĂšre limitant le type MerchantClassificationCode apparaĂźt Ă la Liste 20.
# Liste 20
^[\d]{1,4}$
Liste 20 -- Expression réguliÚre pour le type de données MerchantClassificationCode
# Latitude
Le type de donnĂ©es API Latitude est une chaĂźne JSON au format lexical restreinte par une expression rĂ©guliĂšre pour des raisons dâinteropĂ©rabilitĂ©.
# 7.2.11.1 Expression réguliÚre
Lâexpression rĂ©guliĂšre limitant le type Latitude apparaĂźt Ă la Liste 21.
# Liste 21
^(\+|-)?(?:90(?:(?:\.0{1,6})?)|(?:[0-9]|[1-8][0-9])(?:(?:\.[0-9]{1,6})?))$
Liste 21 -- Expression réguliÚre pour le type de données Latitude
# Longitude
Le type de donnĂ©es API Longitude est une chaĂźne JSON au format lexical restreinte par une expression rĂ©guliĂšre pour des raisons dâinteropĂ©rabilitĂ©.
# 7.2.12.1 Expression réguliÚre
Lâexpression rĂ©guliĂšre limitant le type Longitude apparaĂźt Ă la Liste 22.
# Liste 22
^(\+|-)?(?:180(?:(?:\.0{1,6})?)|(?:[0-9]|[1-9][0-9]|1[0-7][0-9])(?:(?:\.[0-9]{1,6})?))$
Liste 22 -- Expression réguliÚre pour le type de données Longitude
# Amount
Le type de donnĂ©es API Amount est une chaĂźne JSON au format canonique restreinte par une expression rĂ©guliĂšre pour des raisons dâinteropĂ©rabilitĂ©.
# Expression réguliÚre
Lâexpression rĂ©guliĂšre limitant le type Amount apparaĂźt Ă la Liste 23. Ce motif nâautorise aucune dĂ©cimale finale Ă zĂ©ro, mais autorise un montant sans unitĂ© monĂ©taire mineure. Il permet Ă©galement uniquement quatre chiffres dans lâunitĂ© monĂ©taire mineure ; une valeur nĂ©gative nâest pas acceptĂ©e. Lâutilisation de plus de 18 chiffres dans lâunitĂ© monĂ©taire majeure nâest pas acceptĂ©e.
# Liste 23
^([0]|([1-9][0-9]{0,17}))([.][0-9]{0,3}[1-9])?$
Liste 23 -- Expression réguliÚre pour le type de données Amount
# Exemples de valeurs
Consultez le Tableau 45 pour les rĂ©sultats de validation pour quelques exemples de valeurs Amount Ă lâaide de lâexpression rĂ©guliĂšre.
# Tableau 45
| Valeur | Résultat de validation |
|---|---|
| 5 | Acceptée |
| 5.0 | Rejetée |
| 5. | Rejetée |
| 5.00 | Rejetée |
| 5.5 | Acceptée |
| 5.50 | Rejetée |
| 5.5555 | Acceptée |
| 5.55555 | Rejetée |
| 555555555555555555 | Acceptée |
| 5555555555555555555 | Rejetée |
| -5.5 | Rejetée |
| 0.5 | Acceptée |
| .5 | Rejetée |
| 00.5 | Rejetée |
| 0 | Acceptée |
Tableau 45 -- Exemples de résultats pour différentes valeurs du type Amount
# DateTime
Le type de donnĂ©es API DateTime est une chaĂźne JSON au format lexical qui est restreinte par une expression rĂ©guliĂšre pour des raisons dâinteropĂ©rabilitĂ©.
# 7.2.14.1 Expression RéguliÚre
Lâexpression rĂ©guliĂšre limitant le type DateTime apparaĂźt Ă la Liste 24. Le format est conforme Ă lâISO 8601, exprimĂ© en une date, une heure et un fuseau horaire combinĂ©s. Une version plus lisible du format est :
aaaa-MM-jjTHH:mm:ss.SSS[-HH:MM]
# Liste 24
^(?:[1-9]\d{3}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1\d|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[1-9]\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468\][048]|[13579][26])00)-02-29)T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:(\.\d{3}))(?:Z|[+-][01]\d:[0-5]\d)$
Liste 24 -- Expression réguliÚre pour le type de données DateTime
# Exemples
Deux exemples du type DateTime apparaissent ci-dessous :
2016-05-24T08:38:08.699-04:00
2016-05-24T08:38:08.699Z (oĂč Z indique le fuseau horaire Zulu, identique Ă UTC).
# Date
Le type de donnĂ©es API Date est une chaĂźne JSON au format lexical restreinte par une expression rĂ©guliĂšre pour garantir lâinteropĂ©rabilitĂ©.
# Expression RéguliÚre
Lâexpression rĂ©guliĂšre restreignant le type Date apparaĂźt Ă la Liste 25. Ce format, tel que spĂ©cifiĂ© dans la norme ISO 8601, contient uniquement une date. Une version plus lisible est aaaa-MM-jj.
# Liste 25
^(?:[1-9]\d{3}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1\d|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[1-9]\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)-02-29)$
Liste 25 -- Expression réguliÚre pour le type de données Date
# Exemples
Deux exemples de type Date apparaissent ci-dessous :
1982-05-23
1987-08-05
# UUID
Le type de donnĂ©es API UUID (Identifiant Unique Universel) est une chaĂźne JSON au format canonique, conforme Ă la RFC 4122, restreinte par une expression rĂ©guliĂšre pour garantir lâinteropĂ©rabilitĂ©. Un UUID fait toujours 36 caractĂšres de long, soit 32 caractĂšres hexadĂ©cimaux et quatre tirets (« - »).
# 7.2.16.1 Expression RéguliÚre
Lâexpression rĂ©guliĂšre restreignant le type UUID figure Ă la Liste 26.
# Liste 26
^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
Liste 26 -- Expression réguliÚre pour le type de données UUID
# Exemple
Un exemple de type UUIDÂ :
- a8323bc6-c228-4df2-ae82-e5a997baf898
# BinaryString
Le type de donnĂ©es API BinaryString est une chaĂźne JSON. La chaĂźne est un encodage base64url dâune sĂ©quence dâoctets bruts, oĂč un caractĂšre de bourrage (â=â) est ajoutĂ© Ă la fin des donnĂ©es si besoin afin de garantir que la chaĂźne est un multiple de quatre caractĂšres. La contrainte de longueur indique le nombre de caractĂšres autorisĂ©s.
# Expression RéguliÚre
Lâexpression rĂ©guliĂšre limitant le type BinaryString apparaĂźt Ă la Liste 27.
# Liste 27
^[A-Za-z0-9-_]+[=]{0,2}$
Liste 27 -- Expression réguliÚre pour le type de données BinaryString
# Exemple de format
BinaryString(32) â 32 octets de donnĂ©es encodĂ©s en base64url.
Un exemple de BinaryString(32..256) figure ci-dessous. Notez quâun caractĂšre de bourrage '=' a Ă©tĂ© ajoutĂ© pour garantir que la chaĂźne soit un multiple de quatre caractĂšres.
- QmlsbCAmIE1lbGluZGEgR2F0ZXMgRm91bmRhdGlvbiE=
# BinaryString32
Le type de donnĂ©es API BinaryString32 est une version Ă taille fixe du type de donnĂ©es API BinaryString dĂ©fini plus haut, oĂč les donnĂ©es sont toujours de 32 octets. BinaryString32 ne doit pas utiliser de caractĂšre de bourrage puisque la taille des donnĂ©es sous-jacentes est fixe.
# Expression RéguliÚre
Lâexpression rĂ©guliĂšre limitant le type BinaryString32 apparaĂźt Ă la Liste 28.
# Liste 28
^[A-Za-z0-9-_]{43}$
Liste 28 -- Expression réguliÚre pour le type de données BinaryString32
# Exemple de format
BinaryString(32) â 32 octets de donnĂ©es encodĂ©s en base64url.
Un exemple de BinaryString32 figure ci-dessous. Il sâagit des mĂȘmes donnĂ©es binaires que dans lâexemple du format dâexemple du type BinaryString, mais comme la taille sous-jacente est fixe, le caractĂšre de bourrage '=' est exclu.
QmlsbCAmIE1lbGluZGEgR2F0ZXMgRm91bmRhdGlvbiE
# Définitions des éléments
Cette section dĂ©finit les types dâĂ©lĂ©ments utilisĂ©s par lâAPI.
# ĂlĂ©ment AmountType
Le tableau 46 ci-dessous prĂ©sente le modĂšle de donnĂ©es pour lâĂ©lĂ©ment AmountType.
# Tableau 46
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| AmountType | 1 | Enum de String(1..32) | Cet Ă©lĂ©ment contient le type de montant. Voir lâĂ©numĂ©ration AmountType pour plus dâinformations sur les valeurs autorisĂ©es. |
Tableau 46 â ĂlĂ©ment AmountType
# ĂlĂ©ment AuthenticationType
Le tableau 47 ci-dessous prĂ©sente le modĂšle de donnĂ©es pour lâĂ©lĂ©ment AuthenticationType.
# Tableau 47
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| Authentication | 1 | Enum de String(1..32) | Cet Ă©lĂ©ment contient le type dâauthentification. Voir lâĂ©numĂ©ration AuthenticationType pour les valeurs possibles. |
Tableau 47 â ĂlĂ©ment AuthenticationType
# ĂlĂ©ment AuthenticationValue
Le tableau 48 ci-dessous prĂ©sente le modĂšle de donnĂ©es pour lâĂ©lĂ©ment AuthenticationValue.
# Tableau 48
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| AuthenticationValue | 1 | DĂ©pend de AuthenticationType. Si OTP : le type est Integer(1..6). Par exemple : 123456OtpValue Si QRCODE : le type est String(1..64) | Cet Ă©lĂ©ment contient la valeur dâauthentification. Le format dĂ©pend du type dâauthentification utilisĂ© dans le type complexe AuthenticationInfo. |
Tableau 48 â ĂlĂ©ment AuthenticationValue
# ĂlĂ©ment AuthorizationResponse
Le tableau 49 ci-dessous prĂ©sente le modĂšle de donnĂ©es pour lâĂ©lĂ©ment AuthorizationResponse.
# Tableau 49
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| AuthorizationResponse | 1 | Enum de String(1..32) | Cet Ă©lĂ©ment contient la rĂ©ponse dâautorisation. Voir lâĂ©numĂ©ration AuthorizationResponse pour les valeurs possibles. |
Tableau 49 â ĂlĂ©ment AuthorizationResponse
# ĂlĂ©ment BalanceOfPayments
Le tableau 50 ci-dessous prĂ©sente le modĂšle de donnĂ©es pour lâĂ©lĂ©ment BalanceOfPayment.
# Tableau 50
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| BalanceOfPayments | 1 | BopCode | Les valeurs et significations possibles sont définies dans https://www.imf.org/external/np/sta/bopcode/ (opens new window) |
Tableau 50 â ĂlĂ©ment BalanceOfPayments
# ĂlĂ©ment BulkTransferState
Le tableau 51 ci-dessous prĂ©sente le modĂšle de donnĂ©es pour lâĂ©lĂ©ment BulkTransferState.
# Tableau 51
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| BulkTransferState | 1 | Enum de String(1..32) | Voir lâĂ©numĂ©ration BulkTransferState pour connaĂźtre les valeurs autorisĂ©es. |
Tableau 51 â ĂlĂ©ment BulkTransferState
# ĂlĂ©ment Code
Le tableau 52 ci-dessous prĂ©sente le modĂšle de donnĂ©es pour lâĂ©lĂ©ment Code.
# Tableau 52
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| Code | 1 | TokenCode | Tout code/jeton retournĂ© par lâIFP bĂ©nĂ©ficiaire. |
Tableau 52 â ĂlĂ©ment Code
# ĂlĂ©ment CorrelationId
Le tableau 53 ci-dessous prĂ©sente le modĂšle de donnĂ©es pour lâĂ©lĂ©ment CorrelationId.
# Tableau 53
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| CorrelationId | 1 | UUID | Identifiant permettant de corrĂ©ler tous les messages dâune mĂȘme sĂ©quence. |
Tableau 53 â ĂlĂ©ment CorrelationId
# ĂlĂ©ment Currency
Le tableau 54 ci-dessous prĂ©sente le modĂšle de donnĂ©es pour lâĂ©lĂ©ment Currency.
# Tableau 54
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| Currency | 1 | Enum de String(3) | Voir lâĂ©numĂ©ration Currency pour plus dâinformations sur les valeurs autorisĂ©es. |
Tableau 54 â ĂlĂ©ment Currency
# ĂlĂ©ment DateOfBirth
Le tableau 55 ci-dessous prĂ©sente le modĂšle de donnĂ©es pour lâĂ©lĂ©ment DateOfBirth.
# Tableau 55
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| DateOfBirth | 1 | Exemples Deux exemples du type DateTime figurent ci-dessous : 2016-05-24T08:38:08.699-04:00 2016-05-24T08:38:08.699Z (oĂč Z indique le fuseau Zulu, Ă©quivalent Ă UTC). Date | Date de naissance du participant. |
Tableau 55 â ĂlĂ©ment DateOfBirth
# ĂlĂ©ment ErrorCode
Le tableau 56 ci-dessous prĂ©sente le modĂšle de donnĂ©es pour lâĂ©lĂ©ment ErrorCode.
# Tableau 56
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| ErrorCode | 1 | ErrorCode | Code dâerreur Ă quatre chiffres, voir la section sur les Codes dâerreur pour plus dâinformations. |
Tableau 56 â ĂlĂ©ment ErrorCode
# ĂlĂ©ment ErrorDescription
Le tableau 57 ci-dessous prĂ©sente le modĂšle de donnĂ©es pour lâĂ©lĂ©ment ErrorDescription.
# Tableau 57
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| ErrorDescription | 1 | String(1..128) | Description de lâerreur. |
Tableau 57 â ĂlĂ©ment ErrorDescription
# ĂlĂ©ment ExtensionKey
Le tableau 58 ci-dessous prĂ©sente le modĂšle de donnĂ©es pour lâĂ©lĂ©ment ExtensionKey.
# Tableau 58
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| ExtensionKey | 1 | String(1..32) | La clĂ© de lâextension. |
Tableau 58 â ĂlĂ©ment ExtensionKey
# ĂlĂ©ment ExtensionValue
Le tableau 59 ci-dessous prĂ©sente le modĂšle de donnĂ©es pour lâĂ©lĂ©ment ExtensionValue.
# Tableau 59
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| ExtensionValue | 1 | String(1..128) | La valeur de lâextension. |
Tableau 59 â ĂlĂ©ment ExtensionValue
# ĂlĂ©ment FirstName
Le tableau 60 ci-dessous prĂ©sente le modĂšle de donnĂ©es pour lâĂ©lĂ©ment FirstName.
# Tableau 60
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| FirstName | 1 | Name | Prénom du participant |
Tableau 60 â ĂlĂ©ment FirstName
# ĂlĂ©ment FspId
Le tableau 61 ci-dessous prĂ©sente le modĂšle de donnĂ©es pour lâĂ©lĂ©ment FspId.
# Tableau 61
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| FspId | 1 | String(1..32) | Identifiant de lâIFP (Institution FinanciĂšre de Paiement). |
Tableau 61 â ĂlĂ©ment FspId
# ĂlĂ©ment IlpCondition
Le tableau 62 ci-dessous prĂ©sente le modĂšle de donnĂ©es pour lâĂ©lĂ©ment IlpCondition.
# Tableau 62
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| IlpCondition | 1 | BinaryString32 | Condition qui doit ĂȘtre jointe au transfert par le Payeur. |
Tableau 62 â ĂlĂ©ment IlpCondition
# ĂlĂ©ment IlpFulfilment
Le tableau 63 ci-dessous prĂ©sente le modĂšle de donnĂ©es pour lâĂ©lĂ©ment IlpFulfilment.
# Tableau 63
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| IlpFulfilment | 1 | BinaryString32 | ExĂ©cution qui doit ĂȘtre jointe au transfert par le BĂ©nĂ©ficiaire. |
Tableau 63 â ĂlĂ©ment IlpFulfilment
# ĂlĂ©ment IlpPacket
Le tableau 64 ci-dessous prĂ©sente le modĂšle de donnĂ©es pour lâĂ©lĂ©ment IlpPacket.
# Tableau 64
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| IlpPacket | 1 | Exemple Un exemple de type UUIDÂ : a8323bc6-c228-4df2-ae82-e5a997baf898 | Informations pour le destinataire (informations de niveau transport). |
Tableau 64 â ĂlĂ©ment IlpPacket
# ĂlĂ©ment LastName
Le tableau 65 ci-dessous prĂ©sente le modĂšle de donnĂ©es pour lâĂ©lĂ©ment LastName.
# Tableau 65
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| LastName | 1 | Name | Nom de famille du participant (définition ISO 20022). |
Tableau 65 â ĂlĂ©ment LastName
# ĂlĂ©ment MerchantClassificationCode
Le tableau 66 ci-dessous prĂ©sente le modĂšle de donnĂ©es pour lâĂ©lĂ©ment MerchantClassificationCode.
# Tableau 66
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| MerchantClassificationCode | 1 | MerchantClassificationCode | Un ensemble limitĂ© de numĂ©ros prĂ©dĂ©finis. Cette liste identifie des types de marchands populaires comme frais dâĂ©cole, bars et restaurants, Ă©piceries, etc. |
Tableau 66 â ĂlĂ©ment MerchantClassificationCode
# ĂlĂ©ment MiddleName
Le tableau 67 ci-dessous prĂ©sente le modĂšle de donnĂ©es pour lâĂ©lĂ©ment MiddleName.
# Tableau 67
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| MiddleName | 1 | Name | DeuxiÚme prénom du participant (définition ISO 20022). |
Tableau 67 â ĂlĂ©ment MiddleName
# ĂlĂ©ment Note
Le tableau 68 ci-dessous prĂ©sente le modĂšle de donnĂ©es pour lâĂ©lĂ©ment Note.
# Tableau 68
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| Note | 1 | String(1..128) | Mémo ou libellé affecté à la transaction. |
Tableau 68 â ĂlĂ©ment Note
# ĂlĂ©ment PartyIdentifier
Le tableau 69 ci-dessous prĂ©sente le modĂšle de donnĂ©es pour lâĂ©lĂ©ment PartyIdentifier.
# Tableau 69
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| PartyIdentifier | 1 | String(1..128) | Identifiant du participant. |
Tableau 69 â ĂlĂ©ment PartyIdentifier
# ĂlĂ©ment PartyIdType
Le tableau 70 ci-dessous prĂ©sente le modĂšle de donnĂ©es pour lâĂ©lĂ©ment PartyIdType.
# Tableau 70
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| PartyIdType | 1 | Enum de String(1..32) | Voir lâĂ©numĂ©ration PartyIdType pour plus dâinformations sur les valeurs autorisĂ©es. |
Tableau 70 â ĂlĂ©ment PartyIdType
# ĂlĂ©ment PartyName
Le tableau 71 ci-dessous prĂ©sente le modĂšle de donnĂ©es pour lâĂ©lĂ©ment PartyName.
# Tableau 71
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| PartyName | 1 | Name | Nom du participant. Peut ĂȘtre un vrai nom ou un surnom. |
Tableau 71 â ĂlĂ©ment PartyName
# ĂlĂ©ment PartySubIdOrType
Le tableau 72 ci-dessous prĂ©sente le modĂšle de donnĂ©es pour lâĂ©lĂ©ment PartySubIdOrType.
# Tableau 72
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| PartySubIdOrType | 1 | String(1..128) | Un sous-identifiant dâun PartyIdentifier ou un sous-type du PartyIdType, souvent un PersonalIdentifierType. |
Tableau 72 â ĂlĂ©ment PartySubIdOrType
# ĂlĂ©ment RefundReason
Le tableau 73 ci-dessous prĂ©sente le modĂšle de donnĂ©es pour lâĂ©lĂ©ment RefundReason.
# Tableau 73
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| RefundReason | 1 | String(1..128) | Raison du remboursement. |
Tableau 73 â ĂlĂ©ment RefundReason
# ĂlĂ©ment TransactionInitiator
Le tableau 74 ci-dessous prĂ©sente le modĂšle de donnĂ©es pour lâĂ©lĂ©ment TransactionInitiator.
# Tableau 74
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| TransactionInitiator | 1 | Enum de String(1..32) | Voir lâĂ©numĂ©ration TransactionInitiator pour plus dâinformations sur les valeurs autorisĂ©es. |
Tableau 74 â ĂlĂ©ment TransactionInitiator
# ĂlĂ©ment TransactionInitiatorType
Le tableau 75 ci-dessous prĂ©sente le modĂšle de donnĂ©es pour lâĂ©lĂ©ment TransactionInitiatorType.
# Tableau 75
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| TransactionInitiatorType | 1 | Enum de String(1..32) | Voir lâĂ©numĂ©ration TransactionInitiatorType pour plus dâinformations sur les valeurs autorisĂ©es. |
Tableau 75 â ĂlĂ©ment TransactionInitiatorType
# ĂlĂ©ment TransactionRequestState
Le tableau 76 ci-dessous prĂ©sente le modĂšle de donnĂ©es pour lâĂ©lĂ©ment TransactionRequestState.
# Tableau 76
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| TransactionRequestState | 1 | Enum de String(1..32) | Voir lâĂ©numĂ©ration TransactionRequestState pour plus dâinformations sur les valeurs autorisĂ©es. |
Tableau 76 â ĂlĂ©ment TransactionRequestState
# ĂlĂ©ment TransactionScenario
Le tableau 77 ci-dessous prĂ©sente le modĂšle de donnĂ©es pour lâĂ©lĂ©ment TransactionScenario.
# Tableau 77
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| TransactionScenario | 1 | Enum de String(1..32) | Voir lâĂ©numĂ©ration TransactionScenario pour plus dâinformations sur les valeurs autorisĂ©es. |
Tableau 77 â ĂlĂ©ment TransactionScenario
# ĂlĂ©ment TransactionState
Le tableau 78 ci-dessous prĂ©sente le modĂšle de donnĂ©es pour lâĂ©lĂ©ment TransactionState.
# Tableau 78
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| TransactionState | 1 | Enum de String(1..32) | Voir lâĂ©numĂ©ration TransactionState pour plus dâinformations sur les valeurs autorisĂ©es. |
Tableau 78 â ĂlĂ©ment TransactionState
# ĂlĂ©ment TransactionSubScenario
Le tableau 79 ci-dessous prĂ©sente le modĂšle de donnĂ©es pour lâĂ©lĂ©ment TransactionSubScenario.
# Tableau 79
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| TransactionSubScenario | 1 | UndefinedEnum | Sous-scénario possible, défini localement au sein du systÚme. |
Tableau 79 â ĂlĂ©ment TransactionSubScenario
# ĂlĂ©ment TransferState
Le tableau 80 ci-dessous prĂ©sente le modĂšle de donnĂ©es pour lâĂ©lĂ©ment TransferState.
# Tableau 80
| Nom | Cardinalité | Type | Description |
|---|---|---|---|
| TransactionState | 1 | Enum de String(1..32) | Voir lâĂ©numĂ©ration TransferState pour plus dâinformations sur les valeurs autorisĂ©es. |
Tableau 80 â ĂlĂ©ment TransferState
# Types Complexes
Cette section dĂ©crit les types complexes utilisĂ©s par lâAPI.
# AuthenticationInfo
Le tableau 81 présente le modÚle de données pour le type complexe AuthenticationInfo.
# Tableau 81
| Nom | Cardinalité | Format | Description |
|---|---|---|---|
| authentication | 1 | AuthenticationType | Type dâauthentification. |
| authenticationValue | 1 | AuthenticationValue | Valeur dâauthentification. |
Tableau 81 -- Type complexe AuthenticationInfo
# ErrorInformation
Le tableau 82 présente le modÚle de données pour le type complexe ErrorInformation.
# Tableau 82
| Nom | Cardinalité | Format | Description |
|---|---|---|---|
| errorCode | 1 | Errorcode | NumĂ©ro dâerreur spĂ©cifique. |
| errorDescription | 1 | ErrorDescription | ChaĂźne dĂ©crivant lâerreur. |
| extensionList | 1 | ExtensionList | Liste facultative dâextensions, spĂ©cifique au dĂ©ploiement. |
Tableau 82 -- Type complexe ErrorInformation
# Extension
Le tableau 83 présente le modÚle de données pour le type complexe Extension.
# Tableau 83
| Nom | Cardinalité | Format | Description |
|---|---|---|---|
| key | 1 | ExtensionKey | ClĂ© dâextension. |
| value | 1 | ExtensionValue | Valeur de lâextension. |
Tableau 83 -- Type complexe Extension
# ExtensionList
Le tableau 84 présente le modÚle de données pour le type complexe ExtensionList.
# Tableau 84
| Nom | Cardinalité | Format | Description |
|---|---|---|---|
| extension | 1..16 | Extension | Nombre dâĂ©lĂ©ments Extension. |
Tableau 84 -- Type complexe ExtensionList
# IndividualQuote
Le tableau 85 présente le modÚle de données pour le type complexe IndividualQuote.
# Tableau 85
| Nom | Cardinalité | Format | Description |
|---|---|---|---|
| quoteId | 1 | CorrelationId | Identifie le message du devis. |
| transactionId | 1 | CorrelationId | Identifie le message de transaction. |
| payee | 1 | Party | Informations concernant le bénéficiaire dans la transaction financiÚre proposée. |
| amountType | 1 | AmountType | SEND pour le montant envoyé, RECEIVE pour le montant à recevoir. |
| amount | 1 | Money | Selon amountType : Si SEND : montant que le payeur souhaite envoyer, câest-Ă -dire le montant Ă dĂ©biter y compris les frais. Le montant est mis Ă jour par chaque entitĂ© participante. Si RECEIVE : montant Ă recevoir par le bĂ©nĂ©ficiaire (hors frais). Le montant nâest pas mis Ă jour par les entitĂ©s participantes. |
| fees | 0..1 | Money | Frais de la transaction.
|
| transactionType | 1 | TransactionType | Type de transaction pour laquelle le devis est demandé. |
| note | 0..1 | Note | Mémo joint à la transaction. |
| extensionList | 0..1 | ExtensionList | Extension facultative, spécifique au déploiement. |
Tableau 85 -- Type complexe IndividualQuote
# IndividualQuoteResult
Le tableau 86 présente le modÚle de données pour le type complexe IndividualQuoteResult.
# Tableau 86
| Nom | Cardinalité | Format | Description |
|---|---|---|---|
| quoteId | 1 | CorrelationId | Identifie le message du devis. |
| payee | 0..1 | Party | Informations sur le bénéficiaire dans la transaction financiÚre proposée. |
| transferAmount | 0..1 | Money | Montant que le FSP du Payeur doit transférer au FSP du Bénéficiaire. |
| payeeReceiveAmount | 0..1 | Money | Montant que le Bénéficiaire devra recevoir au final. Facultatif si le FSP du Bénéficiaire ne souhaite pas divulguer de frais optionnels. |
| payeeFspFee | 0..1 | Money | Part des frais de transaction du FSP du Bénéficiaire. |
| payeeFspCommission | 0..1 | Money | Commission de transaction du FSP du Bénéficiaire. |
| ilpPacket | 0..1 | IlpPacket | Paquet ILP Ă joindre au transfert par le Payeur. |
| condition | 0..1 | IlpCondition | Condition Ă joindre au transfert par le Payeur. |
| errorInformation | 0..1 | ErrorInformation | Code dâerreur, description de la catĂ©gorie. Remarque : Les paramĂštres payee, transferAmount, payeeReceiveAmount, payeeFspFee, payeeFspCommission, ilpPacket et condition ne doivent pas ĂȘtre dĂ©finis si errorInformation est renseignĂ©. |
| extensionList | 0..1 | ExtensionList | Extension facultative, spécifique au déploiement. |
Tableau 86 -- Type complexe IndividualQuoteResult
# IndividualTransfer
Le tableau 87 présente le modÚle de données pour le type complexe IndividualTransfer.
# Tableau 87
| Nom | Cardinalité | Format | Description |
|---|---|---|---|
| transferId | 1 | CorrelationId | Identifie les messages liĂ©s Ă la mĂȘme sĂ©quence /transfers. |
| transferAmount | 1 | Money | Montant de la transaction Ă envoyer. |
| ilpPacket | 1 | IlpPacket | Paquet ILP contenant le montant destinĂ© au bĂ©nĂ©ficiaire, lâadresse ILP du bĂ©nĂ©ficiaire et toutes donnĂ©es end-to-end. |
| condition | 1 | IlpCondition | Condition qui doit ĂȘtre remplie pour engager le transfert. |
| extensionList | 0..1 | ExtensionList | Extension facultative, spécifique au déploiement. |
Tableau 87 -- Type complexe IndividualTransfer
# IndividualTransferResult
Le tableau 88 présente le modÚle de données pour le type complexe IndividualTransferResult.
# Tableau 88
| Nom | Cardinalité | Format | Description |
|---|---|---|---|
| transferId | 1 | CorrelationId | Identifie les messages liĂ©s Ă la mĂȘme sĂ©quence /transfers. |
| fulfilment | 0..1 | IlpFulfilment | Fulfilment (preuve) de la condition dĂ©finie avec la transaction. Remarque : Soit fulfilment, soit errorInformation doit ĂȘtre renseignĂ©, jamais les deux. |
| errorInformation | 0..1 | ErrorInformation | Si le transfert est REJECTED, les informations dâerreur peuvent ĂȘtre fournies. Remarque : Soit fulfilment, soit errorInformation doit ĂȘtre renseignĂ©, jamais les deux. |
| extensionList | 0..1 | ExtensionList | Extension facultative, spécifique au déploiement. |
Tableau 88 -- Type complexe IndividualTransferResult
# GeoCode
Le tableau 89 présente le modÚle de données pour le type complexe GeoCode.
# Tableau 89
| Nom | Cardinalité | Format | Description |
|---|---|---|---|
| latitude | 1 | Latitude | Latitude de la Partie. |
| longitude | 1 | Longitude | Longitude de la Partie. |
Tableau 89 -- Type complexe GeoCode
# Money
Le tableau 90 présente le modÚle de données pour le type complexe Money.
# Tableau 90
| Nom | Cardinalité | Format | Description |
|---|---|---|---|
| currency | 1 | Currency | Devise du montant. |
| amount | 1 | Amount | Montant dâargent. |
Tableau 90 -- Type complexe Money
# Party
Le tableau 91 présente le modÚle de données pour le type complexe Party.
# Tableau 91
| Nom | Cardinalité | Format | Description |
|---|---|---|---|
| partyIdInfo | 1 | PartyIdInfo | Type dâid de la Partie, id, sous-id ou type, et FSP Id. |
| merchantClassificationCode | 0..1 | MerchantClassificationCode | Utilisé pour la partie Bénéficiaire marchande. |
| name | 0..1 | PartyName | Nom affichĂ© de la Partie, peut ĂȘtre un nom rĂ©el ou un pseudo. |
| personalInfo | 0..1 | PartyPersonalInfo | Informations personnelles pour vĂ©rifier lâidentitĂ© de la Partie (nom, prĂ©nom, date de naissance, etc.). |
Tableau 91 -- Type complexe Party
# PartyComplexName
Le tableau 92 présente le modÚle de données pour le type complexe PartyComplexName.
# Tableau 92
| Nom | Cardinalité | Format | Description |
|---|---|---|---|
| firstName | 0..1 | FirstName | Prénom de la Partie. |
| middleName | 0..1 | MiddleName | DeuxiÚme prénom de la Partie. |
| lastName | 0..1 | LastName | Nom de famille de la Partie. |
Tableau 92 -- Type complexe PartyComplexName
# PartyIdInfo
Le tableau 93 présente le modÚle de données pour le type complexe PartyIdInfo.
# Tableau 93
| Nom | Cardinalité | Format | Description |
|---|---|---|---|
| partyIdType | 1 | PartyIdType | Type dâidentifiant. |
| partyIdentifier | 1 | PartyIdentifier | Identifiant de la Partie. |
| partySubIdOrType | 0..1 | PartySubIdOrType | Sous-identifiant ou sous-type pour la Partie. |
| fspId | 0..1 | FspId | Identifiant FSP (si connu). |
| extensionList | 0..1 | ExtensionList | Extension facultative, spécifique au déploiement. |
Tableau 93 -- Type complexe PartyIdInfo
# PartyPersonalInfo
Le tableau 94 présente le modÚle de données pour le type complexe PartyPersonalInfo.
# Tableau 94
| Nom | Cardinalité | Format | Description |
|---|---|---|---|
| complexName | 0..1 | PartyComplexName | Prénom, deuxiÚme prénom et nom de famille de la Partie. |
| dateOfBirth | 0..1 | DateOfBirth | Date de naissance de la Partie. |
Tableau 94 -- Type complexe PartyPersonalInfo
# PartyResult
Le tableau 95 présente le modÚle de données pour le type complexe PartyResult.
# Tableau 95
| Nom | Cardinalité | Format | Description |
|---|---|---|---|
| partyId | 1 | PartyIdInfo | Type dâid de la Partie, id, sous-id ou type, et FSP Id. |
| errorInformation | 0..1 | ErrorInformation | Si la Partie nâa pas pu ĂȘtre ajoutĂ©e, une information dâerreur doit ĂȘtre fournie. Sinon, ce paramĂštre doit ĂȘtre vide pour indiquer le succĂšs. |
Tableau 95 -- Type complexe PartyResult
# Refund
Le tableau 96 présente le modÚle de données pour le type complexe Refund.
# Tableau 96
| Nom | Cardinalité | Format | Description |
|---|---|---|---|
| originalTransactionId | 1 | CorrelationId | RĂ©fĂ©rence Ă lâID de la transaction dâorigine Ă rembourser. |
| refundReason | 0..1 | RefundReason | Texte libre précisant la raison du remboursement. |
Tableau 96 -- Type complexe Refund
# Transaction
Le tableau 97 présente le modÚle de données pour le type complexe Transaction. Le type Transaction sert à véhiculer des données de bout en bout entre le FSP Payeur et le FSP Bénéficiaire dans le paquet ILP, voir IlpPacket. Les champs transactionId et quoteId sont décidés par le FSP Payeur lors du POST /quotes, voir Tableau 23.
# Tableau 97
| Nom | Cardinalité | Format | Description |
|---|---|---|---|
| transactionId | 1 | CorrelationId | ID de la transaction, défini par le FSP Payeur lors de la création du devis. |
| quoteId | 1 | CorrelationId | ID du devis, défini par le FSP Payeur lors de la création du devis. |
| payee | 1 | Party | Informations sur le bénéficiaire dans la transaction proposée. |
| payer | 1 | Party | Informations sur le payeur dans la transaction proposée. |
| amount | 1 | Money | Montant de la transaction Ă envoyer. |
| transactionType | 1 | TransactionType | Type de la transaction. |
| note | 0..1 | Note | Mémo associé à la transaction, destiné au bénéficiaire. |
| extensionList | 0..1 | ExtensionList | Extension facultative, spécifique au déploiement. |
Tableau 97 -- Type complexe Transaction
# TransactionType
Le tableau 98 présente le modÚle de données pour le type complexe TransactionType.
# Tableau 98
| Nom | Cardinalité | Format | Description |
|---|---|---|---|
| scenario | 1 | TransactionScenario | DépÎt, retrait, remboursement, ... |
| subScenario | 0..1 | TransactionSubScenario | Sous-scénario éventuel, défini localement. |
| initiator | 1 | TransactionInitiator | Initiateur de la transaction : Payeur ou Bénéficiaire. |
| initiatorType | 1 | TransactionInitiatorType | Consommateur, agent, entreprise, ... |
| refundInfo | 0..1 | Refund | Informations supplémentaires particuliÚres pour les remboursements. à renseigner uniquement si le scénario est REFUND. |
| balanceOfPayments | 0..1 | BalanceOfPayments | Code Balance des Paiements. |
Tableau 98 -- Type complexe TransactionType
# ĂnumĂ©rations
Cette section prĂ©sente les Ă©numĂ©rations utilisĂ©es par lâAPI.
# AmountType enum
Le tableau 99 prĂ©sente les valeurs autorisĂ©es pour lâĂ©numĂ©ration AmountType.
# Tableau 99
| Nom | Description |
|---|---|
| SEND | Montant que le payeur souhaite envoyer ; câest-Ă -dire le montant Ă dĂ©biter, frais inclus. |
| RECEIVE | Montant que le payeur souhaite que le bĂ©nĂ©ficiaire reçoive, câest-Ă -dire montant crĂ©ditĂ© hors frais. |
Tableau 99 -- ĂnumĂ©ration AmountType
# AuthenticationType enum
Le tableau 100 prĂ©sente les valeurs autorisĂ©es pour lâĂ©numĂ©ration AuthenticationType.
# Tableau 100
| Nom | Description |
|---|---|
| OTP | Mot de passe à usage unique généré par le FSP du payeur. |
| QRCODE | Code QR utilisé comme mot de passe à usage unique. |
Tableau 100 -- ĂnumĂ©ration AuthenticationType
# AuthorizationResponse enum
Le tableau 101 prĂ©sente les valeurs autorisĂ©es pour lâĂ©numĂ©ration AuthorizationResponse.
# Tableau 101
| Nom | Description |
|---|---|
| ENTERED | Le consommateur a saisi la valeur dâauthentification. |
| REJECTED | Le consommateur a rejeté la transaction. |
| RESEND | Le consommateur demande de renvoyer la valeur dâauthentification. |
Tableau 101 -- ĂnumĂ©ration AuthorizationResponse
# BulkTransferState enum
Le tableau 102 prĂ©sente les valeurs autorisĂ©es pour lâĂ©numĂ©ration BulkTransferState.
# Tableau 102
| Nom | Description |
|---|---|
| RECEIVED | Le FSP bénéficiaire a reçu le transfert en lot du FSP payeur. |
| PENDING | Le FSP bénéficiaire a validé le transfert en lot. |
| ACCEPTED | Le FSP bénéficiaire a accepté le transfert en lot pour traitement. |
| PROCESSING | Le FSP bénéficiaire a commencé à transférer les fonds aux bénéficiaires. |
| COMPLETED | Le FSP bénéficiaire a terminé le transfert des fonds aux bénéficiaires. |
| REJECTED | Le FSP bénéficiaire a rejeté le traitement du transfert en lot. |
Tableau 102 -- ĂnumĂ©ration BulkTransferState
# Code devise (CurrencyCode) enum
Les codes de devise définis par la norme ISO 421736 sous forme de codes alphabétiques à trois lettres sont utilisés comme représentation standard des devises. Les codes ISO 4217 ne sont pas listés ici, les implémenteurs sont invités à se référer directement à la norme ISO 4217.
# PartyIdType enum
Le tableau 103 prĂ©sente les valeurs autorisĂ©es pour lâĂ©numĂ©ration PartyIdType.
# Tableau 103
| Nom | Description |
|---|---|
| MSISDN | Un MSISDN (numĂ©ro international de tĂ©lĂ©phone mobile) est utilisĂ© pour rĂ©fĂ©rencer une Partie. Il doit ĂȘtre au format E.164 ITU-T, Ă©ventuellement prĂ©cĂ©dĂ© dâun "+". |
| Une adresse email est utilisée pour référencer une Partie. Format selon RFC 3696. | |
| PERSONAL_ID | Un identifiant personnel (numĂ©ro de passeport, d'acte de naissance, dâenregistrement national, etc.) Pour le type voir PartySubIdOrType. |
| BUSINESS | Une entreprise spécifique (ex : société, organisation) est utilisée pour référencer un participant. Format libre. Pour cibler un identifiant spécifique (utilisateur, facture, etc.) utiliser PartySubIdOrType. |
| DEVICE | Un identifiant de dispositif spécifique (ex : TPE ou DAB) est utilisé pour une Partie. Pour une référence sous une entreprise, utiliser PartySubIdOrType. |
| ACCOUNT_ID | Un numĂ©ro de compte bancaire ou identifiant FSP doit ĂȘtre utilisĂ© pour rĂ©fĂ©rencer un participant. Format libre variant selon le pays et le FSP. |
| IBAN | Un numĂ©ro IBAN est utilisĂ© pour rĂ©fĂ©rencer un participant. JusquâĂ 34 caractĂšres alphanumĂ©riques sans espaces. |
| ALIAS | Un alias est utilisĂ© pour rĂ©fĂ©rencer un participant (ex : username/pseudo). Un sous-compte peut aussi ĂȘtre ciblĂ© via PartySubIdOrType. |
Tableau 103 -- ĂnumĂ©ration PartyIdType
# PersonalIdentifierType enum
Le tableau 104 prĂ©sente les valeurs autorisĂ©es pour lâĂ©numĂ©ration PersonalIdentifierType.
# Tableau 104
| Nom | Description |
|---|---|
| PASSPORT | Numéro de passeport. |
| NATIONAL_REGISTRATION | NumĂ©ro dâenregistrement national. |
| DRIVING_LICENSE | Permis de conduire. |
| ALIEN_REGISTRATION | NumĂ©ro dâenregistrement dâĂ©tranger. |
| NATIONAL_ID_CARD | NumĂ©ro de carte dâidentitĂ© nationale. |
| EMPLOYER_ID | NumĂ©ro dâidentification fiscale (employeur). |
| TAX_ID_NUMBER | NumĂ©ro dâidentification fiscale. |
| SENIOR_CITIZENS_CARD | Numéro de carte senior. |
| MARRIAGE_CERTIFICATE | NumĂ©ro dâacte de mariage. |
| HEALTH_CARD | Numéro de carte de santé. |
| VOTERS_ID | NumĂ©ro de carte dâĂ©lecteur. |
| UNITED_NATIONS | Numéro ONU. |
| OTHER_ID | Tout autre type dâidentifiant. |
Tableau 104 -- ĂnumĂ©ration PersonalIdentifierType
# TransactionInitiator
Le tableau 105 dĂ©crit les valeurs autorisĂ©es pour lâĂ©numĂ©ration TransactionInitiator.
# Tableau 105
| Nom | Description |
|---|---|
| PAYER | Le payeur initie la transaction. Le compte source lui appartient ou lui est associĂ© dâune maniĂšre ou dâune autre. |
| PAYEE | Le bénéficiaire initie la transaction en envoyant une demande de transaction. Le payeur doit approuver (automatiquement ou manuellement). |
Tableau 105 -- ĂnumĂ©ration TransactionInitiator
# TransactionInitiatorType
Le tableau 106 prĂ©sente les valeurs autorisĂ©es pour lâĂ©numĂ©ration TransactionInitiatorType.
# Tableau 106
| Nom | Description |
|---|---|
| CONSUMER | Le consommateur est lâinitiateur de la transaction. |
| AGENT | Lâagent est lâinitiateur de la transaction. |
| BUSINESS | Lâentreprise est lâinitiatrice de la transaction. |
| DEVICE | LâĂ©quipement est lâinitiateur de la transaction. |
Tableau 106 -- ĂnumĂ©ration TransactionInitiatorType
# TransactionRequestState
Le tableau 107 prĂ©sente les valeurs autorisĂ©es pour lâĂ©numĂ©ration TransactionRequestState.
# Tableau 107
| Nom | Description |
|---|---|
| RECEIVED | Le FSP du payeur a reçu la transaction du FSP du bénéficiaire. |
| PENDING | Le FSP du payeur a transmis la demande de transaction au payeur. |
| ACCEPTED | Le payeur a approuvé la transaction. |
| REJECTED | Le payeur a rejeté la transaction. |
Tableau 107 -- ĂnumĂ©ration TransactionRequestState
# TransactionScenario
Le tableau 108 prĂ©sente les valeurs autorisĂ©es pour lâĂ©numĂ©ration TransactionScenario.
# Tableau 108
| Nom | Description |
|---|---|
| DEPOSIT | Pour effectuer un dĂ©pĂŽt (cash-in) : transfert de fonds Ă©lectroniques vers le consommateur, remise dâespĂšces au commerçant. |
| WITHDRAWAL | Pour effectuer un retrait (cash-out) : transfert de fonds Ă©lectroniques au commerçant, remise dâespĂšces au client. |
| TRANSFER | Pour un transfert de personne Ă personne (P2P). |
| PAYMENT | Pour effectuer le paiement dâun consommateur Ă un commerçant ou une organisation, ou un paiement B2B. Peut concerner un achat en ligne, un paiement sur place, une facture, un don, etc. |
| REFUND | Pour effectuer un remboursement. |
Tableau 108 -- ĂnumĂ©ration TransactionScenario
# TransactionState
Le tableau 109 prĂ©sente les valeurs autorisĂ©es pour lâĂ©numĂ©ration TransactionState.
# Tableau 109
| Nom | Description |
|---|---|
| RECEIVED | Le FSP du bénéficiaire a reçu la transaction du FSP du payeur. |
| PENDING | Le FSP du bénéficiaire a validé la transaction. |
| COMPLETED | Le FSP du bénéficiaire a exécuté la transaction avec succÚs. |
| REJECTED | Le FSP du bénéficiaire a échoué à réaliser la transaction. |
Tableau 109 -- ĂnumĂ©ration TransactionState
# TransferState
Le tableau 110 prĂ©sente les valeurs autorisĂ©es pour lâĂ©numĂ©ration TransferState.
# Tableau 110
| Nom | Description |
|---|---|
| RECEIVED | Le ledger suivant a reçu le transfert. |
| RESERVED | Le ledger suivant a réservé le transfert. |
| COMMITTED | Le ledger suivant a validé le transfert. |
| ABORTED | Le ledger suivant a annulĂ© le transfert Ă cause dâun rejet ou dâun Ă©chec. |
Tableau 110 -- ĂnumĂ©ration TransferState
# Codes dâerreur
# Figure 63
Chaque code dâerreur de lâAPI est un nombre Ă quatre chiffres, par exemple 1234, oĂč le premier chiffre (1 ici) indique la catĂ©gorie dâerreur principale, le deuxiĂšme (2) la sous-catĂ©gorie, et les deux derniers (34) lâerreur spĂ©cifique. Figure 63 montre la structure dâun code dâerreur. Les sections suivantes dĂ©taillent les codes dâerreur dĂ©finis pour chaque catĂ©gorie.
Figure 63 -- Structure des codes dâerreur
Chaque combinaison de catĂ©gories principale et secondaire possĂšde une erreur gĂ©nĂ©rique (x0xx), utilisable sâil nâexiste pas dâerreur plus spĂ©cifique, ou si le serveur ne souhaite pas communiquer plus dâinformation.
Toutes les erreurs spĂ©cifiques infĂ©rieures Ă xx40 (câest-Ă -dire de xx00 Ă xx39) sont rĂ©servĂ©es Ă un usage ultĂ©rieur de lâAPI. Celles Ă partir de xx40 peuvent servir pour des besoins propres Ă un schĂ©ma. Si un client reçoit une erreur inconnue propre Ă un schĂ©ma, elle devra ĂȘtre traitĂ©e comme une erreur gĂ©nĂ©rique de la catĂ©gorie (xx00).
# Erreurs de communication -- 1_xxx_
Toutes les erreurs de communication ou rĂ©seau nâĂ©tant pas couvertes par un code HTTP doivent utiliser le code dâerreur principal 1 (codes 1xxx). Comme tous les services de lâAPI sont asynchrones, ces erreurs sont gĂ©nĂ©ralement Ă©mises par le Switch au client FSP si le FSP pair est injoignable ou si aucun callback nâest reçu dans le dĂ©lai convenu.
Sous-catégories pour les erreurs de communication :
- Erreur de communication générique -- 10xx
Voir Tableau 111 pour la liste des erreurs de ce type.
# Tableau 111
| Code dâerreur | Nom | Description | /participants | /parties | /transactionRequests | /quotes | /authorizations | /transfers | /transactions | /bulkQuotes | /bulkTransfers |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1000 | Erreur de communication | Erreur de communication générique. | X | X | X | X | X | X | X | X | X |
| 1001 | Erreur de communication destination | La destination de la requĂȘte nâa pas pu ĂȘtre jointe (Ă©chec de rĂ©ponse intermĂ©diaire). | X | X | X | X | X | X | X | X | X |
Tableau 111 -- Erreurs de communication -- 1_xxx_
# Erreurs serveur -- 2_xxx_
Toutes les erreurs survenues cĂŽtĂ© serveur oĂč ce dernier nâa pas pu satisfaire une requĂȘte apparemment valide du client utilisent la catĂ©gorie 2 (codes 2xxx). Ces erreurs signifient que le serveur est conscient dâavoir rencontrĂ© une erreur ou dâĂȘtre incapable de traiter la demande.
Sous-catégories pour les erreurs serveur :
- Erreur serveur générique -- 20xx
Voir Tableau 112 pour les erreurs serveur définies.
# Tableau 112
| Code dâerreur | Nom | Description | /participants | /parties | /transactionRequests | /quotes | /authorizations | /transfers | /transactions | /bulkQuotes | /bulkTransfers |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 2000 | Erreur serveur gĂ©nĂ©rique | Erreur serveur gĂ©nĂ©rique pour ne pas divulguer dâinformations privĂ©es. | X | X | X | X | X | X | X | X | X |
| 2001 | Erreur serveur interne | Exception inattendue générique (bug ou cas non géré). | X | X | X | X | X | X | X | X | X |
| 2002 | Non implémenté | Service demandé non supporté par le serveur. | X | X | X | X | X | X | X | X | X |
| 2003 | Service indisponible | Service demandé indisponible (maintenance, panne temporaire, etc.). | X | X | X | X | X | X | X | X | X |
| 2004 | Timeout serveur | Le serveur nâa pas reçu de callback dans le dĂ©lai imparti (timeout). | X | X | X | X | X | X | X | X | X |
| 2005 | Serveur surchargĂ© | Le serveur refuse les requĂȘtes pour surcharge. RĂ©essayez plus tard. | X | X | X | X | X | X | X | X | X |
Tableau 112 -- Erreurs serveur -- 2_xxx_
# Erreurs cÎté Client -- 3_xxx_
Toutes les erreurs possibles se produisant sur le serveur, oĂč ce dernier signale que le client a envoyĂ© un ou plusieurs paramĂštres erronĂ©s, doivent utiliser le code dâerreur principal 3 (codes dâerreur 3xxx). Ces codes dâerreur indiquent que le serveur nâa pas pu effectuer le service selon la demande du client. Le serveur doit fournir une explication sur la raison pour laquelle le service nâa pas pu ĂȘtre exĂ©cutĂ©.
Catégories de bas niveau définies sous les erreurs client :
Erreur Générique du Client -- 30xx
- Voir Tableau 113 pour la liste des erreurs gĂ©nĂ©riques cĂŽtĂ© client dĂ©finies dans lâAPI.
Erreur de Validation -- 31xx
- Voir Tableau 114 pour la liste des erreurs de validation dans lâAPI.
Erreur dâIdentifiant -- 32xx
- Voir Tableau 115 pour la liste des erreurs dâidentification dans lâAPI.
Erreur dâExpiration -- 33xx
- Voir Tableau 116 pour la liste des erreurs dâexpiration dans lâAPI.
# Tableau 113
| Code dâerreur | Nom | Description | /participants | /parties | /transactionRequests | /quotes | /authorizations | /transfers | /transactions | /bulkQuotes | /bulkTransfers |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 3000 | Erreur gĂ©nĂ©rique cĂŽtĂ© client | Erreur gĂ©nĂ©rique cĂŽtĂ© client, utilisĂ©e pour ne pas divulguer dâinformations sensibles. | X | X | X | X | X | X | X | X | X |
| 3001 | Version demandĂ©e non acceptable | Le client a demandĂ© une version du protocole qui nâest pas supportĂ©e par le serveur. | X | X | X | X | X | X | X | X | X |
| 3002 | URI inconnue | LâURI fournie est inconnue du serveur. | X | X | X | X | X | X | X | X | X |
| 3003 | Erreur dâajout dâinformation de Partie | Une erreur sâest produite lors de lâajout ou de la mise Ă jour des informations concernant une Partie. | X | X | X | X | X | X | X | X | X |
Tableau 113 -- Erreurs génériques cÎté client -- 30_xx_
# Tableau 114
| Code dâerreur | Nom | Description | /participants | /parties | /transactionRequests | /quotes | /authorizations | /transfers | /transactions | /bulkQuotes | /bulkTransfers |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 3100 | Erreur de validation gĂ©nĂ©rique | Erreur de validation gĂ©nĂ©rique utilisĂ©e pour ne pas divulguer dâinformations sensibles. | X | X | X | X | X | X | X | X | X |
| 3101 | Syntaxe mal formĂ©e | Le format du paramĂštre nâest pas valide. Par exemple, montant fixĂ© Ă 5.ABC. Le champ de description dâerreur devrait prĂ©ciser quel Ă©lĂ©ment est erronĂ©. | X | X | X | X | X | X | X | X | X |
| 3102 | ĂlĂ©ment obligatoire manquant | ĂlĂ©ment obligatoire absent dans le modĂšle de donnĂ©es. | X | X | X | X | X | X | X | X | X |
| 3103 | Trop dâĂ©lĂ©ments | Le nombre dâĂ©lĂ©ments dans un tableau dĂ©passe le nombre maximum autorisĂ©. | X | X | X | X | X | X | X | X | X |
| 3104 | Charge utile trop volumineuse | La taille de la charge utile dépasse la taille maximale autorisée. | X | X | X | X | X | X | X | X | X |
| 3105 | Signature invalide | Certains paramÚtres du message ont été modifiés, rendant la signature invalide. Cela peut indiquer que le message a été modifié de maniÚre malveillante. | X | X | X | X | X | X | X | X | X |
| 3106 | RequĂȘte modifiĂ©e | Une prĂ©cĂ©dente requĂȘte avec le mĂȘme ID a dĂ©jĂ Ă©tĂ© traitĂ©e, mais avec des paramĂštres diffĂ©rents. | X | X | X | X | X | X | X | ||
| 3107 | ParamĂštre dâextension obligatoire manquant | Un paramĂštre dâextension obligatoire pour le schĂ©ma est absent. | X | X | X | X | X | X | X |
Tableau 114 -- Erreurs de validation -- 31_xx_
# Tableau 115
| Code dâerreur | Nom | Description | /participants | /parties | /transactionRequests | /quotes | /authorizations | /transfers | /transactions | /bulkQuotes | /bulkTransfers |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 3200 | Identifiant gĂ©nĂ©rique non trouvĂ© | Erreur gĂ©nĂ©rique dâidentifiant fournie par le client. | X | X | X | X | X | X | X | X | X |
| 3201 | Erreur FSP Destinataire | Le FSP destinataire nâexiste pas ou est introuvable. | X | X | X | X | X | X | X | X | X |
| 3202 | Identifiant FSP Payeur introuvable | Identifiant FSP Payeur fourni introuvable. | X | X | |||||||
| 3203 | Identifiant FSP Bénéficiaire introuvable | Identifiant FSP Bénéficiaire fourni introuvable. | X | X | |||||||
| 3204 | Partie non trouvĂ©e | Partie avec lâidentifiant, le type dâidentifiant et le sous-id ou type optionnel fournis non trouvĂ©e. | X | X | X | X | |||||
| 3205 | Identifiant de devis introuvable | Devis fourni introuvable sur le serveur. | X | X | |||||||
| 3206 | ID de demande de transaction introuvable | Demande de Transaction fournie introuvable sur le serveur. | X | X | |||||||
| 3207 | ID de transaction introuvable | ID de transaction fourni introuvable sur le serveur. | X | ||||||||
| 3208 | ID de transfert introuvable | ID de transfert fourni introuvable sur le serveur. | X | ||||||||
| 3209 | ID de devis groupé introuvable | ID de devis groupé fourni introuvable sur le serveur. | X | X | |||||||
| 3210 | ID de transfert groupé introuvable | ID de transfert groupé fourni introuvable sur le serveur. | X |
Tableau 115 -- Erreurs dâidentifiant -- 32_xx_
# Tableau 116
| Code dâerreur | Nom | Description | /participants | /parties | /transactionRequests | /quotes | /authorizations | /transfers | /transactions | /bulkQuotes | /bulkTransfers |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 3300 | Erreur gĂ©nĂ©rique dâexpiration | Erreur dâobjet expirĂ© gĂ©nĂ©rique, Ă utiliser pour ne pas divulguer dâinformations sensibles. | X | X | X | X | X | X | X | X | X |
| 3301 | Demande de transaction expirĂ©e | Le client a demandĂ© dâutiliser une demande de transaction qui a dĂ©jĂ expirĂ©. | X | ||||||||
| 3302 | Devis expirĂ© | Le client a demandĂ© dâutiliser un devis qui a dĂ©jĂ expirĂ©. | X | X | X | ||||||
| 3303 | Transfert expirĂ© | Le client a demandĂ© dâutiliser un transfert qui a dĂ©jĂ expirĂ©. | X | X | X | X | X | X | X | X | X |
Tableau 116 -- Erreurs dâexpiration -- 33_xx_
# Erreurs cÎté Payeur -- 4_xxx_
Toutes les erreurs se produisant sur le serveur dont la cause est liĂ©e au Payeur ou Ă son FSP doivent utiliser le code dâerreur principal 4 (codes 4xxx). Ces codes dâerreur indiquent quâil nây a pas eu dâerreur sur le serveur ni dans la requĂȘte du client, mais que la requĂȘte a Ă©chouĂ© pour une raison liĂ©e au Payeur ou Ă son FSP. Le serveur doit fournir une explication sur la raison pour laquelle le service nâa pas pu ĂȘtre exĂ©cutĂ©.
Catégories de bas niveau définies pour les erreurs cÎté Payeur :
- Erreur Générique Payeur -- 40xx
- Erreur de Rejet Payeur -- 41xx
- Erreur de Limite Payeur -- 42xx
- Erreur de Permission Payeur -- 43xx
- Erreur Payeur Bloqué -- 44xx
Voir Tableau 117 pour les erreurs Payeur dĂ©finies dans lâAPI.
# Tableau 117
| Code dâerreur | Nom | Description | /participants | /parties | /transactionRequests | /quotes | /authorizations | /transfers | /transactions | /bulkQuotes | /bulkTransfers |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 4000 | Erreur gĂ©nĂ©rique Payeur | Erreur gĂ©nĂ©rique liĂ©e au Payeur ou Ă son FSP. UtilisĂ©e pour protĂ©ger les informations pouvant ĂȘtre sensibles. | X | X | X | X | X | X | X | ||
| 4001 | FSP Payeur liquiditĂ© insuffisante | Le FSP Payeur nâa pas assez de liquiditĂ© pour effectuer le transfert. | X | ||||||||
| 4100 | Rejet gĂ©nĂ©rique Payeur | Le Payeur ou le FSP Payeur a rejetĂ© la requĂȘte. | X | X | X | X | X | X | X | ||
| 4101 | Payeur a rejeté la demande de transaction | Le Payeur a rejeté la demande de transaction du Bénéficiaire. | X | ||||||||
| 4102 | FSP Payeur type de transaction non supporté | Le FSP Payeur ne supporte pas ou a rejeté le type de transaction demandé. | X | ||||||||
| 4103 | Payeur devise non supportĂ©e | Le Payeur nâa pas de compte supportant la devise demandĂ©e. | X | ||||||||
| 4200 | Erreur de limite Payeur | Erreur de limite générique, par exemple nombre de paiements journalier/mensuel dépassé ou montant de la transaction supérieur au maximum autorisé. | X | X | X | X | X | ||||
| 4300 | Erreur de permission Payeur | Erreur de permission gĂ©nĂ©rique, le Payeur ou son FSP nâa pas les droits pour rĂ©aliser le service. | X | X | X | X | X | X | X | ||
| 4400 | Erreur Payeur bloqué générique | Erreur Payeur bloqué générique ; le Payeur est bloqué ou a échoué les contrÎles réglementaires. | X | X | X | X | X | X | X |
Tableau 117 -- Erreurs cÎté Payeur -- 4_xxx_
# Erreurs cÎté Bénéficiaire -- 5_xxx_
Toutes les erreurs se produisant sur le serveur pour lesquelles le BĂ©nĂ©ficiaire ou son FSP est la cause de lâerreur utilisent le code dâerreur principal 5 (codes 5xxx). Ces codes dâerreur indiquent quâil nây a pas eu dâerreur sur le serveur ni dans la requĂȘte du client, mais que la requĂȘte a Ă©chouĂ© pour une raison liĂ©e au BĂ©nĂ©ficiaire ou Ă son FSP. Le serveur doit fournir une explication sur la raison pour laquelle le service nâa pas pu ĂȘtre exĂ©cutĂ©.
Catégories de bas niveau pour les erreurs Bénéficiaire :
- Erreur Générique Bénéficiaire -- 50xx
- Erreur de Rejet Bénéficiaire -- 51xx
- Erreur de Limite Bénéficiaire -- 52xx
- Erreur de Permission Bénéficiaire -- 53xx
- Erreur Bénéficiaire Bloqué -- 54xx
Voir Tableau 118 pour toutes les erreurs BĂ©nĂ©ficiaire dĂ©finies dans lâAPI.
# Tableau 118
| Code dâerreur | Nom | Description | /participants | /parties | /transactionRequests | /quotes | /authorizations | /transfers | /transactions | /bulkQuotes | /bulkTransfers |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 5000 | Erreur gĂ©nĂ©rique BĂ©nĂ©ficiaire | Erreur gĂ©nĂ©rique due au Payeur ou Ă son FSP, Ă utiliser pour ne pas divulguer dâinformations sensibles. | X | X | X | X | X | X | X | ||
| 5001 | FSP BĂ©nĂ©ficiaire liquiditĂ© insuffisante | FSP BĂ©nĂ©ficiaire nâa pas assez de liquiditĂ© pour effectuer le transfert. | X | ||||||||
| 5100 | Rejet gĂ©nĂ©rique BĂ©nĂ©ficiaire | Le BĂ©nĂ©ficiaire ou son FSP a rejetĂ© la requĂȘte. | X | X | X | X | X | X | X | ||
| 5101 | Bénéficiaire a rejeté le devis | Le Bénéficiaire ne souhaite pas poursuivre la transaction aprÚs réception du devis. | X | X | |||||||
| 5102 | FSP Bénéficiaire type de transaction non supporté | FSP Bénéficiaire ne supporte pas ou a rejeté le type de transaction demandé. | X | X | |||||||
| 5103 | FSP Bénéficiaire a rejeté le devis | Le FSP Bénéficiaire ne souhaite pas poursuivre la transaction aprÚs réception du devis. | X | X | |||||||
| 5104 | Bénéficiaire a rejeté la transaction | Le Bénéficiaire a rejeté la transaction financiÚre. | X | X | |||||||
| 5105 | FSP Bénéficiaire a rejeté la transaction | Le FSP Bénéficiaire a rejeté la transaction financiÚre. | X | X | |||||||
| 5106 | Devise non supportée par le Bénéficiaire | Le Bénéficiaire ne possÚde pas de compte prenant en charge la devise demandée. | X | X | X | X | |||||
| 5200 | Erreur de limite Bénéficiaire | Erreur de limite générique, par exemple Bénéficiaire recevant plus de paiements par jour/mois que permis, ou recevant un paiement dépassant le montant maximum par transaction. | X | X | X | X | X | ||||
| 5300 | Erreur de permission BĂ©nĂ©ficiaire | Erreur de permission gĂ©nĂ©rique, le BĂ©nĂ©ficiaire ou son FSP nâa pas les droits pour rĂ©aliser le service. | X | X | X | X | X | X | X | ||
| 5400 | Erreur Bénéficiaire bloqué générique | Erreur générique Bénéficiaire bloqué, le Bénéficiaire est bloqué ou a échoué les contrÎles réglementaires. | X | X | X | X | X | X | X |
Tableau 118 -- Erreurs cÎté Bénéficiaire -- 5_xxx_
# Liaison avec les schémas génériques des transactions
Cette section dĂ©crit comment les schĂ©mas logiques de transaction prĂ©sentĂ©s dans SchĂ©mas de Transactions GĂ©nĂ©riques sont utilisĂ©s dans la liaison REST asynchrone de lâAPI. De nombreuses informations sont prĂ©sentĂ©es sous forme de diagrammes de sĂ©quence. Pour plus dâinformations sur les Ă©tapes de ces diagrammes, voir SchĂ©mas de Transactions GĂ©nĂ©riques.
# Transaction Initiée par le Payeur
Le schĂ©ma Transaction InitiĂ©e par le Payeur est introduit dans SchĂ©mas de Transactions GĂ©nĂ©riques. Ă un niveau gĂ©nĂ©ral, ce schĂ©ma doit ĂȘtre utilisĂ© chaque fois quâun Payeur souhaite transfĂ©rer des fonds Ă une autre Partie qui ne se trouve pas dans le mĂȘme FSP que le Payeur. Figure 64 prĂ©sente le diagramme de sĂ©quence pour une Transaction InitiĂ©e par le Payeur utilisant la liaison REST asynchrone de la version logique. Le processus de chaque numĂ©ro dans le diagramme de sĂ©quence est dĂ©crit dans SchĂ©mas de Transactions GĂ©nĂ©riques.
# Figure 64
Figure 64 -- SchĂ©ma Transaction InitiĂ©e par le Payeur utilisant lâAPI REST asynchrone
# Transaction Initiée par le Bénéficiaire
Le schĂ©ma Transaction InitiĂ©e par le BĂ©nĂ©ficiaire est introduit dans SchĂ©mas de Transactions GĂ©nĂ©riques. Ă un niveau gĂ©nĂ©ral, le schĂ©ma doit ĂȘtre utilisĂ© lorsquâun BĂ©nĂ©ficiaire souhaite demander au Payeur de transfĂ©rer des fonds vers le BĂ©nĂ©ficiaire. Le Payeur et le BĂ©nĂ©ficiaire sont supposĂ©s dans des FSP diffĂ©rents, et lâapprobation de la transaction est rĂ©alisĂ©e dans le FSP Payeur. Si lâentrĂ©e et lâapprobation de la transaction ont lieu sur un appareil du BĂ©nĂ©ficiaire, utilisez plutĂŽt le schĂ©ma connexe Transaction InitiĂ©e par le BĂ©nĂ©ficiaire avec OTP](#payee-initiated-transaction-using-otp). Figure 65 prĂ©sente le diagramme de sĂ©quence pour une Transaction InitiĂ©e par le BĂ©nĂ©ficiaire utilisant la liaison REST asynchrone de la version logique. Le processus pour chaque numĂ©ro du diagramme est dĂ©crit dans SchĂ©mas de Transactions GĂ©nĂ©riques.
# Figure 65
Figure 65 -- SchĂ©ma Transaction InitiĂ©e par le BĂ©nĂ©ficiaire utilisant lâAPI REST asynchrone
# Transaction Bénéficiaire Initiée avec OTP
Le schĂ©ma Transaction InitiĂ©e par le BĂ©nĂ©ficiaire avec OTP est introduit dans SchĂ©mas de Transactions GĂ©nĂ©riques. Ă un niveau gĂ©nĂ©ral, ce schĂ©ma ressemble Ă Transaction InitiĂ©e par le BĂ©nĂ©ficiaire ; cependant, dans ce schĂ©ma les informations de transaction et lâapprobation du Payeur sont affichĂ©es et saisies sur un appareil du BĂ©nĂ©ficiaire. Comme pour les autres schĂ©mas, le Payeur et le BĂ©nĂ©ficiaire sont dans des FSP diffĂ©rents. Figure 66 montre le diagramme pour une Transaction InitiĂ©e par le BĂ©nĂ©ficiaire avec OTP utilisant la liaison REST asynchrone de la version logique. Le processus de chaque Ă©tape du diagramme est dĂ©crit dans SchĂ©mas de Transactions GĂ©nĂ©riques.
# Figure 66
Figure 66 -- Schéma Transaction Initiée par le Bénéficiaire avec OTP via REST asynchrone
# Transactions Groupées
Le schĂ©ma Transactions GroupĂ©es est introduit dans SchĂ©mas de Transactions GĂ©nĂ©riques. Ce schĂ©ma est utilisĂ© lorsque le Payeur souhaite transfĂ©rer des fonds Ă plusieurs BĂ©nĂ©ficiaires au sein dâune seule transaction. Les BĂ©nĂ©ficiaires peuvent ĂȘtre dans diffĂ©rents FSP. Figure 67 montre le diagramme de sĂ©quence pour des Transactions GroupĂ©es utilisant la liaison REST asynchrone de la version logique. Lâexplication de chaque Ă©tape du diagramme est disponible dans SchĂ©mas de Transactions GĂ©nĂ©riques.
# Figure 67
Figure 67 -- Schéma Transactions groupées via REST asynchrone
# Gestion des erreurs de lâAPI
Cette section dĂ©crit comment gĂ©rer les rĂ©ponses ou callbacks absents ainsi que les erreurs Ă traiter cĂŽtĂ© serveur lors du traitement dâune requĂȘte.
# RequĂȘte ErronĂ©e
Si un serveur reçoit une requĂȘte de service erronĂ©e qui peut ĂȘtre traitĂ©e immĂ©diatement (par exemple, syntaxe mal formĂ©e ou ressource non trouvĂ©e), un code dâerreur HTTP appropriĂ© cĂŽtĂ© client (commençant par 4_xx_) doit ĂȘtre retournĂ© au client dans la rĂ©ponse. Les codes dâerreur HTTP dĂ©finis pour lâAPI sont listĂ©s dans le Tableau 4. La rĂ©ponse HTTP peut aussi contenir un Ă©lĂ©ment ErrorInformation afin de donner plus de dĂ©tails sur lâerreur (voir Informations dâerreur dans la rĂ©ponse HTTP).
# Erreur serveur lors du traitement dâune requĂȘte
Figure 68 montre un exemple sur la gestion dâune erreur survenue lors du traitement serveur.
# Figure 68
Figure 68 -- Erreur cĂŽtĂ© serveur lors du traitement dâune requĂȘte
# Ătapes internes du traitement
La liste suivante décrit les étapes de la séquence (voir Figure 68).
Le client souhaite que le serveur crĂ©e un nouvel objet de service et utilise donc une requĂȘte POST.
Le serveur reçoit la requĂȘte. Il envoie immĂ©diatement une rĂ©ponse accepted au client, puis tente de crĂ©er lâobjet selon la demande. Une erreur de traitement survient et la demande ne peut ĂȘtre satisfaite. Le serveur envoie alors le callback PUT /{resource}/{ID}/error incluant un code dâerreur (Codes dâerreur) et une description pour notifier le client.
Le client reçoit le callback dâerreur et rĂ©pond immĂ©diatement avec OK. Il gĂšre ensuite lâerreur.
Le serveur reçoit la réponse OK et le processus est terminé.
# Gestion cĂŽtĂ© client dâun callback dâerreur
Les sections suivantes expliquent comment un client doit traiter les callbacks dâerreur reçus dâun serveur.
# Ressource API /participants
Lâerreur typique du service /participants est que la Partie demandĂ©e nâa pas Ă©tĂ© trouvĂ©e. Le client peut soit essayer un autre serveur, soit informer lâutilisateur final que la Partie recherchĂ©e est introuvable.
# Ressource API /parties
Lâerreur typique du service /parties est que la Partie demandĂ©e nâa pas Ă©tĂ© trouvĂ©e. Le client peut soit essayer un autre serveur, soit informer lâutilisateur final que les informations recherchĂ©es sont indisponibles.
# Ressource API /quotes
Lâerreur typique du service /quotes est quâun devis nâa pas pu ĂȘtre calculĂ© pour la transaction demandĂ©e. Le client doit notifier lâutilisateur final que la transaction nâa pas pu ĂȘtre rĂ©alisĂ©e.
# Ressource API /transactionRequests
Lâerreur typique du service /transactionRequests est que le Payeur a rejetĂ© la transaction ou quâune validation automatique a Ă©chouĂ©. Le client doit informer le BĂ©nĂ©ficiaire que la demande de transaction a Ă©chouĂ©.
# Ressource API /authorizations
Lâerreur typique du service /authorizations est que la demande de transaction nâa pas Ă©tĂ© trouvĂ©e. Le client doit informer le Payeur que la demande a Ă©tĂ© annulĂ©e.
# Ressource API /transfers
Lâerreur typique du service /transfers est quâun Ă©chec a eu lieu lors du transfert hop-to-hop ou lors de la transaction financiĂšre de bout en bout. Par exemple : dĂ©passement de limite ou BĂ©nĂ©ficiaire introuvable. Dans tous les cas dâerreur, le client (FSP Payeur) doit annuler la rĂ©servation pour la transaction financiĂšre rĂ©alisĂ©e avant la demande dâexĂ©cution sur le serveur (FSP BĂ©nĂ©ficiaire). Voir Figure 69 pour un exemple avec un Switch financier entre les FSP.
# Figure 69
Figure 69 -- Gestion du callback dâerreur suite Ă POST /transfers
# Ătapes internes du traitement
La liste suivante détaille les étapes de la séquence (voir Figure 69).
La réservation du transfert est faite depuis le compte du Payeur vers un compte Switch combiné ou un compte FSP Bénéficiaire. Lorsque la réservation est réussie, la demande POST /transfers est utilisée sur le Switch. Le transfert devient alors irrévocable cÎté FSP Payeur. Le FSP Payeur attend la réponse accepted du Switch.
Le Switch reçoit la demande POST /transfers, envoie de suite une réponse accepted au FSP Payeur, puis effectue toutes les validations internes nécessaires. Si tout est valide, une réservation est effectuée du FSP Payeur vers le FSP Bénéficiaire. Une fois cette réservation réussie, POST /transfers est utilisé cÎté FSP Bénéficiaire. Le transfert est alors irrévocable du cÎté Switch. Le Switch attend une réponse accepted du FSP Bénéficiaire.
Le FSP BĂ©nĂ©ficiaire reçoit le POST /transfers et envoie immĂ©diatement une rĂ©ponse accepted au Switch. Il effectue ses propres validations. On suppose ici quâune validation Ă©choue (par exemple, pour dĂ©passement de limite). Le callback dâerreur PUT /transfers/{ID}/error est utilisĂ© vers le Switch pour informer le FSP Payeur de lâerreur. Le FSP BĂ©nĂ©ficiaire attend alors la rĂ©ponse OK du Switch pour conclure le processus.
Le Switch reçoit le callback dâerreur PUT /transfers/{ID}/error et rĂ©pond immĂ©diatement avec OK. Il annule le transfert rĂ©servĂ© suite Ă la rĂ©ception du callback dâerreur. Le Switch utilise alors le callback PUT /transfers/{ID}/error vers le FSP Payeur avec les mĂȘmes paramĂštres, et attend une rĂ©ponse OK pour terminer la procĂ©dure.
Le FSP Payeur reçoit le callback PUT /transfers/{ID}/error et rĂ©pond immĂ©diatement avec OK. Il annule sa propre rĂ©servation de transfert suite Ă la rĂ©ception du callback dâerreur.
# Ressource API /transactions
Lâerreur normale du service /transactions est que la transaction nâa pas Ă©tĂ© trouvĂ©e dans le FSP Pair.
# Ressource API /bulkQuotes
Lâerreur typique du service /bulkQuotes est quâun devis nâa pas pu ĂȘtre calculĂ© pour la transaction demandĂ©e. Le client doit notifier lâutilisateur final que la transaction demandĂ©e a Ă©chouĂ©.
# Ressource API /bulkTransfers
Lâerreur classique du service /bulkTransfers est que la transaction groupĂ©e nâa pas Ă©tĂ© acceptĂ©e, par exemple suite Ă une erreur de validation. Dans tous les cas dâerreur, le client (FSP Payeur) doit annuler la rĂ©servation des transactions financiĂšres effectuĂ©es avant la demande cĂŽtĂ© FSP BĂ©nĂ©ficiaire. Voir Figure 70 pour un exemple avec Switch financier entre les FSP.
# Figure 70
Figure 70 -- Gestion du callback dâerreur pour le service API /bulkTransfers
# Ătapes internes du traitement
La liste suivante décrit les étapes de la séquence (voir Figure 70).
Chaque transfert individuel du transfert groupé est réservé depuis le compte du Payeur vers un compte Switch combiné ou un compte FSP Bénéficiaire. Une fois toutes les réservations individuelles réussies, POST /bulkTransfers est utilisé sur le Switch. Le transfert groupé devient alors irrévocable cÎté FSP Payeur. Ce dernier attend une réponse accepted du Switch.
Le Switch reçoit POST /bulkTransfers et répond immédiatement accepted au FSP Payeur. Il réalise toutes les validations nécessaires. Si celles-ci passent, chaque transfert individuel est réservé du FSP Payeur au FSP Bénéficiaire. Une fois les réservations validées, POST /bulkTransfers est utilisé vers le FSP Bénéficiaire. Le transfert groupé devient irrévocable cÎté Switch, qui attend alors la réponse accepted du FSP Bénéficiaire.
Le FSP BĂ©nĂ©ficiaire reçoit POST /bulkTransfers, rĂ©pond de suite accepted au Switch, puis effectue ses validations sur le transfert groupĂ©. Supposons quâune validation empĂȘche tout le transfert groupĂ©. Le callback dâerreur PUT /bulkTransfers/{ID}/error est utilisĂ© vers le Switch pour informer le FSP Payeur. Le FSP BĂ©nĂ©ficiaire attend ensuite la rĂ©ponse OK du Switch.
Le Switch reçoit le callback dâerreur PUT /bulkTransfers/{ID}/error et rĂ©pond immĂ©diatement par OK. Il annule toutes les rĂ©servations de transferts prĂ©cĂ©dentes, puis utilise Ă son tour le callback PUT /bulkTransfers/{ID}/error vers le FSP Payeur avec les paramĂštres identiques, et attend la rĂ©ponse OK pour conclure.
Le FSP Payeur reçoit le callback PUT /bulkTransfers/{ID}/error, rĂ©pond par OK et annule toutes les rĂ©servations prĂ©cĂ©dentes suite Ă la rĂ©ception du callback dâerreur.
# Absence de rĂ©ponse du serveur cĂŽtĂ© Client - RĂ©envoi de la requĂȘte
Figure 71 prĂ©sente un exemple (UML) oĂč un client (FSP ou Switch) gĂšre une absence de rĂ©ponse dâun serveur (Switch ou FSP Pair) suite Ă une requĂȘte de service, via le renvoi de la mĂȘme requĂȘte de service.
# Figure 71
Figure 71 -- Gestion dâerreur cĂŽtĂ© client via rĂ©envoi de la requĂȘte
# Ătapes internes du traitement
Voici la description détaillée de chaque étape (voir Figure 71).
Le client sollicite la crĂ©ation dâun nouvel objet de service cotĂ© serveur. La requĂȘte HTTP est perdue.
Le client constate quâaucune rĂ©ponse nâa Ă©tĂ© reçue dans un dĂ©lai imparti, et renvoie la requĂȘte de service.
Le serveur reçoit la nouvelle requĂȘte, envoie immĂ©diatement une rĂ©ponse accepted au client, puis procĂšde Ă la crĂ©ation de lâobjet selon la demande initiale.
La rĂ©ponse HTTP accepted du serveur se perd en retour, le client constate Ă nouveau une absence de rĂ©ponse dans le dĂ©lai, et renvoie la requĂȘte de service.
Le serveur reçoit la nouvelle requĂȘte, envoie Ă nouveau une rĂ©ponse accepted au client, et constate quâil sâagit dâun doublon (cf. Ă©tape 3). Nul besoin de crĂ©er un nouvel objet ; un callback est alors envoyĂ© pour notifier le client de lâobjet dĂ©jĂ créé Ă lâĂ©tape 3.
Le client reçoit le callback concernant lâobjet créé, envoie une rĂ©ponse HTTP OK au serveur pour conclure le processus.
Le serveur reçoit la réponse OK du client, le processus est terminé.
# Absence de réponse du client cÎté Serveur
Un serveur utilisant lâAPI nâest pas responsable de sâassurer quâun callback a bien Ă©tĂ© livrĂ© au client. Toutefois, il est recommandĂ© de rĂ©essayer en cas de non-rĂ©ception d'une rĂ©ponse OK du client.
# Absence de callback cÎté client - Utilisation de GET
Figure 72 est un diagramme de sĂ©quence UML illustrant la maniĂšre dont un client (Switch ou FSP Pair) peut gĂ©rer une absence de callback de la part dâun client (FSP ou Switch) dans un dĂ©lai raisonnable.
# Figure 72
Figure 72 -- Gestion dâerreur cĂŽtĂ© client via requĂȘte GET
# Ătapes internes du traitement
La liste suivante détaille les étapes de la séquence (voir Figure 71).
Le client souhaite que le serveur crĂ©e un nouvel objet de service ; une requĂȘte de service est envoyĂ©e.
Le serveur reçoit la requĂȘte de service, rĂ©pond immĂ©diatement accepted au client, puis crĂ©e lâobjet conformĂ©ment Ă la demande. La crĂ©ation est longue (ex : transfert groupĂ© volumineux).
Le serveur constate lâabsence de callback cĂŽtĂ© client dans un dĂ©lai raisonnable. Le client utilise alors une requĂȘte GET avec lâID fourni initialement.
Le serveur reçoit la requĂȘte GET, rĂ©pond accepted pour signifier que la demande sera traitĂ©e.
Le client reçoit la réponse accepted et attend le callback, qui arrive plus tard ; le client envoie alors OK en retour et le processus est terminé.
Le serveur envoie le callback contenant lâinformation demandĂ©e, puis reçoit le OK qui termine le processus.
# Exemple bout-en-bout
Cette section contient un exemple complet oĂč un titulaire de compte est provisionnĂ©, puis un transfert P2P depuis un Payeur sur un FSP vers un BĂ©nĂ©ficiaire sur un autre FSP est effectuĂ©. Lâexemple inclut les requĂȘtes et rĂ©ponses HTTP, les en-tĂȘtes HTTP, et les modĂšles de donnĂ©es JSON, mais exclut la sĂ©curitĂ© JWS (Signature) et le chiffrement JWE (Encryption).
# Configuration de lâexemple
Description de lâenvironnement de lâexemple.
# NĆuds
# Figure 73
Les nĆuds de lâexemple bout-en-bout sont simplifiĂ©s Ă deux FSP : une banque (identifiant BankNrOne), un opĂ©rateur mobile money (MobileMoney), et un Switch (identifiant Switch). Le Switch joue aussi le rĂŽle de ALS (Account Lookup System, ou SystĂšme de Recherche de Compte) (voir Figure 73).
Figure 73 -- NĆuds de lâexemple bout-en-bout
# Titulaires de comptes
Les titulaires de compte dans lâexemple sont :
Un titulaire de compte chez BankNrOne nommĂ© Mats Hagman. Il dispose dâun compte IBAN SE4550000000058398257466 en USD.
Un titulaire de compte chez MobileMoney nommĂ© Henrik Karlsson. Il dispose dâun compte mobile identifiĂ© par 123456789 (numĂ©ro), en USD.
# Scénario
Le scĂ©nario : Mats Hagman (BankNrOne) souhaite transfĂ©rer 100 USD Ă Henrik Karlsson (MobileMoney). Avant que Henrik ne soit trouvable, son FSP MobileMoney doit fournir au Switch lâinformation dâaffectation de FSP. Le dĂ©roulĂ© complet se trouve en Autres Informations.
# Autres Informations
Les messages JSON sont formatés avec couleurs, indentation et retours à la ligne pour la lisibilité.
Il est supposĂ© que chaque FSP dispose dâun compte Switch prĂ©-approvisionnĂ© dans son propre Ă©tablissement.
# DĂ©roulĂ© de lâexemple
Figure 74 illustre lâensemble du processus, du provisioning des informations FSP jusquâĂ la transaction.
# Figure 74
Figure 74 -- DĂ©roulĂ© complet : de la fourniture dâinformation FSP compte au succĂšs de la transaction
# Provisionnement du Titulaire de Compte
Avant que le bĂ©nĂ©ficiaire Henrik Karlsson ne soit trouvable via le FSP BankNrOne, il doit ĂȘtre provisionnĂ© dans lâALS (le Switch) par son FSP (MobileMoney). Cela sâeffectue via POST /participants (version bulk) ou POST /participants/{Type}/{ID} (version simple). Comme il n'y a ici qu'un bĂ©nĂ©ficiaire, la version simple est utilisĂ©e par MobileMoney. Le provisioning peut avoir lieu Ă tout moment, lors de la crĂ©ation du compte ou lors de la connexion initiale au Switch.
# FSP MobileMoney provisionne Henrik Karlsson : Ătape 1 du dĂ©roulĂ©
Listing 29 montre la demande HTTP oĂč MobileMoney provisionne les infos FSP pour Henrik Karlsson, identifiĂ© par MSISDN et 123456789 (voir Adressage de Parties). LâĂ©lĂ©ment JSON fspId est mis Ă lâidentifiant du FSP et currency Ă la devise du compte (USD).
Voir Tableau 1 pour les en-tĂȘtes HTTP requis, et POST /participants/{Type}/{ID} pour plus dâinfos. Pour le routage avec FSPIOP-Destination et FSPIOP-Source, voir Routage du flux dâappel. Pour la nĂ©gociation de version, voir NĂ©gociation de version entre client et serveur.
# Listing 29
POST /participants/MSISDN/123456789 HTTP/1.1
Accept: application/vnd.interoperability.participants+json;version=1
Content-Length: 50
Content-Type:
application/vnd.interoperability.participants+json;version=1.0
Date: Tue, 14 Nov 2017 08:12:31 GMT
FSPIOP-Source: MobileMoney
FSPIOP-Destination: Switch
{
"fspId": "MobileMoney",
"currency": "USD"
}
Listing 29 -- Provision dâinformations FSP pour le titulaire Henrik Karlsson
Listing 30 prĂ©sente la rĂ©ponse HTTP synchrone oĂč le Switch accuse rĂ©ception immĂ©diate (aprĂšs vĂ©rif de headers, etc.).
Voir Tableau 3 pour les en-tĂȘtes de rĂ©ponse requis.
# Listing 30
HTTP/1.1 202 Accepted
Content-Type:
application/vnd.interoperability.participants+json;version=1.0
Listing 30 -- RĂ©ponse synchrone Ă la requĂȘte de provision
# Traitement du provisionnement par le Switch : Ătape 2
Une fois la demande reçue (Listing 29) et la rĂ©ponse envoyĂ©e (Listing 30), le Switch vĂ©rifie le corps de la demande. Par exemple, il sâassure que fspId correspond Ă FSPIOP-Source, que la devise est autorisĂ©e, etc.
AprĂšs validation, lâinformation que le compte identifiĂ© par MSISDN et 123456789 est chez le FSP MobileMoney est enregistrĂ©e en base Switch.
# Switch envoie le callback de succĂšs : Ătape 3
Le Switch doit ensuite notifier le FSP MobileMoney du succĂšs du provisioning, via PUT /participants/{Type}/{ID}. Listing 31 illustre cette requĂȘte HTTP.
Voir Tableau 1 pour les en-tĂȘtes requis. Dans le callback, Accept ne doit pas ĂȘtre utilisĂ© (appel de service prĂ©cĂ©dent). Les headers FSPIOP-Destination et FSPIOP-Source sont inversĂ©s par rapport Ă la demande dâorigine.
# Listing 31
PUT /participants/MSISDN/123456789 HTTP/1.1
Content-Length: 50
Content-Type:
Date: Tue, 14 Nov 2017 08:12:32 GMT
FSPIOP-Source: MobileMoney
FSPIOP-Destination: Switch
{
"fspId": "MobileMoney",
"currency": "USD"
}
Listing 31 -- Callback pour le provisioning demandé précédemment
Listing 32 montre la rĂ©ponse HTTP synchrone oĂč le FSP MobileMoney accuse rĂ©ception immĂ©diate (aprĂšs vĂ©rification des headersâŠ) pour conclure le process aprĂšs rĂ©ception du callback.
Voir Tableau 3 pour les en-tĂȘtes requis.
# Listing 32
HTTP/1.1 200 OK
Content-Type:
application/vnd.interoperability.participants+json;version=1.0
Listing 32 -- Réponse synchrone au callback
# Transfert P2P
Comme le bĂ©nĂ©ficiaire visĂ©, Henrik Karlsson, est dĂ©sormais connu du Switch (qui fait aussi office dâALS), comme dĂ©taillĂ© dans la section Provision Account Holder, Mats Hagman peut maintenant initier et approuver le cas d'utilisation Transfert P2P de sa banque vers Henrik Karlsson.
# Initiation du cas dâutilisation : Ătape 4 du flux de bout en bout
Mats Hagman sait que Henrik Karlsson possĂšde le numĂ©ro de tĂ©lĂ©phone 123456789, il saisit donc ce numĂ©ro sur son appareil comme bĂ©nĂ©ficiaire et 100 USD comme montant. La communication rĂ©elle entre lâappareil de Mats et sa banque BankNrOne est hors du pĂ©rimĂštre de cette API.
# Demande d'information sur la partie auprĂšs du Switch : Ătape 5 du flux de bout en bout
Ă lâĂ©tape 5 du flux de bout en bout, BankNrOne reçoit la demande de Mats Hagman visant Ă transfĂ©rer 100 USD au numĂ©ro de tĂ©lĂ©phone 123456789. BankNrOne effectue une recherche interne pour savoir si le compte 123456789 existe dans la banque, mais ne le trouve pas. BankNrOne utilise alors le service GET /parties/{Type}/{ID} du Switch pour voir si ce dernier a des informations sur le compte.
Exemple 33 illustre la requĂȘte HTTP oĂč le PSP BankNrOne demande au Switch des informations sur la partie correspondant au compte identifiĂ© par MSISDN et 123456789.
Voir Tableau 1 pour les en-tĂȘtes HTTP requis dans une requĂȘte, ainsi que GET /parties/{Type}/{ID} pour plus d'informations sur ce service. Plus dâinformations sur le routage des requĂȘtes via FSPIOP-Destination et FSPIOP-Source sont disponibles dans Routage des flux d'appels avec FSPIOP Destination et FSPIOP Source. Dans cette requĂȘte, le FSP BankNrOne ne connaĂźt pas le FSP du bĂ©nĂ©ficiaire. Par consĂ©quent, lâen-tĂȘte FSPIOP-Destination nâest pas prĂ©sent. Les informations sur la nĂ©gociation de version de lâAPI se trouvent dans NĂ©gociation de version entre client et serveur.
# Exemple 33
GET /parties/MSISDN/123456789 HTTP/1.1
Accept: application/vnd.interoperability.parties+json;version=1
Content-Type: application/vnd.interoperability.parties+json;version=1.0
Date: Tue, 15 Nov 2017 10:13:37 GMT
FSPIOP-Source: BankNrOne
Exemple 33 â Obtenir les informations dâune partie pour le compte identifiĂ© par MSISDN et 123456789 depuis BankNrOne
Exemple 34 montre la rĂ©ponse HTTP synchrone oĂč le Switch accuse rĂ©ception immĂ©diatement (aprĂšs vĂ©rification basique des en-tĂȘtes requis, par exemple) de la requĂȘte HTTP illustrĂ©e dans Exemple 33.
Voir Tableau 3 pour les en-tĂȘtes HTTP requis dans une rĂ©ponse HTTP.
# Exemple 34
HTTP/1.1 202 Accepted
Content-Type: application/vnd.interoperability.parties+json;version=1.0
Exemple 34 â RĂ©ponse synchrone Ă la demande dâinformation sur une partie
# Demande d'information sur la partie auprĂšs du FSP : Ătape 6 du flux de bout en bout
Quand le Switch a reçu la requĂȘte HTTP Exemple 33 et envoyĂ© la rĂ©ponse synchrone Exemple 34, il peut vĂ©rifier dans sa base de donnĂ©es sâil dispose dâinformations sur le FSP auquel appartient le titulaire du compte identifiĂ© par MSISDN et 123456789. Comme cette information a Ă©tĂ© provisionnĂ©e selon la section Provision Account Holder, le Switch sait que le compte est chez le FSP MobileMoney. Le Switch envoie donc la requĂȘte HTTP illustrĂ©e dans Exemple 35.
Voir Tableau 1 pour les en-tĂȘtes HTTP requis, et GET /parties/{Type}/{ID} pour plus dâinformations sur ce service. Plus dâinformations sur le routage via FSPIOP-Destination et FSPIOP-Source se trouvent dans Routage des flux d'appels avec FSPIOP Destination et FSPIOP Source. Dans cette requĂȘte, le Switch ajoute lâentĂȘte FSPIOP-Destination car il connaĂźt le FSP destination. Les informations sur la nĂ©gociation de version API sont dans NĂ©gociation de version entre client et serveur.
# Exemple 35
GET /parties/MSISDN/123456789 HTTP/1.1
Accept: application/vnd.interoperability.parties+json;version=1
Content-Type: application/vnd.interoperability.parties+json;version=1.0
Date: Tue, 15 Nov 2017 10:13:38 GMT
FSPIOP-Source: BankNrOne
FSPIOP-Destination: MobileMoney
Exemple 35 â Demande dâinformation de partie pour le compte identifiĂ© par MSISDN et 123456789, envoyĂ©e par le Switch
Exemple 36 montre la rĂ©ponse HTTP synchrone dans laquelle le FSP MobileMoney accuse rĂ©ception immĂ©diatement (aprĂšs vĂ©rification basique des en-tĂȘtes requis, par exemple) de la requĂȘte HTTP illustrĂ©e dans Exemple 35.
Voir Tableau 3 pour les en-tĂȘtes HTTP requis dans une rĂ©ponse HTTP.
# Exemple 36
HTTP/1.1 202 Accepted
Content-Type: application/vnd.interoperability.parties+json;version=1.0
Exemple 36 â RĂ©ponse synchrone Ă la demande dâinformation sur une partie
# Recherche de lâinformation sur la partie dans le FSP MobileMoney : Ătape 7 du flux de bout en bout
Quand le FSP MobileMoney a reçu la requĂȘte HTTP Exemple 35 et envoyĂ© la rĂ©ponse synchrone Exemple 36, il peut chercher dans sa base de donnĂ©es des informations supplĂ©mentaires sur le compte identifiĂ© par MSISDN et 123456789. Comme le compte existe et appartient Ă Henrik Karlsson, le FSP MobileMoney envoie le callback illustrĂ© dans Exemple 37. MobileMoney ne souhaite pas partager certains dĂ©tails, par exemple la date de naissance, avec lâautre FSP (BankNrOne), donc certains Ă©lĂ©ments facultatifs ne sont pas envoyĂ©s.
Voir Tableau 1 pour les en-tĂȘtes HTTP requis dans une requĂȘte, et PUT /participants/{Type}/{ID} pour plus dâinformations sur le callback. Dans le callback, lâentĂȘte Accept ne doit pas ĂȘtre envoyĂ©. Les en-tĂȘtes HTTP FSPIOP-Destination et FSPIOP-Source sont inversĂ©s par rapport Ă la requĂȘte HTTP Exemple 35, comme expliquĂ© dans Routage des flux d'appels avec FSPIOP Destination et FSPIOP Source.
# Exemple 37
PUT /parties/MSISDN/123456789 HTTP/1.1
Content-Type: application/vnd.interoperability.parties+json;version=1.0
Content-Length: 347
Date: Tue, 15 Nov 2017 10:13:39 GMT
FSPIOP-Source: MobileMoney
FSPIOP-Destination: BankNrOne
{
"party": {
"partyIdInfo": {
"partyIdType": "MSISDN",
"partyIdentifier": "123456789",
"fspId": "MobileMoney"
},
"personalInfo": {
"complexName": {
"firstName": "Henrik",
"lastName": "Karlsson"
}
}
}
}
Exemple 37 â Callback en rĂ©ponse Ă la demande dâinformation sur la partie
Exemple 38 prĂ©sente la rĂ©ponse HTTP synchrone du Switch qui confirme immĂ©diatement (aprĂšs vĂ©rification des en-tĂȘtes requis, par exemple) la fin du processus, aprĂšs rĂ©ception du callback Exemple 37.
Voir Tableau 3 pour les en-tĂȘtes HTTP requis en rĂ©ponse.
# Exemple 38
HTTP/1.1 200 OK
Content-Type: application/vnd.interoperability.parties+json;version=1.0
Exemple 38 â RĂ©ponse synchrone au callback dâinformation sur une partie
# Relais du callback au FSP BankNrOne : Ătape 8 du flux de bout en bout
Quand le Switch a reçu le callback Exemple 37 et envoyĂ© la rĂ©ponse synchrone Exemple 38, il doit relayer exactement le mĂȘme callback que dans Exemple 37 au FSP BankNrOne, qui doit alors rĂ©pondre de façon synchrone avec la mĂȘme rĂ©ponse que dans Exemple 38.
La requĂȘte et la rĂ©ponse HTTP ne sont pas rĂ©pĂ©tĂ©es ici, car identiques Ă la derniĂšre section, mais envoyĂ©es cette fois du Switch vers BankNrOne (requĂȘte HTTP Exemple 37) et de BankNrOne vers le Switch (rĂ©ponse HTTP Exemple 38).
# Envoi dâune demande de devis par le FSP BankNrOne : Ătape 9 du flux de bout en bout
AprĂšs avoir reçu les informations de partie via le callback PUT /parties/{Type}/{ID}, le FSP BankNrOne sait dĂ©sormais que le compte identifiĂ© par MSISDN et 123456789 existe et quâil est chez le FSP MobileMoney. Il connaĂźt aussi le nom du titulaire. Selon lâimplĂ©mentation, le nom du bĂ©nĂ©ficiaire visĂ© (Henrik Karlsson) pourrait ĂȘtre affichĂ© Ă Mats Hagman dĂšs cette Ă©tape, avant lâenvoi du devis. Dans cet exemple, une demande de devis est envoyĂ©e avant dâafficher le nom ou dâĂ©ventuels frais.
Le FSP BankNrOne envoie la requĂȘte HTTP prĂ©sentĂ©e dans Exemple 39 pour demander un devis. BankNrOne ne souhaite pas divulguer ses frais (voir Quoting pour plus dâinfos), il nâinclut donc pas lâĂ©lĂ©ment fees dans la demande. LâĂ©lĂ©ment amountType est positionnĂ© sur RECEIVE car Mats veut quâHenrik reçoive 100 USD. Le transactionType est dĂ©fini selon la Correspondance des cas dâusage avec les types de transaction. Les infos sur Mats sont envoyĂ©es dans lâĂ©lĂ©ment payer. BankNrOne a aussi gĂ©nĂ©rĂ© deux UUID pour lâID du devis (7c23e80c-d078-4077-8263-2c047876fcf6) et lâID de la transaction (85feac2f-39b2-491b-817e-4a03203d4f14). Ces identifiants doivent ĂȘtre uniques, voir Style architectural.
Voir Tableau 1 pour les en-tĂȘtes HTTP requis dans une requĂȘte, et Section 6.5.3.2 concernant le service POST /quotes. Plus dâinformations sur le routage via FSPIOP-Destination et FSPIOP-Source se trouvent dans Routage des flux d'appels avec FSPIOP Destination et FSPIOP Source. Des informations sur la nĂ©gociation de version API se trouvent dans NĂ©gociation de version entre client et serveur.
# Exemple 39
POST /quotes HTTP/1.1
Accept: application/vnd.interoperability.quotes+json;version=1
Content-Type: application/vnd.interoperability.quotes+json;version=1.0
Content-Length: 975
Date: Tue, 15 Nov 2017 10:13:40 GMT
FSPIOP-Source: BankNrOne
FSPIOP-Destination: MobileMoney
{
"quoteId": "7c23e80c-d078-4077-8263-2c047876fcf6",
"transactionId": "85feac2f-39b2-491b-817e-4a03203d4f14",
"payee": {
"partyIdInfo": {
"partyIdType": "MSISDN",
"partyIdentifier": "123456789",
"fspId": "MobileMoney"
}
},
"payer": {
"personalInfo": {
"complexName": {
"firstName": "Mats",
"lastName": "Hagman"
}
},
"partyIdInfo": {
"partyIdType": "IBAN",
"partyIdentifier": "SE4550000000058398257466",
"fspId": "BankNrOne"
}
},
"amountType": "RECEIVE",
"amount": {
"amount": "100",
"currency": "USD"
},
"transactionType": {
"scenario": "TRANSFER",
"initiator": "PAYER",
"initiatorType": "CONSUMER"
},
"note": "From Mats",
"expiration": "2017-11-15T22:17:28.985-01:00"
}
Exemple 39 â Demande de devis pour une transaction de 100 USD
Exemple 40 montre la rĂ©ponse HTTP synchrone dans laquelle le Switch accuse rĂ©ception immĂ©diatement (aprĂšs vĂ©rification des en-tĂȘtes, par exemple) de la requĂȘte HTTP illustrĂ©e dans Exemple 39.
Voir Tableau 3 pour les en-tĂȘtes HTTP requis dans une rĂ©ponse.
# Exemple 40
HTTP/1.1 202 Accepted
Content-Type: application/vnd.interoperability.quotes+json;version=1.0
Exemple 40 â RĂ©ponse synchrone Ă la demande de devis
# Transmission de la demande de devis par le Switch : Ătape 10 du flux de bout en bout
AprĂšs rĂ©ception de la demande de devis, Exemple 39, et lâenvoi de la rĂ©ponse synchrone Exemple 40, le Switch doit relayer la mĂȘme demande que dans Exemple 39 au FSP MobileMoney, lequel doit alors rĂ©pondre de maniĂšre synchrone avec la mĂȘme rĂ©ponse que dans Exemple 40.
La requĂȘte et la rĂ©ponse HTTP ne sont pas rĂ©pĂ©tĂ©es ici, car identiques Ă la derniĂšre section, mais cette fois du Switch vers MobileMoney (requĂȘte HTTP Exemple 39) puis de MobileMoney vers le Switch (rĂ©ponse HTTP Exemple 40).
# DĂ©termination des frais et de la commission FSP dans MobileMoney : Ătape 11 du flux de bout en bout
Quand le FSP MobileMoney a reçu la requĂȘte HTTP Exemple 39 et envoyĂ© la rĂ©ponse synchrone Exemple 40, il doit valider la requĂȘte puis calculer les frais applicables et/ou la commission FSP pour effectuer la transaction demandĂ©e via le devis.
Dans cet exemple, le FSP MobileMoney dĂ©cide de prendre 1 USD de commission car il va recevoir de lâargent, ce qui peut engendrer de futurs revenus (frais ultĂ©rieurs). Comme le bĂ©nĂ©ficiaire (Henrik Karlsson) doit recevoir 100 USD et que la commission FSP est de 1 USD, le FSP BankNrOne nâaura Ă transfĂ©rer que 99 USD au FSP MobileMoney (voir Non Disclosing Receive Amount pour lâĂ©quation). Les 99 USD sont renseignĂ©s dans lâĂ©lĂ©ment transferAmount du callback, câest donc le montant Ă transfĂ©rer plus tard entre FSPs.
Pour envoyer le callback, le FSP MobileMoney doit alors crĂ©er un paquet ILP (voir ILP Packet pour plus dâinfos) encodĂ© en base64url, car l'Ă©lĂ©ment ilpPacket du callback PUT /quotes/{ID} est dĂ©fini comme BinaryString. La maniĂšre de remplir ce paquet ILP est expliquĂ©e dans Interledger Payment Request. Lâadresse ILP dâHenrik dans le FSP MobileMoney est fixĂ©e Ă g.se.mobilemoney.msisdn.123456789 (voir ILP Addressing). Comme le montant du transfert est de 99 USD et que lâexposant du devise USD est 2, le montant renseignĂ© dans le paquet ILP est 9900 (99 * 10^2 = 9900). Lâautre Ă©lĂ©ment du paquet ILP est data. Comme expliquĂ© dans Interledger Payment Request, cet Ă©lĂ©ment doit contenir le modĂšle de donnĂ©es Transaction (voir Transaction). Avec les informations de la demande de devis, la Transaction dans cet exemple est illustrĂ©e dans Exemple 41. AprĂšs encodage base64url du paquet ILP complet avec amount, account et le data, cela donne lâĂ©lĂ©ment ilpPacket du callback PUT /quotes/{ID}.
Une fois le paquet ILP créé, la rĂ©alisation (fulfilment) et la condition sont gĂ©nĂ©rĂ©es selon lâalgorithme dĂ©fini dans Exemple 12. En utilisant un secret dâexemple gĂ©nĂ©rĂ© (voir Exemple 42), la rĂ©alisation devient celle de Exemple 43 aprĂšs execution de HMAC SHA-256 sur le paquet ILP avec ce secret comme clĂ© (le tout en base64url). Le FSP MobileMoney doit stocker la rĂ©alisation en base de donnĂ©es pour ne pas avoir Ă la rĂ©gĂ©nĂ©rer plus tard. La condition correspond au hash SHA-256 de la rĂ©alisation (voir Exemple 44, base64url).
Le callback complet envoyé en réponse à la demande de devis est présenté dans Exemple 45.
Voir Tableau 1 pour les en-tĂȘtes HTTP requis dans une requĂȘte, et PUT /quotes/{ID} pour plus dâinfos sur le callback. LâID dans lâURI doit ĂȘtre celui spĂ©cifiĂ© comme quote ID dans la demande de devis, ici 7c23e80c-d078-4077-8263-2c047876fcf6. Dans le callback, lâentĂȘte Accept ne doit pas ĂȘtre envoyĂ©. Les en-tĂȘtes HTTP FSPIOP-Destination et FSPIOP-Source sont inversĂ©s par rapport Ă la demande Exemple 39, conformĂ©ment Ă Routage des flux d'appels avec FSPIOP Destination et FSPIOP Source.
# Listing 41
{
"transactionId": "85feac2f-39b2-491b-817e-4a03203d4f14",
"quoteId": "7c23e80c-d078-4077-8263-2c047876fcf6",
"payee": {
"partyIdInfo": {
"partyIdType": "MSISDN",
"partyIdentifier": "123456789",
"fspId": "MobileMoney"
},
"personalInfo": {
"complexName": {
"firstName": "Henrik",
"lastName": "Karlsson"
}
}
},
"payer": {
"personalInfo": {
"complexName": {
"firstName": "Mats",
"lastName": "Hagman"
}
},
"partyIdInfo": {
"partyIdType": "IBAN",
"partyIdentifier": "SE4550000000058398257466",
"fspId": "BankNrOne"
}
},
"amount": {
"amount": "99",
"currency": "USD"
},
"transactionType": {
"scenario": "TRANSFER",
"initiator": "PAYER",
"initiatorType": "CONSUMER"
},
"note": "From Mats"
}
Liste 41 -- Objet JSON Transaction
# Listing 42
JdtBrN2tskq9fuFr6Kg6kdy8RANoZv6BqR9nSk3rUbY
Liste 42 -- Secret généré, encodé en base64url
# Listing 43
mhPUT9ZAwd-BXLfeSd7-YPh46rBWRNBiTCSWjpku90s
Liste 43 -- Fulfilment calculé à partir du paquet ILP et du secret, encodé en base64url
# Listing 44
fH9pAYDQbmoZLPbvv3CSW2RfjU4jvM4ApG\_fqGnR7Xs
Liste 44 -- Condition calculée à partir du fulfilment, encodée en base64url
# Listing 45
PUT /quotes/7c23e80c-d078-4077-8263-2c047876fcf6 HTTP/1.1
Content-Type: application/vnd.interoperability.quotes+json;version=1.0
Content-Length: 1802
Date: Tue, 15 Nov 2017 10:13:41 GMT
FSPIOP-Source: MobileMoney
FSPIOP-Destination: BankNrOne
{
"transferAmount": {
"amount": "99",
"currency": "USD"
},
"payeeReceiveAmount": {
"amount": "100",
"currency": "USD"
},
"expiration": "2017-11-15T14:17:09.663+01:00",
"ilpPacket": "AQAAAAAAACasIWcuc2UubW9iaWxlbW9uZXkubXNpc2RuLjEyMzQ1Njc4OY-
IEIXsNCiAgICAidHJhbnNhY3Rpb25JZCI6ICI4NWZlY-
WMyZi0zOWIyLTQ5MWItODE3ZS00YTAzMjAzZDRmMTQiLA0KICAgICJxdW90ZUlkIjogIjdjMjNlOD-
BjLWQwNzgtNDA3Ny04MjYzLTJjMDQ3ODc2ZmNmNiIsDQogICAgInBheWVlIjogew0KICAgICAgI-
CAicGFydHlJZEluZm8iOiB7DQogICAgICAgICAgICAicGFydHlJZFR5cGUiOiAiTVNJU0ROIiwNCiAgI-
CAgICAgICAgICJwYXJ0eUlkZW50aWZpZXIiOiAiMTIzNDU2Nzg5IiwNCiAgICAgICAgI-
CAgICJmc3BJZCI6ICJNb2JpbGVNb25leSINCiAgICAgICAgfSwNCiAgICAgI-
CAgInBlcnNvbmFsSW5mbyI6IHsNCiAgICAgICAgICAgICJjb21wbGV4TmFtZSI6IHsNCiAgICAgICAgI-
CAgICAgICAiZmlyc3ROYW1lIjogIkhlbnJpayIsDQogICAgICAgICAgICAgICAgImxhc3ROYW1lIjogIk-
thcmxzc29uIg0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfSwNCiAgICAicGF5ZXIi-
OiB7DQogICAgICAgICJwZXJzb25hbEluZm8iOiB7DQogICAgICAgICAgICAiY29tcGxleE5hbWUi-
OiB7DQogICAgICAgICAgICAgICAgImZpcnN0TmFtZSI6ICJNYXRzIiwNCiAgICAgICAgICAgICAgI-
CAibGFzdE5hbWUiOiAiSGFnbWFuIg0KICAgICAgICAgICAgfQ0KICAgICAgICB9LA0KICAgICAgI-
CAicGFydHlJZEluZm8iOiB7DQogICAgICAgICAgICAicGFydHlJZFR5cGUiOiAiSUJBTiIsDQogICAgI-
CAgICAgICAicGFydHlJZGVudGlmaWVyI-
jogIlNFNDU1MDAwMDAwMDA1ODM5ODI1NzQ2NiIsDQogICAgICAgICAgICAiZnNwSWQiOiAiQmFua05yT25
lIg0KICAgICAgICB9DQogICAgfSwNCiAgICAiYW1vdW50Ijogew0KICAgICAgICAiYW1vdW50IjogIjEw-
MCIsDQogICAgICAgICJjdXJyZW5jeSI6ICJVU0QiDQogICAgfSwNCiAgICAidHJhbnNhY3Rpb25UeXBlI-
jogew0KICAgICAgICAic2NlbmFyaW8iOiAiVFJBTlNGRVIiLA0KICAgICAgICAiaW5pdGlhdG9yI-
jogIlBBWUVSIiwNCiAgICAgICAgImluaXRpYXRvclR5cGUiOiAiQ09OU1VNRVIiDQogICAgfSwNCiAgI-
CAibm90ZSI6ICJGcm9tIE1hdHMiDQp9DQo\u003d\u003d",
"condition": "fH9pAYDQbmoZLPbvv3CSW2RfjU4jvM4ApG_fqGnR7Xs"
}
Liste 45 -- Callback du devis
Remarque : LâĂ©lĂ©ment ilpPacket dans la Liste 45 devrait ĂȘtre sur une seule ligne dans une vraie implĂ©mentation ; il est affichĂ© ici avec des sauts de ligne pour montrer toute la valeur.
La Liste 46 montre la rĂ©ponse HTTP synchrone oĂč le Switch accuse immĂ©diatement rĂ©ception (aprĂšs vĂ©rification basique des en-tĂȘtes requis, par exemple) du callback de la Liste 45.
Voir Tableau 3 pour les en-tĂȘtes HTTP requis dans une rĂ©ponse HTTP.
# Listing 46
HTTP/1.1 200 OK
Content-Type: application/vnd.interoperability.quotes+json;version=1.0
Liste 46 -- Réponse synchrone au callback de devis
# Transmission du callback au FSP BankNrOne : Ătape 12 du flux de bout en bout
Lorsque le Switch a reçu le callback de devis dans la Liste 45 et a envoyĂ© la rĂ©ponse synchrone dans la Liste 46, il doit relayer exactement le mĂȘme callback que dans la Liste 45 au FSP BankNrOne. Le FSP BankNrOne doit alors rĂ©pondre de maniĂšre synchrone avec la mĂȘme rĂ©ponse que dans la Liste 46.
La requĂȘte et la rĂ©ponse HTTP ne sont pas rĂ©pĂ©tĂ©es ici, car elles sont identiques Ă la section prĂ©cĂ©dente, mais cette fois-ci envoyĂ©es du Switch vers BankNrOne (requĂȘte HTTP de la Liste 45) puis de BankNrOne vers le Switch (rĂ©ponse HTTP de la Liste 46).
# DĂ©termination des frais dans le FSP BankNrOne : Ătape 13 du flux de bout en bout
Lorsque le FSP BankNrOne a reçu le callback du devis dans la Liste 45 et quâil a envoyĂ© la rĂ©ponse synchrone de la Liste 46, il peut alors dĂ©terminer les frais pour le payeur Mats Hagman. Dans cet exemple, les frais pour le payeur sont fixĂ©s Ă 0 USD, mais la commission du FSP reçue du FSP MobileMoney reste un revenu pour le FSP BankNrOne. Cela signifie que pour que le bĂ©nĂ©ficiaire Henrik Karlsson reçoive 100 USD, le payeur Mats Hagman doit transfĂ©rer 100 USD de son compte. 99 USD seront alors transfĂ©rĂ©s entre les FSPs BankNrOne et MobileMoney.
Le FSP BankNrOne notifie alors Mats Hagman que la transaction de transfert de 100 USD à Henrik Karlsson coûtera 0 USD de frais. La façon dont Mats Hagman est notifié est hors du champ de cette API.
# Acceptation de la transaction par le payeur : Ătape 14 du flux de bout en bout
Dans cet exemple, Mats Hagman accepte dâeffectuer la transaction. La maniĂšre dont lâacceptation est envoyĂ©e est hors du pĂ©rimĂštre de cette API.
# Envoi de la demande de transfert depuis FSP BankNrOne : Ătape 15 du flux de bout en bout
Une fois que Mats Hagman a acceptĂ© la transaction, le FSP BankNrOne rĂ©serve les mouvements internes nĂ©cessaires pour effectuer la transaction. Cela signifie que 100 USD seront rĂ©servĂ©s du compte de Mats Hagman, oĂč 1 USD sera un revenu pour le FSP et 99 USD seront transfĂ©rĂ©s au compte Switch prĂ©financĂ©. AprĂšs le succĂšs des rĂ©servations, le FSP BankNrOne envoie un POST /transfers au Switch comme dans la Liste 47. Les mĂȘmes Ă©lĂ©ments ilpPacket et condition sont envoyĂ©s comme reçus dans le callback de devis et le champ amount correspond au transferAmount reçu, voir Liste 45.
Voir Tableau 1 pour les en-tĂȘtes HTTP requis dans une requĂȘte et Post Transfers pour plus dâinformations sur le service POST /transfers. Davantage d'informations concernant le routage des requĂȘtes via FSPIOP-Destination et FSPIOP-Source peuvent ĂȘtre trouvĂ©es dans Routage des flux d'appels avec FSPIOP Destination et FSPIOP Source. Lâinformation sur la nĂ©gociation de version API se trouve dans NĂ©gociation de version entre client et serveur.
# Listing 47
POST /transfers HTTP/1.1
Accept: application/vnd.interoperability.transfers+json;version=1
Content-Type: application/vnd.interoperability.transfers+json;version=1.0
Content-Length: 1820
Date: Tue, 15 Nov 2017 10:14:01
FSPIOP-Source: BankNrOne
FSPIOP-Destination: MobileMoney
{
"transferId":"11436b17-c690-4a30-8505-42a2c4eafb9d",
"payerFsp":"BankNrOne",
"payeeFsp": "MobileMoney",
"amount": {
"amount": "99",
"currency": "USD"
},
"expiration": "2017-11-15T11:17:01.663+01:00",
"ilpPacket": "AQAAAAAAACasIWcuc2UubW9iaWxlbW9uZXkubXNpc2RuLjEyMzQ1Njc4OY-
IEIXsNCiAgICAidHJhbnNhY3Rpb25JZCI6ICI4NWZlY-
WMyZi0zOWIyLTQ5MWItODE3ZS00YTAzMjAzZDRmMTQiLA0KICAgICJxdW90ZUlkIjogIjdjMjNlOD-
BjLWQwNzgtNDA3Ny04MjYzLTJjMDQ3ODc2ZmNmNiIsDQogICAgInBheWVlIjogew0KICAgICAgI-
CAicGFydHlJZEluZm8iOiB7DQogICAgICAgICAgICAicGFydHlJZFR5cGUiOiAiTVNJU0ROIiwNCiAgI-
CAgICAgICAgICJwYXJ0eUlkZW50aWZpZXIiOiAiMTIzNDU2Nzg5IiwNCiAgICAgICAgI-
CAgICJmc3BJZCI6ICJNb2JpbGVNb25leSINCiAgICAgICAgfSwNCiAgICAgI-
CAgInBlcnNvbmFsSW5mbyI6IHsNCiAgICAgICAgICAgICJjb21wbGV4TmFtZSI6IHsNCiAgICAgICAgI-
CAgICAgICAiZmlyc3ROYW1lIjogIkhlbnJpayIsDQogICAgICAgICAgICAgICAgImxhc3ROYW1lIjogIk-
thcmxzc29uIg0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfSwNCiAgICAicGF5ZXIi-
OiB7DQogICAgICAgICJwZXJzb25hbEluZm8iOiB7DQogICAgICAgICAgICAiY29tcGxleE5hbWUi-
OiB7DQogICAgICAgICAgICAgICAgImZpcnN0TmFtZSI6ICJNYXRzIiwNCiAgICAgICAgICAgICAgI-
CAibGFzdE5hbWUiOiAiSGFnbWFuIg0KICAgICAgICAgICAgfQ0KICAgICAgICB9LA0KICAgICAgI-
CAicGFydHlJZEluZm8iOiB7DQogICAgICAgICAgICAicGFydHlJZFR5cGUiOiAiSUJBTiIsDQogICAgI- CAgICAgICAicGFydHlJZGVudGlmaWVyI-
jogIlNFNDU1MDAwMDAwMDA1ODM5ODI1NzQ2NiIsDQogICAgICAgICAgICAiZnNwSWQiOiAiQmFua05yT25 lIg0KICAgICAgICB9DQogICAgfSwNCiAgICAiYW1vdW50Ijogew0KICAgICAgICAiYW1vdW50IjogIjEw-
MCIsDQogICAgICAgICJjdXJyZW5jeSI6ICJVU0QiDQogICAgfSwNCiAgICAidHJhbnNhY3Rpb25UeXBlI-
jogew0KICAgICAgICAic2NlbmFyaW8iOiAiVFJBTlNGRVIiLA0KICAgICAgICAiaW5pdGlhdG9yI-
jogIlBBWUVSIiwNCiAgICAgICAgImluaXRpYXRvclR5cGUiOiAiQ09OU1VNRVIiDQogICAgfSwNCiAgI-
CAibm90ZSI6ICJGcm9tIE1hdHMiDQp9DQo\u003d\u003d",
"condition": "fH9pAYDQbmoZLPbvv3CSW2RfjU4jvM4ApG_fqGnR7Xs"
}
Liste 47 -- RequĂȘte de transfert de BankNrOne Ă MobileMoney
Remarque : LâĂ©lĂ©ment ilpPacket dans la Liste 47 devrait ĂȘtre sur une seule ligne dans une vraie implĂ©mentation ; il est affichĂ© ici avec des sauts de ligne pour montrer toute la valeur.
La Liste 48 montre la rĂ©ponse HTTP synchrone oĂč le Switch accuse rĂ©ception immĂ©diatement (aprĂšs une vĂ©rification Ă©lĂ©mentaire des en-tĂȘtes requis par exemple) de la requĂȘte HTTP dans la Liste 47.
Voir Tableau 3 pour les en-tĂȘtes HTTP requis dans une rĂ©ponse.
# Listing 48
HTTP/1.1 202 Accepted
Content-Type: application/vnd.interoperability.transfers+json;version=1.0
Liste 48 -- Réponse synchrone à la demande de transfert
# Envoi de la demande de transfert depuis le Switch : Ătape 16 du flux de bout en bout
Lorsque le Switch a reçu la demande de transfert dans la Liste 47 et envoyĂ© la rĂ©ponse synchrone dans la Liste 48, il doit rĂ©server le transfert du compte de BankNrOne vers le compte de MobileMoney au sein du Switch. AprĂšs succĂšs de la rĂ©servation, le Switch relaie quasiment la mĂȘme requĂȘte que dans la Liste 47 au FSP MobileMoney, Ă lâexception de lâĂ©lĂ©ment expiration qui doit ĂȘtre rĂ©duit, comme expliquĂ© dans Timeout and Expiry. La Liste 49 montre la requĂȘte HTTP avec lâexpiration rĂ©duite de 30 secondes par rapport Ă la Liste 47. Le FSP MobileMoney doit alors rĂ©pondre de façon synchrone avec la mĂȘme rĂ©ponse quâen Liste 48.
# Listing 49
POST /transfers HTTP/1.1
Accept: application/vnd.interoperability.transfers+json;version=1
Content-Type: application/vnd.interoperability.transfers+json;version=1.0
Content-Length: 1820
Date: Tue, 15 Nov 2017 10:14:01 GMT
FSPIOP-Source: BankNrOne
FSPIOP-Destination: MobileMoney
{
"transferId":"11436b17-c690-4a30-8505-42a2c4eafb9d",
"payerFsp":"BankNrOne",
"payeeFsp": "MobileMoney",
"amount": {
"amount": "99",
"currency": "USD"
},
"expiration": "2017-11-15T11:16:31.663+01:00",
"ilpPacket": "AQAAAAAAACasIWcuc2UubW9iaWxlbW9uZXkubXNpc2RuLjEyMzQ1Njc4OY-
IEIXsNCiAgICAidHJhbnNhY3Rpb25JZCI6ICI4NWZlY-
WMyZi0zOWIyLTQ5MWItODE3ZS00YTAzMjAzZDRmMTQiLA0KICAgICJxdW90ZUlkIjogIjdjMjNlOD-
BjLWQwNzgtNDA3Ny08MjYzLTJjMDQ3ODc2ZmNmNiIsDQogICAgInBheWVlIjogew0KICAgICAgI-
CAicGFydHlJZEluZm8iOiB7DQogICAgICAgICAgICAicGFydHlJZFR5cGUiOiAiTVNJU0ROIiwNCiAgI-
CAgICAgICAgICJwYXJ0eUlkZW50aWZpZXIiOiAiMTIzNDU2Nzg5IiwNCiAgICAgICAgI-
CAgICJmc3BJZCI6ICJNb2JpbGVNb25leSINCiAgICAgICAgfSwNCiAgICAgI-
CAgInBlcnNvbmFsSW5mbyI6IHsNCiAgICAgICAgICAgICJjb21wbGV4TmFtZSI6IHsNCiAgICAgICAgI-
CAgICAgICAiZmlyc3ROYW1lIjogIkhlbnJlayIsDQogICAgICAgICAgICAgICAgImxhc3ROYW1lIjogIk-
thcmxzc29uIg0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfSwNCiAgICAicGF5ZXIi-
OiB7DQogICAgICAgICJwZXJzb25hbEluZm8iOiB7DQogICAgICAgICAgICAiY29tcGxleE5hbWUi-
OiB7DQogICAgICAgICAgICAgICAgImZpcnN0TmFtZSI6ICJNYXRzIiwNCiAgICAgICAgICAgICAgI-
CAibGFzdE5hbWUiOiAiSGFnbWFuIg0KICAgICAgICAgICAgfQ0KICAgICAgICB9LA0KICAgICAgI-
CAicGFydHlJZEluZm8iOiB7DQogICAgICAgICAgICAicGFydHlJZFR5cGUiOiAiSUJBTiIsDQogICAgI-
CAgICAgICAicGFydHlJZGVudGlmaWVyI-
jogIlNFNDU1MDAwMDAwMDA1ODM5ODI1NzQ2NiIsDQogICAgICAgICAgICAiZnNwSWQiOiAiQmFua05yT25
lIg0KICAgICAgICB9DQogICAgfSwNCiAgICAiYW1vdW50Ijogew0KICAgICAgICAiYW1vdW50IjogIjEw-
MCIsDQogICAgICAgICJjdXJyZW5jeSI6ICJVU0QiDQogICAgfSwNCiAgICAidHJhbnNhY3Rpb25UeXBlI-
jogew0KICAgICAgICAic2NlbmFyaW8iOiAiVFJBTlNGRVIiLA0KICAgICAgICAiaW5pdGlhdG9yI-
jogIlBBWUVSIiwNCiAgICAgICAgImluaXRpYXRvclR5cGUiOiAiQ09OU1VNRVIiDQogICAgfSwNCiAgI-
CAibm90ZSI6ICJGcm9tIE1hdHMiDQp9DQo\u003d\u003d",
"condition": "fH9pAYDQbmoZLPbvv3CSW2RfjU4jvM4ApG_fqGnR7Xs"
}
Liste 49 -- RequĂȘte de transfert de BankNrOne Ă MobileMoney avec expiration rĂ©duite
Remarque : LâĂ©lĂ©ment ilpPacket dans la Liste 49 devrait ĂȘtre sur une seule ligne dans une vraie implĂ©mentation ; il est affichĂ© ici avec des sauts de ligne pour montrer toute la valeur.
# RĂ©alisation du transfert dans FSP MobileMoney : Ătape 17 du flux de bout en bout
Lorsque le FSP MobileMoney a reçu la requĂȘte de transfert dans la Liste 47, il doit effectuer le transfert comme dĂ©crit dans la prĂ©cĂ©dente demande de devis, ce qui signifie que 100 USD doivent ĂȘtre transfĂ©rĂ©s sur le compte de Henrik Karlsson, dont 99 USD depuis le compte Switch prĂ©financĂ© et 1 USD depuis un compte commission FSP.
Comme preuve de rĂ©alisation de la transaction, le FSP MobileMoney rĂ©cupĂšre alors le fulfilment stockĂ© (Liste 43) depuis la base de donnĂ©es (enregistrĂ© lors de la DĂ©termination des frais et de la commission FSP dans MobileMoney) et le place dans lâĂ©lĂ©ment fulfilment du callback PUT /transfers/{ID}. Le champ transferState est positionnĂ© Ă COMMITTED et completedTimestamp Ă la date de rĂ©alisation de la transaction ; voir Liste 50 pour la requĂȘte complĂšte.
En mĂȘme temps, une notification est envoyĂ©e au bĂ©nĂ©ficiaire Henrik Karlsson pour lâinformer quâil a reçu 100 USD de Mats Hagman.
La maniÚre dont est envoyée la notification est hors du périmÚtre de cette API.
Voir Tableau 1 pour les en-tĂȘtes HTTP requis dans une requĂȘte, et PUT /transfers/{ID} pour plus dâinfos sur le callback. LâID dans lâURI doit ĂȘtre celui prĂ©sent dans la demande de transfert, qui est dans lâexemple 11436b17-c690-4a30-8505-42a2c4eafb9d. Dans le callback, lâen-tĂȘte Accept ne doit pas ĂȘtre envoyĂ©. Les en-tĂȘtes HTTP FSPIOP-Destination et FSPIOP-Source sont maintenant inversĂ©s par rapport Ă la requĂȘte HTTP en Liste 47, comme dĂ©taillĂ© dans Routage des flux dâappels avec FSPIOP Destination et FSPIOP Source.
# Listing 50
PUT /transfers/11436b17-c690-4a30-8505-42a2c4eafb9d HTTP/1.1
Content-Type: application/vnd.interoperability.transfers+json;version=1.0
Content-Length: 166
Date: Tue, 15 Nov 2017 10:14:02 GMT
FSPIOP-Source: MobileMoney
FSPIOP-Destination: BankNrOne
{
"fulfilment": "mhPUT9ZAwd-BXLfeSd7-YPh46rBWRNBiTCSWjpku90s",
"completedTimestamp": "2017-11-16T04:15:35.513+01:00",
"transferState": "COMMITTED"
}
Liste 50 -- Callback pour la demande de transfert
La Liste 51 montre la rĂ©ponse HTTP synchrone dans laquelle le Switch accuse immĂ©diatement rĂ©ception (aprĂšs vĂ©rification basique des en-tĂȘtes requis par exemple) aprĂšs avoir reçu le callback de la Liste 50.
Voir Tableau 3 pour les en-tĂȘtes HTTP requis dans une rĂ©ponse HTTP.
# Listing 51
HTTP/1.1 200 OK
Content-Type: application/vnd.interoperability.transfers+json;version=1.0
Liste 51 -- Réponse synchrone au callback de transfert
# RĂ©ception de la notification de transaction par le bĂ©nĂ©ficiaire : Ătape 18 du flux de bout en bout
Le bénéficiaire Henrik Karlsson reçoit la notification de transaction et est ainsi informé du succÚs de la transaction.
# RĂ©alisation du transfert dans le Switch : Ătape 19 du flux de bout en bout
Lorsque le Switch a reçu le callback de la Liste 50 et envoyĂ© la rĂ©ponse synchrone de la Liste 51, il doit valider le fulfilment, effectuer le transfert rĂ©servĂ© antĂ©rieurement et relayer exactement le mĂȘme callback que dans la Liste 50 au FSP BankNrOne. BankNrOne doit alors rĂ©pondre de façon synchrone avec la mĂȘme rĂ©ponse que dans la Liste 51.
La validation du fulfilment se fait en calculant le hash SHA-256 du fulfilment et en sâassurant que le hash est Ă©gal Ă la condition reçue lors de la demande de transfert.
La requĂȘte et la rĂ©ponse HTTP ne sont pas rĂ©pĂ©tĂ©es ici car elles sont identiques Ă la section prĂ©cĂ©dente, mais cette fois envoyĂ©es du Switch vers BankNrOne (requĂȘte HTTP de la Liste 50) puis de BankNrOne vers le Switch (rĂ©ponse HTTP de la Liste 51).
# RĂ©alisation du transfert dans FSP BankNrOne : Ătape 20 du flux de bout en bout
Quand le FSP BankNrOne a reçu le callback de la Liste 50 et envoyé la réponse synchrone de la Liste 51, il doit valider le fulfilment (voir Section 10.4.16), puis effectuer le transfert réservé précédemment.
Une fois le transfert rĂ©servĂ© effectuĂ©, le payeur Mats Hagman doit ĂȘtre notifiĂ© du succĂšs de la transaction. La façon dont la notification est envoyĂ©e est hors du champ de cette API.
# RĂ©ception de la notification de transaction par le payeur : Ătape 21 du flux de bout en bout
Le payeur Mats Hagman reçoit la notification de transaction et est ainsi informé du succÚs de la transaction.
1 http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm (opens new window) -- Transfert de ReprĂ©sentation dâĂtat (REST)
2 https://tools.ietf.org/html/rfc4122 (opens new window) -- Espace de noms UUID (Identifiant Unique Universel)
3 https://tools.ietf.org/html/rfc7230 (opens new window) -- Hypertext Transfer Protocol (HTTP/1.1): Syntaxe des messages et routage
4 https://tools.ietf.org/html/rfc5246 (opens new window) -- Le protocole TLS (Transport Layer Security) â Version 1.2
5 https://tools.ietf.org/html/rfc3986 (opens new window) -- Uniform Resource Identifier (URI) : Syntaxe générique
6 https://tools.ietf.org/html/rfc7230#section-2.7.3 (opens new window) -- HTTP/1.1 : Normalisation et comparaison des URI http et https
7 https://tools.ietf.org/html/rfc3629 (opens new window) -- UTF-8, un format de transformation dâISO 10646
8 https://tools.ietf.org/html/rfc7159 (opens new window) -- Format dâĂ©change de donnĂ©es JSON
9 https://tools.ietf.org/html/rfc7230#section-3.2 (opens new window) -- HTTP/1.1 : Champs dâen-tĂȘte
10 https://tools.ietf.org/html/rfc7231#section-5.3.2 (opens new window) -- HTTP/1.1 : Accept
11 https://tools.ietf.org/html/rfc7230#section-3.3.2 (opens new window) -- HTTP/1.1 : Content-Length
12 https://tools.ietf.org/html/rfc7231#section-3.1.1.5 (opens new window) -- HTTP/1.1 : Content-Type
13 https://tools.ietf.org/html/rfc7231#section-7.1.1.2 (opens new window) -- HTTP/1.1 : Date
14 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-For (opens new window) -- X-Forwarded-For
15 https://tools.ietf.org/html/rfc7239 (opens new window) -- Extension HTTP Forwarded
16 https://tools.ietf.org/html/rfc7230#section-3.3.2 (opens new window) -- HTTP/1.1 : Content-Length
17 https://tools.ietf.org/html/rfc7231#section-3.1.1.5 (opens new window) -- HTTP/1.1 : Content-Type
18 https://tools.ietf.org/html/rfc7231#section-4 (opens new window) -- HTTP/1.1 : MĂ©thodes de requĂȘte
19 https://tools.ietf.org/html/rfc7231#section-6 (opens new window) -- HTTP/1.1 : Codes dâĂ©tat de rĂ©ponse
20 https://tools.ietf.org/html/rfc7231#section-6.4 (opens new window) -- HTTP/1.1 : Redirection 3xx
21 https://tools.ietf.org/html/rfc7231#section-6.6 (opens new window) -- HTTP/1.1 : Erreur serveur 5xx
22 https://tools.ietf.org/html/rfc7231#section-6.5.6 (opens new window) -- HTTP/1.1 : 406 Non Acceptable
23 https://tools.ietf.org/html/rfc7231#section-5.3.2 (opens new window) -- HTTP/1.1 : Accept
24 https://interledger.org/rfcs/0011-interledger-payment-request/ (opens new window) -- Demande de paiement Interledger (IPR)
25 https://interledger.org/ (opens new window) -- Interledger
26 https://interledger.org/interledger.pdf (opens new window) -- Un protocole pour les paiements Interledger
27 https://interledger.org/rfcs/0001-interledger-architecture/ (opens new window) -- Architecture Interledger
28 https://interledger.org/rfcs/0015-ilp-addresses/ (opens new window) -- Adresses ILP
29 https://www.itu.int/rec/dologin_pub.asp?lang=e&id=T-REC-X.696-201508-I!!PDF-E&type=items (opens new window) -- RĂšgles dâencodage ASN.1 : SpĂ©cification des Octet Encoding Rules (OER)
30 https://perldoc.perl.org/perlre.html#Regular-Expressions (opens new window) -- perlre - Expressions réguliÚres Perl
31 https://tools.ietf.org/html/rfc7159#section-7 (opens new window) -- JSON : ChaĂźnes
32 http://www.unicode.org/ (opens new window) -- Le consortium Unicode
33 https://www.iso.org/iso-8601-date-and-time-format.html (opens new window) -- Format de date et dâheure - ISO 8601
34 https://tools.ietf.org/html/rfc4122 (opens new window) -- Espace de noms UUID (Identifiant Unique Universel)
35 https://tools.ietf.org/html/rfc4648#section-5 (opens new window) -- Encodages Base16, Base32 et Base64 - Base64 compatible URL et nom de fichier
36 https://www.iso.org/iso-4217-currency-codes.html (opens new window) -- Codes de devises - ISO 4217
37 https://www.itu.int/rec/T-REC-E.164/en (opens new window) -- E.164 : Plan international de numérotation téléphonique publique
38 https://tools.ietf.org/html/rfc3696 (opens new window) -- Techniques dâapplication pour la vĂ©rification et la transformation des noms
39 https://tools.ietf.org/html/rfc7231#section-6.5 (opens new window) -- HTTP/1.1 : Erreur client 4xx
â API FSPIOP v1.0 â
