Paiements
Paiements avec Wealth Reader
Wealth Reader vous permet de préparer un ordre de paiement immuable depuis le backend et de compléter l’autorisation bancaire dans un widget sécurisé dédié (PSD2 / PIS – Payment Initiation Services). La clé API, les comptes de bénéficiaires sensibles et les informations de connexion interne ne sont jamais transmis au navigateur.
Le bac à sable déterministe permet l’intégration sans déplacer de l’argent réel, mais il ne s’active pas avec un paramètre : il s’agit d’un déploiement distinct, avec sa propre URL de base et sa propre clé d’accès, que Wealth Reader fournit sur demande (voir Sécurité et tests). Dans le sandbox, profile-institutions retourne une seule institution simulée. Le champ expected_mode ne change pas son environnement : il vérifie seulement que vous ciblez l’environnement attendu, et renvoie 409 payment_mode_mismatch s’il ne correspond pas.
La disponibilité d’une banque pour l’agrégation n’implique pas la même disponibilité pour l’initiation des paiements. En production, le catalogue Wealth Reader des institutions offre une couverture en Espagne et dans toute l’Europe.
L’architecture en deux étapes
L’intégration des paiements suit une stricte séparation des responsabilités en deux étapes :
sequenceDiagram autonumber actor Usuario as Utilisateur participant Front as Frontend (Commerce) participant Back as Backend (Commerce) participant API as API Wealth Reader participant Widget as Widget de paiement participant Banco as Banque (SCA) Note over Back,API: Étape précédente (profils gérés uniquement) Back->>API: POST /payments/?action=profile-institutions API-->>Back: Catalogue de profils (institution_code) Note over Back,API: Étape 1 : Créer l’intention immuable (serveur à serveur) Back->>API: POST /payments/?action=create (avec X-API-Key et Idempotency-Key) API-->>Back: 201 avec payment.id + payment.widget.token éphémère Note over Front,Widget: Étape 2 : Charger et autoriser dans le widget (navigateur) Back->>Front: Livraison payment.id et payment.widget.token Front->>Widget: WealthReaderPayments.mount(...) ou load-payments.js Widget->>Usuario: Affiche une institution, un montant et un libellé immuables Usuario->>Widget: Autoriser le paiement Widget->>Banco: Rediriger / Application vers Application (SCA) Banco->>API: Retour de la SCA à la callback de Wealth Reader API-->>Widget: Confirmation technique de l’autorisation Note over Back,API: Réconciliation financière et confirmation loop Vers l’état terminal Back->>API: POST /payments/?action=status API-->>Back: payment_status: not_initiated | pending | settled | ... end
- Étape 1 (Backend sécurisé): Votre serveur crée un Intention de paiement (
POST /payments/?action=create) avec sesX-API-Key, unIdempotency-KeyetContent-Type: application/json. Dans cet appel, le montant (amount_minor, en cents), la devise (currency, aujourd’hui seulementEUR), le bénéficiaire (beneficiary.nameetbeneficiary.iban), le libellé du relevé (reference), sa référence interne (customer_reference) et l’origine web autorisée (allowed_origin) sont fixés de manière immuable. Ces six champs sont obligatoires, et le corps est une liste blanche stricte : tout champ non reconnu retourne422 invalid_request. - Réponse:
201avec{"success": true, "payment": {…}}— ou200s’il s’agit d’une répétition idempotente. L’identifiant d’intention entre en jeupayment.idet le jeton éphémère du widget danspayment.widget.token. - Étape 2 (Frontend du commerçant): Le navigateur monte le widget en utilisant le script officiel de
load-payments.jsou la fonctionWealthReaderPayments.mount(), fournissant ainsi seulement lapayment.idetpayment.widget.token. L’utilisateur sélectionne sa banque (si elle n’a pas été présélectionnée dans l’intention) et effectue l’authentification forte (SCA) dans l’interface bancaire. - Confirmation financière: Votre backend interroge l’état via
POST /payments/?action=status, dont le corps est exactement{"payment_intent_id": "<id>"}. Pas de webhook : Il interroge jusqu’à atteindre un état terminal.
Deux modèles de paiement
Wealth Reader prend en charge deux modèles selon les besoins de l’entreprise :
- Intégration standard pour les commerçants (Propre bénéficiaire):
- Le marchand définit librement le nom et l’IBAN du bénéficiaire, le montant, la devise (
EUR), le libellé et sa référence de commande. - Vous pouvez filtrer quelles banques rendre disponibles à l’utilisateur via
allowed_institution_codesou autoriser l’ensemble du catalogue.
- Le marchand définit librement le nom et l’IBAN du bénéficiaire, le montant, la devise (
- Profils gérés (comme
cruz_roja_demo):- Conçu pour les dons et les démonstrations publiques.
- Le serveur configure les comptes officiels de destination pour garantir que les fonds ne puissent être dirigés qu’à l’association caritative (par exemple, la Croix-Rouge espagnole avec des montants compris entre
0,01 EURet1,00 EUR).
Annuaire unifié des entités bancaires
Wealth Reader fournit un catalogue unifié des entités européennes préparées à l’initiation des paiements via PSD2 via :
GET https://api.wealthreader.com/payments/entities/?country=ES
Il permet d’obtenir la liste des banques avec leurs noms standardisés, logos, méthodes de transfert prises en charge et exigences techniques (comme la nécessité de demander l’IBAN du débiteur auprès du payeur). Il prend en charge les filtres country, search (alias q), code, payment_method, limit et offset.
Ce point final est Public : Aucune X-API-Key requise. L’envoyer n’apporte rien et consomme un appel de votre quota de votre clé d’accès.
Utilisez les codes exactement tels qu’ils sont retournés dans code. La création de l’intention valide le format de allowed_institution_codes, mais ne vérifie pas leur présence dans le catalogue : un code mal orthographié ne donne pas d’erreur lors de la création et apparaît plus tard comme un sélecteur de banque vide.
interaction_status: completed indique seulement que l’interaction technique à l’écran est terminée. Le paiement n’est considéré comme définitif que lorsque payment_status vaut settled. Les valeurs possibles des payment_status sont not_initiated, pending, settled, rejected, cancelled, expired, failed et unknown; il les détaille États, interrogation périodique et rapprochement.
Séparation des responsabilités
- L’accréditation de paiement (
X-API-Key) est utilisée Serveur à serveur uniquement. Il ne devrait jamais être inclus dans les dépôts frontend ou publics. - Le navigateur ne reçoit que l’identifiant d’intention et un jeton éphémère de courte durée lié à l’origine HTTPS.
- Le widget ne peut pas modifier le montant, la devise, le bénéficiaire, le concept ou les institutions autorisées.
- Fermer le modal ou le widget ne remplace pas la requête de l’état financier en arrière-plan.
- Les paiements ne partagent pas les identifiants, jetons ou rappels avec le produit d’agrégation bancaire de Wealth Reader.
Clés d’accès et quota
Votre identifiant de paiement doit avoir le produit PAYMENTS activé ; sinon, l’API répond 403 payments_not_allowed. Un identifiant manquant ou mal formaté renvoie 401 invalid_api_key.
Chaque appel authentifié consomme une unité du compteur cumulatif de sa clé API. C’est un compteur à vie, sans fenêtre temporelle ni renouvellement automatique : quand il est épuisé, tous les appels de paiement répondent 429 api_limit_reached de façon permanente jusqu’à ce que la limite soit prolongée. Cela ne se résout pas en attendant ou en réessayant. Si vous anticipez un volume élevé — ou une démo publique, où chaque chargement de page consomme un appel — convenez de la limite avec Wealth Reader avant de publier.
Étape suivante
Continuer avec Intégration et widget.