clientSecret, a única credencial que o navegador usa para ler e pagar aquela sessão.
Os exemplos usam o sandbox (
https://api.upag.dev/v1) com sk_test_… e pk_test_…. Em produção use https://api.upag.io/v1 com sk_live_… e pk_live_…. Os SDKs escolhem o host pelo prefixo da chave.1. Criar o link de pagamento
No servidor, com a chave secreta. Os preços vêm de Produtos e Preços (valores em centavos).url do link tem a forma …/buy/{code}. O code (o último trecho) é o que o navegador usa para abrir a sessão:
2. Abrir a sessão no navegador
Com oupag-js e só a chave publicável. Um link inativo responde 410 (PAYMENT_LINK_INACTIVE).
upag-js
id e clientSecret (só vem nesta resposta). Se você só quer levar o pagador à página hospedada, await upag.checkout.redirectToCheckout(code) abre a sessão e redireciona para url.
A resposta já traz o que a página precisa: itens, amount em centavos, e as opções de parcelamento por método em paymentMethods. Para recarregar depois: upag.checkout.retrieve(id, clientSecret). Referência: Iniciar sessão e Obter sessão (pagador).
3. Confirmar o pagamento
Pix
upag-js
open até o Pix ser pago. Para atualizar a tela, consulte upag.checkout.retrieve(id, clientSecret) de tempos em tempos até status === 'complete' (o servidor também recebe os webhooks do passo 4).
Cartão
Tokenize o cartão no navegador (o número nunca passa pelo seu servidor) e confirme com oid:
upag-js
complete; recusado, continua open e dá para tentar de novo (a mesma fatura é paga outra vez, e o pagador pode trocar para Pix). Com 3D Secure habilitado (session.account.threeDSecureEnabled), abra antes a sessão 3DS do checkout e envie threeDSecureSession no charge. Veja Cartão com 3DS.
Cupom: se o link tem couponEnabled, use upag.checkout.applyCoupon(id, clientSecret, { code }) antes de confirmar (Aplicar cupom).
Referência: Confirmar sessão.
4. Receber os webhooks
O redirect sozinho não prova que o pagamento foi feito: confirme no servidor pelos webhooks. Tratecheckout-session.completed (a sessão foi paga) e, se quiser o detalhe do pagamento, charge.paid e invoice.paid. Numa compra com itens recorrentes, subscription.active também chega.
Node.js SDK
id da entrega: Segurança. Payloads: checkout, cobrança e fatura.
Pagar do seu servidor (sem página)
Se você mesmo coleta os dados do pagador, pule o link: crie a sessão com a chave secreta (Criar sessão) e pague com Confirmar, passando o UUID de um cliente ou os dados dele. A sessão criada assim não temclientSecret.
Node.js SDK