Skip to content

Pagamento via Carteira Digital

Visão Geral

Tela dedicada ao pagamento com Apple Pay ou Google Pay via Mercado Pago Checkout Bricks. Só é acessada quando o cliente escolhe "📱 Carteira" no CheckoutView.

Localização

frontend-react/src/views/customer/WalletPaymentView.tsx

Rotas

RotaContexto
/t/:slug/wallet-payCheckout direto (cardápio digital)
/t/:slug/b/:pdvSlug/wallet-payCheckout via kiosk de PDV

A view espera receber dados via useLocation().state (React Router):

ts
{
  orderData: {
    customerName: string;
    customerPhone: string;
    customerEmail?: string;
    type: 'dine_in' | 'takeout';
    notes?: string;
    items: Array<{ menuItemId: string; quantity: number; notes?: string }>;
    paymentMethod: 'wallet';
  };
  total: number;
}

Se state estiver ausente (acesso direto à URL), a view redireciona para /t/:slug/checkout.

Dependência: SDK Mercado Pago

bash
npm install @mercadopago/sdk-react
ts
import { initMercadoPago, Payment } from '@mercadopago/sdk-react';

Fluxo de Estados

1. Carregando config
   GET /t/:slug/checkout/config → { mpPublicKey }


2. Brick visível
   initMercadoPago(mpPublicKey, { locale: 'pt-BR' })
   <Payment> brick renderiza Apple Pay / Google Pay / cartão online


3. Cliente autentica (biometria ou dados de cartão)
   onSubmit(formData) chamado pelo brick


4. Processando
   POST /t/:slug/checkout/wallet-payment
   { ...orderData, token, payment_method_id, issuer_id, payer }

   ├── approved → OrderConfirmation (número do pedido)
   └── rejected → mensagem de erro, brick reaparece para retry

Endpoints

GET /t/:slug/checkout/config

Retorna a chave pública do MP para inicializar o brick no frontend.

  • Rota pública (sem autenticação)
  • Resposta: { mpPublicKey: string | null }

POST /t/:slug/checkout/wallet-payment

Cria o pedido após aprovação do pagamento.

  • Rota pública (sem autenticação)
  • Corpo: WalletPaymentDto (dados do cliente + itens do carrinho + token gerado pelo brick)
  • Resposta em sucesso: { orderNumber: string, status: 'approved' }
  • Resposta em falha: { status: 'rejected', message: string }

Detecção de Wallet

O brick do Mercado Pago chama canMakePayment() internamente:

  • iPhone / Safari com Apple Pay configurado → botão Apple Pay
  • Android / Chrome com Google Pay configurado → botão Google Pay
  • Desktop ou kiosk sem wallet → formulário de cartão online

O componente não precisa verificar a disponibilidade manualmente — o brick cuida disso.

Fallback

Se mpPublicKey for null (tenant sem configuração), a view exibe um aviso e redireciona automaticamente para /t/:slug/checkout após 3 segundos.

Relacionados

Lançado sob a licença MIT.