Pular para o conteúdo

Aceitar um pagamento

  1. O cliente clica em pagar; o seu site abre o checkout.
  2. O SDK cria o pagamento e mostra as redes e os tokens disponíveis.
  3. O cliente liga uma wallet e muda para a rede certa.
  4. O SDK verifica o saldo antes de permitir o envio.
  5. O cliente assina; onSuccess é disparado.
  6. O seu servidor confirma o pagamento e processa a encomenda.

Os passos 2 a 5 são tarefa do SDK. O passo 6 é seu, e é esse que fica por fazer.

onSuccess significa que a wallet aceitou a transação e a difundiu. Não significa que o dinheiro chegou. A transação pode falhar, ser substituída por outra com uma taxa mais alta ou ser descartada da mempool.

Além disso, é executado no cliente, por isso pode ser acionado por qualquer pessoa que consiga abrir a consola do navegador na sua página de checkout. Uma encomenda processada com base no navegador é uma encomenda que qualquer pessoa pode pedir.

onSuccess={(paymentId, txHash) => {
// Right: hand it to your server and let the server decide.
fetch('/api/orders/awaiting-confirmation', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ paymentId, txHash }),
});
// Wrong: fulfilling here trusts the browser.
// grantAccess();
}}

Depois, confirme no servidor, por webhook ou lendo o estado com a sua chave.

O SDK verifica se o cliente tem token suficiente, e moeda nativa suficiente para o gas, antes de permitir o envio. Isto apanha a falha mais comum, ter USDC mas nenhum ETH para o gas, antes de se tentar a transação e não depois de ela ser revertida.

Um cliente pode enviar mais ou menos do que o valor faturado. Nenhum dos casos estraga o pagamento, e ambos têm um tratamento definido: consulte Pagamentos em excesso e reembolsos.