Plăți
Plăți cu Wealth Reader
Wealth Reader permite pregătirea unui ordin de plată imuabil din backend și completarea autorizării bancare într-un widget dedicat securizat (PSD2 /PIS - Servicii de inițiere a plății). Cheia de acces API, conturile sensibile ale beneficiarilor și detaliile de conexiune internă nu sunt niciodată livrate browserului.
Sandbox-ul determinist permite integrarea fără a muta bani reali, dar nu este activat printr-un parametru: este o implementare diferită, cu propriul URL de bază și propria cheie de acces, care Wealth Reader furnizată la cerere (vezi Securitate și testare). În sandbox, o singură entitate simulată profile-institutions returnată. Câmpul expected_mode nu își schimbă mediul: verifică doar dacă apelezi mediul așteptat și returnează 409 payment_mode_mismatch dacă nu se potrivește.
Disponibilitatea unei bănci pentru agregare nu implică aceeași disponibilitate pentru inițierea plății. În producție, catalogul Wealth Reader instituțiilor oferă acoperire în Spania și în întreaga Europă.
Arhitectura în doi pași
Integrarea plăților urmează o separare strictă a responsabilităților în doi pași:
sequenceDiagram autonumber actor Usuario as Utilizator participant Front as Frontend (Comerț) participant Back as Backend (Comerț) participant API as API Wealth Reader participant Widget as Plăți prin widget-uri participant Banco as Bancă (SCA) Note over Back,API: Pasul anterior (doar profiluri gestionate) Back->>API: POST /payments/?action=profile-institutions API-->>Back: Catalog de profil (institution_code) Note over Back,API: Pasul 1: Crearea intenției imuabile (Server-la-server) Back->>API: POST /payments/?action=create (cu X-API-Key și Idempotency-Key) API-->>Back: 201 cu payment.id + payment.widget.token efemer Note over Front,Widget: Pasul 2: Încarcă și autorizează în widget (browser) Back->>Front: Livrarea payment.id și payment.widget.token Front->>Widget: WealthReaderPayments.mount(...) sau load-payments.js Widget->>Usuario: Are o entitate, o cantitate și un concept imutable Usuario->>Widget: Autorizarea plății Widget->>Banco: Redirecționează / Aplicație către aplicație (SCA) Banco->>API: Întoarcerea SCA la callback Wealth Reader API-->>Widget: Confirmare tehnică a autorizării Note over Back,API: Reconciliere și confirmare financiară loop Până la starea terminală Back->>API: POST /payments/?action=status API-->>Back: payment_status: not_initiated | pending | settled | ... end
- Pasul 1 (Backend securizat): Serverul tău creează o intenție de plată (
POST /payments/?action=create) cuX-API-Key, unIdempotency-KeyșiContent-Type: application/json. În acest apel, suma (amount_minor, în cenți), moneda (currency, astăzi doarEUR), beneficiarul (beneficiary.nameșibeneficiary.iban), conceptul extrasului (reference), referința sa internă (customer_reference) și originea web permisă (allowed_origin) sunt fixate imuabil. Aceste șase câmpuri sunt obligatorii, iar corpul este o listă albă strictă: orice câmp nerecunoscut returnează422 invalid_request. - Răspuns:
201cu{"success": true, "payment": {…}}— sau200dacă este o repetiție idempotentă. ID-ul intenției apare înpayment.id, iar token efemer al widget-ului înpayment.widget.token. - Pasul 2 (Frontend al tranzacției): Browserul montează widget-ul folosind scriptul oficial
load-payments.jssau funcțiaWealthReaderPayments.mount(), livrând doarpayment.idșipayment.widget.token. Utilizatorul își selectează banca (dacă nu a fost preselectată în intenție) și completează autentificarea puternică (SCA) în interfața bancară. - Confirmare financiară: Backend-ul tău interoghează starea plății folosind
POST /payments/?action=status, al cărui corp este exact{"payment_intent_id": "<id>"}. Fără webhook: Interogează până ajunge la o stare terminală.
Două modele de plată
Wealth Reader susține două modele, în funcție de nevoile afacerii:
- Integrare standard pentru comercianți (beneficiar propriu):
- Negustorul definește liber numele și IBAN beneficiarului, suma, moneda (
EUR), conceptul și referința ordinului său. - Poți filtra ce bănci să pui la dispoziția utilizatorului folosind
allowed_institution_codessau poți permite întregul catalog.
- Negustorul definește liber numele și IBAN beneficiarului, suma, moneda (
- Profiluri gestionate (cum ar fi
cruz_roja_demo):- Concepută pentru donații și demonstrații publice.
- Serverul setează conturile oficiale de destinație pentru a se asigura că fondurile pot fi direcționate doar către organizația caritabilă (de exemplu, Crucea Roșie Spaniolă cu sume între
0,01 EURși1,00 EUR).
Directorul unificat al entităților bancare
Wealth Reader oferă un catalog unificat al entităților europene pregătite pentru inițierea plății prin PSD2 prin:
GET https://api.wealthreader.com/payments/entities/?country=ES
Îți permite să obții lista băncilor cu denumirile lor standardizate, logo-urile, metodele de transfer suportate și cerințele tehnice (cum ar fi necesitatea de a solicita IBAN debitorului de la plătitor). Suportă filtrele country, search (alias q), code, payment_method, limit și offset.
Acest endpoint este public: nu necesită X-API-Key. Trimiterea nu contribuie cu nimic și consumă un apel din cota ta de parolă.
Folosește întotdeauna aceste coduri pe măsură ce vin în code. Crearea intenției validează formatarea allowed_institution_codes, dar nu verifică dacă acestea există în catalog: codul greșit nu dă greșit la creare și apare ulterior ca un colector bancar gol.
interaction_status: completed indică doar că interacțiunea tehnică de pe ecran s-a încheiat. Plata este considerată fermă doar atunci când payment_status valorează settled. Valorile posibile ale payment_status sunt not_initiated, pending settled, rejected, cancelled, expired, failed și unknown; le detaliază Statusuri, consultări periodice privind statutul și reconciliere.
Separarea responsabilităților
- Cheia de acces la plată (
X-API-Key) este folosită doar de la un server la altul. Nu ar trebui niciodată inclusă în frontend-ul sau în depozitele publice. - Browserul primește doar identificatorul intenției și un token efemer de scurtă durată legat de originea HTTPS.
- Widgetul nu poate modifica suma, moneda, beneficiarul, conceptul sau instituțiile autorizate.
- Închiderea ferestrei modale sau a widget-ului nu înlocuiește interogarea situației financiare în backend.
- Plățile nu partajează cheile de acces, token-urile sau callback-urile cu produsul de agregare bancară al Wealth Reader.
Date de autentificare și cotă de apeluri
Cheia ta de acces pentru plăți trebuie să aibă produsul PAYMENTS activat; dacă nu, API răspunde 403 payments_not_allowed. O cheie de acces lipsă sau formatată incorect returnează 401 invalid_api_key.
Fiecare apel autentificat consumă o unitate din contorul cumulativ al cheii API tale. Este un contor pe viață, fără fereastră de timp și fără reumple automată: când se termină, toate apelurile de plată răspund 429 api_limit_reached permanent până când limita este extinsă. Nu se rezolvă așteptând sau încercând din nou. Dacă anticipezi un volum mare — sau o demonstrație publică, unde fiecare încărcare de pagină consumă un apel — ajunge la un acord asupra limitei cu Wealth Reader înainte de publicare.
Pasul următor
Continuă cu Integrare și widget.