Pagamentos
Pagamentos com Wealth Reader
Wealth Reader permite preparar uma ordem de pagamento imutável a partir do backend e completar a autorização bancária em um widget seguro dedicado (PSD2 /PIS - Serviços de Iniciação de Pagamento). A chave de acesso API, contas sensíveis de beneficiários e detalhes de conexão interna nunca são entregues ao navegador.
O sandbox determinístico permite a integração sem movimentar dinheiro real, mas não é ativado por um parâmetro: é uma implantação separada, com URL base e credencial próprias, fornecidas pela Wealth Reader mediante solicitação (veja Segurança e Testes). No sandbox, profile-institutions retorna uma única instituição simulada. O campo expected_mode não muda o ambiente: apenas verifica se a chamada está sendo feita ao ambiente esperado e retorna 409 payment_mode_mismatch se não houver correspondência.
A disponibilidade de um banco para agregação não implica a mesma disponibilidade para iniciação de pagamento. Na produção, o catálogo Wealth Reader de instituições oferece cobertura na Espanha e em toda a Europa.
Arquitetura em dois passos
A integração de pagamentos segue uma separação rigorosa de responsabilidades em duas etapas:
sequenceDiagram autonumber actor Usuario as Usuário participant Front as Frontend (Comércio) participant Back as Backend (Comércio) participant API as API Wealth Reader participant Widget as Pagamentos por Widgets participant Banco as Banco (SCA) Note over Back,API: Etapa anterior (apenas perfis gerenciados) Back->>API: POST /payments/?action=profile-institutions API-->>Back: Catálogo de Perfis (institution_code) Note over Back,API: Passo 1: Criando a Intenção Imutável (Servidor para Servidor) Back->>API: POST /payments/?action=create (com X-API-Key e Idempotency-Key) API-->>Back: 201 com payment.id + payment.widget.token efêmero Note over Front,Widget: Passo 2: Carregue e autorize no widget (navegador) Back->>Front: Entrega payment.id e payment.widget.token Front->>Widget: WealthReaderPayments.mount(...) ou load-payments.js Widget->>Usuario: Exibe instituição, valor e descrição do pagamento imutáveis Usuario->>Widget: Autorizar pagamento Widget->>Banco: Redirecionar / Aplicativo para Aplicativo (SCA) Banco->>API: Retorno da SCA ao callback de Wealth Reader API-->>Widget: Confirmação técnica da autorização Note over Back,API: Reconciliação Financeira e Confirmação loop Para o estado terminal Back->>API: POST /payments/?action=status API-->>Back: payment_status: not_initiated | pending | settled | ... end
- Passo 1 (Backend Seguro): Seu servidor cria uma intenção de pagamento (
POST /payments/?action=create) com seuX-API-Key, umIdempotency-KeyeContent-Type: application/json. Nessa chamada, o valor (amount_minor, em centavos), a moeda (currency, hoje apenasEUR), o beneficiário (beneficiary.nameebeneficiary.iban), a descrição exibida no extrato (reference), sua referência interna (customer_reference) e a origem web permitida (allowed_origin) são fixos de forma imutável. Esses seis campos são obrigatórios, e o corpo é uma lista branca rígida: qualquer campo não reconhecido retorna422 invalid_request. - Resposta:
201com{"success": true, "payment": {…}}— ou200se for uma repetição idempotente. A ID de intenção vem empayment.ide a token efêmera do widget empayment.widget.token. - Passo 2 (Frontend da operação): O navegador monta o widget usando o script oficial de
load-payments.jsou a funçãoWealthReaderPayments.mount(), entregando apenas opayment.ide opayment.widget.token. O usuário seleciona seu banco (se não foi pré-selecionado na intenção) e completa a autenticação forte (SCA) na interface bancária. - Confirmação financeira: Seu backend consulta o estado usando
POST /payments/?action=status, cujo corpo é exatamente{"payment_intent_id": "<id>"}. Sem webhook: ele consulta até atingir um estado terminal.
Dois modelos de pagamento
Wealth Reader suporta dois modelos dependendo das necessidades do negócio:
- Integração padrão para comerciantes (Beneficiário próprio):
- O comerciante define livremente o nome e a IBAN do beneficiário, o montante, a moeda (
EUR), o conceito e sua referência à ordem. - Você pode filtrar quais bancos disponibilizar ao usuário usando
allowed_institution_codesou permitir o catálogo completo.
- O comerciante define livremente o nome e a IBAN do beneficiário, o montante, a moeda (
- Perfis gerenciados (como
cruz_roja_demo):- Projetado para doações e demonstrações públicas.
- O servidor define as contas oficiais de destino para garantir que os fundos só possam ser direcionados à instituição de caridade (por exemplo, a Cruz Vermelha Espanhola com valores entre
0,01 EURe1,00 EUR).
Diretório unificado de entidades bancárias
Wealth Reader fornece um catálogo unificado de entidades europeias preparadas para a iniciação de pagamentos via PSD2 por meio de:
GET https://api.wealthreader.com/payments/entities/?country=ES
Ele permite obter a lista de bancos com seus nomes padronizados, logotipos, métodos de transferência suportados e requisitos técnicos (como a necessidade de solicitar a IBAN do devedor ao pagador). Ele suporta os filtros country, search (alias q), code, payment_method, limit e offset.
Esse endpoint é público: não requer X-API-Key. Enviar não contribui com nada e consome uma chamada da sua cota de chamadas da credencial.
Sempre use esses códigos conforme vêm code. Criar a intenção valida a formatação allowed_institution_codes, mas não verifica se eles existem no catálogo: código com erros de ortografia não falha na criação e aparece depois como um coletor de banco vazio.
interaction_status: completed indica apenas que a interação técnica na tela terminou. O pagamento só é considerado definitivamente liquidado quando payment_status vale settled. Os valores possíveis de payment_status são not_initiated, pending, settled, rejected, cancelled, expired, failed e unknown; ele os detalha Status, consultas periódicas de status e reconciliação.
Separação de responsabilidades
- A chave de acesso ao pagamento (
X-API-Key) é usada apenas de servidor para servidor. Ela nunca deve ser incluída em repositórios frontend ou públicos. - O navegador recebe apenas o identificador da intenção e uma token efêmera de curta duração vinculada à origem HTTPS.
- O widget não pode alterar o valor, moeda, beneficiário, conceito ou instituições autorizadas.
- Fechar o modal ou widget não substitui consultar o estado financeiro do pagamento no backend.
- Pagamentos não compartilham chaves de acesso, tokens ou callbacks com o produto de agregação bancária da Wealth Reader.
Credenciais e cota de chamadas
Sua chave de pagamento deve ter o produto PAYMENTS ativado; caso contrário, a API responde 403 payments_not_allowed. Uma chave de acesso faltando ou formatada incorretamente retorna 401 invalid_api_key.
Cada chamada autenticada consome uma unidade do contador cumulativo da sua chave de API . É um contador vitalício, sem janela de tempo e sem reposição automática: quando acaba, todas as chamadas de pagamento atendem 429 api_limit_reached permanentemente até que o limite seja estendido. Isso não é resolvido esperando ou tentando novamente. Se você prevê alto volume — ou uma demonstração pública, onde cada carregamento de página consume uma chamada — concorde com o limite com Wealth Reader antes de publicar.
Próximo passo
Continue com Integração e widget.