Skip to content

Rellyso/payment-widget-sdk

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Ā 

History

29 Commits
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 

Repository files navigation

šŸ’³ CartĆ£o Simples - Payment Widget White-Label

Um widget de pagamento white-label completo para o Cartão Simples, que pode ser integrado em qualquer site via CDN ou usado como SDK npm. Suporta Shadow DOM, acessibilidade completa, e configuração de tema customizada.

šŸš€ CaracterĆ­sticas

  • āœ… Widget White-Label com temas customizĆ”veis
  • āœ… Bootstrap leve (1.8KB gzipped) com carregamento assĆ­ncrono
  • āœ… Shadow DOM com fallback para iframe sandbox
  • āœ… MĆŗltiplos formatos: SDK npm + CDN
  • āœ… Acessibilidade completa (ARIA, foco, teclado)
  • āœ… ValidaƧƵes robustas com Zod + React Hook Form
  • āœ… TypeScript com tipagem completa
  • āœ… AnimaƧƵes suaves com Framer Motion
  • āœ… Responsivo e otimizado para mobile

šŸ“¦ Instalação e Uso

1. Uso via CDN (Mais simples)

Adicione o snippet no seu HTML:

<script
  src="https://cdn.cartaosimples.com/widget-bootstrap.v1.min.js"
  data-merchant-id="seu-merchant-123"
  data-primary="#FF6600"
  data-secondary="#0A0A0A"
  data-logo="https://seusite.com/logo.png"
  data-border-radius="12px"
  data-env="production"
  async
></script>

Ou usando configuração via JavaScript:

<script
  src="https://cdn.cartaosimples.com/widget-bootstrap.v1.min.js"
  async
></script>
<script>
  window.PaymentWidgetInit = {
    orderId: "seu-merchant-123",
    primaryColor: "#FF6600",
    logoUrl: "https://seusite.com/logo.png",
    apiBaseUrl: "https://api.cartaosimples.com",
    onSuccess: (data) => {
      console.log("Pagamento realizado:", data);
    },
    onError: (error) => {
      console.error("Erro:", error);
    },
  };
</script>

2. Uso como SDK npm

npm install cartao-simples-widget

Para React:

import { PaymentWidget } from "cartao-simples-widget";

function App() {
  return (
    <PaymentWidget
      config={{
        orderId: "seu-merchant-123",
        primaryColor: "#FF6600",
        onSuccess: (data) => console.log("Sucesso:", data),
        onError: (error) => console.error("Erro:", error),
      }}
    />
  );
}

Para Vanilla JS:

import { mount } from "cartao-simples-widget";

const widget = mount(document.getElementById("widget-container"), {
  orderId: "seu-merchant-123",
  primaryColor: "#FF6600",
  onSuccess: (data) => console.log("Sucesso:", data),
});

// Controle programƔtico
widget.open();
widget.close();

3. API de Controle

// Via CDN
window.PaymentWidget.init({
  orderId: "merchant-123",
  autoOpen: false,
});

window.PaymentWidget.open();
window.PaymentWidget.close();
window.PaymentWidget.destroy();

šŸŽØ Configuração White-Label

Opções de Configuração

Propriedade Tipo Padrão Descrição
orderId string - Obrigatório - ID único do parceiro
primaryColor string #ff6600 Cor primƔria (hex)
secondaryColor string #0a0a0a Cor secundƔria (hex)
logoUrl string - URL do logo do parceiro
borderRadius string md sm|md|lg|full|{valor}px
environment string staging staging|production
apiBaseUrl string - URL da API personalizada
autoOpen boolean false Abrir automaticamente após init

Callbacks

{
  onSuccess: (data: PaymentSuccessData) => void;
  onError: (error: PaymentError) => void;
  onOpen: () => void;
  onClose: () => void;
}

Exemplo de Dados de Sucesso

{
  transactionId: "txn_123456789",
  token: "tok_abcdef123",
  orderId: "merchant_001",
  amount?: 1500.00,
  installments?: 12,
  timestamp: "2024-01-15T10:30:00Z"
}

