DocsRecursos da API › Pagamentos & CheckoutCheckout Modal & Embutido (Frontend SDK)
Método 2

Checkout Modal & Embutido (Frontend SDK)

Mantenha o cliente no seu domínio durante todo o processo. O modal sobreposto ou o iframe responsivo abre diretamente na sua loja, com comunicação segura via postMessage.

O SDK pode apresentar o checkout num modal ou num iframe embutido. Use os callbacks para actualizar a interface; confirme o resultado do pagamento por webhook ou consulta server-to-server.

Fluxo de Sequência Técnica

Ilustração do checkout embutido: sessão criada no backend, modal no browser e confirmação via webhook.
1) O servidor cria uma sessão segura usando a chave privada. 2) O browser recebe apenas a chave pública e o token temporário da sessão para abrir o modal. 3) O servidor valida o webhook assinado e consulta o estado final. Nunca envie a chave privada para o browser.

Passo 1: Criar a Intenção no Seu Servidor (Backend)

O valor e a moeda devem ser fixados no servidor para evitar manipulação de preços no cliente. Retorne o token gerado para o frontend:

Backend (Node.js / TypeScript)
// 1. Backend Server (Node.js / Express / Next.js API Route)
import { EDPayClient } from "@edutecka-mz/edpay-sdk";

const edpay = new EDPayClient({
  publicKey: process.env.EDPAY_PUBLIC_KEY!,
  privateKey: process.env.EDPAY_PRIVATE_KEY!, // Secret server key
});

export async function POST(req: Request) {
  const { cartId, amount } = await req.json();

  // Create payment intent securely on backend
  const payment = await edpay.payments.create({
    amount: amount, // e.g.: 1500
    currency: "MZN",
    reference: "ORD-" + cartId,
    customer: {
      phone: "+25884xxxxxxx",
    },
  });

  // Return public session token to the browser
  return Response.json({
    token: payment.data.token,
    paymentUrl: payment.data.payment_url,
  });
}

Passo 2: Abrir o Modal de Pagamento no Frontend

Carregue o script do EDPay e invoque edpay.checkout() com a sua Chave Pública:

Frontend (HTML & JavaScript)
<!-- 1. Load official SDK on your frontend page -->
<script src="https://pay.edutecka.com/v1/edpay.js"></script>

<script>
  // 2. Initialize with safe Public Key
  const edpay = new EDPay({
    publicKey: "pk_live_019283019283abcdef", // Public Key (Frontend safe)
  });

  async function handlePayment() {
    // 3. Obtain token generated by your backend server
    const res = await fetch("/api/checkout", { method: "POST" });
    const { token, paymentUrl } = await res.json();

    // 4. Mount interactive checkout modal overlay
    edpay.checkout({
      token: token,
      mode: "modal", // 'modal' opens popup overlay; 'embedded' renders inside div
      onSuccess: function(payment) {
        console.log("Payment approved:", payment);
        window.location.href = "/orders/success";
      },
      onError: function(err) {
        console.warn("Payment error or cancelled:", err);
      },
      onClose: function() {
        console.log("Modal closed by user");
      }
    });
  }
</script>

Alternativa: Renderização Embutida (Embedded Iframe)

Se preferir embutir a interface de pagamento diretamente dentro de uma coluna ou div da sua página sem popup:

Frontend Embedded
// Embedded mode (mounts inside a <div> container on your page)
edpay.checkout({
  token: token,
  mode: "embedded",
  container: "payment-container", // DOM container ID
  width: "100%",
  height: "640px",
  onSuccess: (payment) => {
    // Handle approved payment
  }
});

Parâmetros de Configuração do Frontend SDK

ParâmetroTipoPadrãoDescrição
tokenstring—Token público da sessão retornado por POST /v1/payments.
mode"modal" | "embedded""modal"Modo de apresentação visual no navegador.
containerstring | HTMLElement—ID do elemento DOM para injetar o iframe (obrigatório se mode='embedded').
onSuccessfunction(payment)—Callback executado quando a cobrança é aprovada com sucesso.
onErrorfunction(error)—Callback executado em caso de recusa ou falha técnica.
onClosefunction()—Callback executado quando o cliente fecha o modal manualmente.