šŸ›”ļø SeguranƧa

  • Shadow DOM para isolamento completo de CSS/JS
  • Iframe sandbox como fallback com permissƵes mĆ­nimas
  • HTTPS obrigatório em produção
  • Validação de origins com postMessage
  • Sanitização de dados com Zod schemas
  • Sem eval() - código totalmente seguro
  • Conformidade LGPD - dados criptografados

♿ Acessibilidade

  • āœ… ARIA completo - role="dialog", aria-modal="true"
  • āœ… Trap de foco dentro do modal
  • āœ… Navegação por teclado - Tab, Shift+Tab, ESC
  • āœ… Screen readers - labels e descriƧƵes adequadas
  • āœ… Alto contraste - cores acessĆ­veis
  • āœ… Responsive - funciona em qualquer dispositivo

šŸŽÆ Fluxo de UX

  1. Autorização → Checkbox de consentimento para anĆ”lise
  2. AnĆ”lise de CrĆ©dito → FormulĆ”rio com dados pessoais
  3. Resultado → Aprovação/reprovação instantĆ¢nea
  4. EndereƧo → Confirmação de dados de entrega
  5. Pagamento → Dados do cartĆ£o + parcelas
  6. Confirmação → Sucesso e próximos passos

šŸ”§ Desenvolvimento Local

# Clonar repositório
git clone <repo>
cd cartao-simples-widget

# Instalar dependĆŖncias
npm install

# Desenvolvimento
npm run dev

# Builds
npm run build          # Todos os builds
npm run build:sdk      # SDK para npm
npm run build:cdn      # CDN bundle
npm run build:bootstrap # Bootstrap leve

# Linting e type-check
npm run lint
npm run lint:fix
npm run type-check

Estrutura do Projeto

src/
ā”œā”€ā”€ bootstrap/          # Loader leve (CDN entry)
ā”œā”€ā”€ cdn/               # Bundle completo (CDN)
ā”œā”€ā”€ sdk/               # ExportaƧƵes SDK (npm)
ā”œā”€ā”€ components/        # Componentes React
│   ā”œā”€ā”€ steps/        # Steps do formulĆ”rio
│   ā”œā”€ā”€ PaymentWidget.tsx
│   ā”œā”€ā”€ PaymentModal.tsx
│   └── ThemeProvider.tsx
ā”œā”€ā”€ types/             # DefiniƧƵes TypeScript
ā”œā”€ā”€ utils/             # UtilitĆ”rios (masks, logger)
ā”œā”€ā”€ schemas/           # ValidaƧƵes Zod
└── styles/            # CSS customizado

ā˜ļø Deploy AWS

1. Configurar S3 + CloudFront

# Criar bucket
aws s3 mb s3://cartao-simples-widget

# Upload dos arquivos
aws s3 sync dist/ s3://cartao-simples-widget/ --public-read

# Criar distribuição CloudFront
aws cloudfront create-distribution --distribution-config file://cloudfront.json

2. Configurar CORS

{
  "CORSRules": [
    {
      "AllowedHeaders": ["*"],
      "AllowedMethods": ["GET", "HEAD"],
      "AllowedOrigins": ["*"],
      "MaxAgeSeconds": 3600
    }
  ]
}

3. URLs de Produção

https://cdn.cartaosimples.com/widget-bootstrap.v1.min.js  (1.8KB)
https://cdn.cartaosimples.com/widget.v1.min.js           (122KB)

4. Subresource Integrity (SRI)

<script
  src="https://cdn.cartaosimples.com/widget-bootstrap.v1.min.js"
  integrity="sha384-HASH_AQUI"
  crossorigin="anonymous"
  async
></script>

šŸ“± Exemplos de Integração

E-commerce Simples

<!DOCTYPE html>
<html>
  <head>
    <title>Minha Loja</title>
  </head>
  <body>
    <button id="payment-btn">
      Parcele suas compras sem comprometer o limite do cartão
    </button>

    <script
      src="https://cdn.cartaosimles.com/widget-bootstrap.v1.min.js"
      async
    ></script>
    <script>
      document.getElementById("payment-btn").addEventListener("click", () => {
        window.PaymentWidget.init({
          orderId: "loja-123",
          primaryColor: "#FF6600",
          onSuccess: (data) => {
            // Redirecionar para pƔgina de sucesso
            window.location.href = `/success?token=${data.token}`;
          },
        });
      });
    </script>
  </body>
</html>

WordPress Plugin

function add_cartao_simples_widget() {
  wp_enqueue_script(
    'cartao-simples-widget',
    'https://cdn.cartaosimples.com/widget-bootstrap.v1.min.js',
    [],
    '1.0.0',
    true
  );
}
add_action('wp_enqueue_scripts', 'add_cartao_simples_widget');

Next.js

import { PaymentWidget } from "cartao-simples-widget";
import { useState } from "react";

export default function CheckoutPage() {
  const [isOpen, setIsOpen] = useState(false);

  return (
    <div>
      <button onClick={() => setIsOpen(true)}>
        Finalizar com Cartão Simples
      </button>

      <PaymentWidget
        config={{
          orderId: process.env.NEXT_PUBLIC_MERCHANT_ID!,
          primaryColor: "#FF6600",
          onSuccess: (data) => {
            // Processar pagamento
            router.push(`/success?token=${data.token}`);
          },
          onClose: () => setIsOpen(false),
        }}
        initialState={{ isOpen }}
      />
    </div>
  );
}

šŸ“š Documentação Completa

Para informações detalhadas sobre deploy, configuração e troubleshooting, consulte a documentação completa na pasta docs/:

šŸš€ Deploy RĆ”pido

Primeira Vez (Production)

# 1. Configure o CloudFront (apenas primeira vez)
./setup-cloudfront.sh production

# 2. FaƧa o deploy
./deploy.sh production

Staging (Desenvolvimento)

# Deploy direto no S3 (sem CloudFront)
./deploy.sh staging

O script setup-cloudfront.sh automaticamente:

  • āœ… Cria Origin Access Identity (OAI)
  • āœ… Cria distribuição CloudFront
  • āœ… Configura bucket S3
  • āœ… Gera relatório com URLs e próximos passos

ļæ½šŸ” Troubleshooting

Problemas Comuns

āŒ Widget nĆ£o aparece

  • Verificar se o orderId estĆ” correto
  • Conferir console por erros de CORS
  • Verificar se o script carregou (window.PaymentWidget existe)

āŒ Erro "ERR_NAME_NOT_RESOLVED"

  • CDN URL incorreta - deve ser https://d2x7cg3k3on9lk.cloudfront.net
  • Verificar configuração em src/bootstrap/index.ts

āŒ Erro CORS

  • Bucket S3 precisa ter CORS configurado
  • Executar ./deploy.sh para aplicar automaticamente
  • Ver documentação CORS

āŒ Cache desatualizado

  • Invalidar cache do CloudFront: aws cloudfront create-invalidation --distribution-id EOLJNTE5PW5O9 --paths "/*"
  • Aguardar 1-2 minutos para propagação

Para mais soluƧƵes, consulte o Guia de Deploy CDN completo.

šŸ¤ Contribuição

  1. Fork o repositório
  2. Crie uma branch: git checkout -b feature/nova-funcionalidade
  3. Commit: git commit -m 'Adiciona nova funcionalidade'
  4. Push: git push origin feature/nova-funcionalidade
  5. Abra um Pull Request

šŸ“„ LicenƧa

MIT License - veja LICENSE para detalhes.


šŸ’” DĆŗvidas? Entre em contato: dev@cartaosimples.com

šŸ”— Documentação completa: https://docs.cartaosimples.com/widget

About

šŸš€ Embeddable white-label payment widget for React & vanilla JS | Dual distribution (NPM SDK + CDN) with Shadow DOM isolation | TypeScript, accessible, and production-ready | Perfect for fintech, e-commerce, and SaaS platforms

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors