Throne

Cartão

Upsell em um clique

Cobrar um segundo produto sem pedir o cartão de novo: o campo one_click_from, a resposta one_click e o que fazer quando ela vem false.

Ver em Markdown

O que é#

Depois que o comprador paga uma venda de cartão, você pode oferecer um segundo produto e cobrar sem pedir o cartão de novo. É o upsell: o comprador vê o cartão que ele já usou, confirma e pronto.

Funciona com o mesmo POST /elements/checkout e o mesmo Throne Elements que você já usa. Um campo novo na criação, e nada mais muda: campos, respostas, erros, moedas, webhook e o elemento na página continuam iguais.

Nota Nada a mudar no que já está no ar. Sem o campo novo, o checkout é o de hoje. O upsell é uma página nova do seu funil, não uma alteração nas suas páginas atuais.

Antes de começar#

O upsell em um clique é habilitado por conta, uma a uma, pelo time do Throne. Enquanto a sua conta não estiver habilitada, o campo é aceito, a resposta vem one_click: false e o comprador digita o cartão.

Vale também para o passado: só serve de origem uma venda paga depois de a sua conta ser habilitada.

Para pedir a habilitação, fale com o suporte.

Como funciona, em três passos#

1. A primeira venda é a de sempre. Você cria o checkout, o comprador paga, e você recebe o transaction_id no 201 e o transaction.paid no webhook.

2. Na página de upsell, crie o checkout com one_click_from. O valor é o transaction_id da venda que acabou de ser paga:

cURL
curl -X POST https://app.thronecorporate.com/api/v1/elements/checkout \
  --max-time 60 \
  -H "Authorization: Bearer $THRONE_PK:$THRONE_SK" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "amount_cents": 9700,
    "currency": "brl",
    "one_click_from": "a1b2c3d4-e5f6-4789-abcd-ef0123456789"
  }'

3. Olhe o campo one_click na resposta.

JSON
{
  "transaction_id": "9f8e7d6c-5b4a-4321-9876-543210fedcba",
  "status": "pending",
  "checkout_url": "https://pay.example.com/checkout/7a6b5c4d3e2f10998877665544332211",
  "acquirer": "apex",
  "one_click": true,
  "one_click_card": { "brand": "mastercard", "last4": "2006" }
}

Com one_click: true, o elemento abre mostrando o cartão terminado em 2006 e um botão. Com one_click: false, ele abre o formulário de sempre e o comprador digita o cartão. Nos dois casos a venda acontece, e o seu código é o mesmo: você pode usar one_click_card para escrever na sua página algo como "confirmar no cartão terminado em 2006".

Os dois campos novos aparecem só quando você envia one_click_from. Sem ele, a resposta não ganha chave nenhuma.

Quando one_click vem false#

Nunca é erro, nunca é 4xx: o checkout nasce normal e o comprador paga digitando. Acontece quando:

Motivo Detalhe
O upsell não está habilitado na sua conta Habilitação por conta, pelo suporte
A venda citada não é da sua conta Só o transaction_id de uma venda sua funciona, e o uso cruzado fica registrado
O valor não tem a forma de um transaction_id Texto fora do formato, dentro dos 64 caracteres, não vira erro: vira false
A venda não está paga Pendente, recusada, estornada ou contestada não serve
A venda de origem não tem cartão guardado A origem tem de ser uma venda em que o comprador digitou o cartão. Upsell pago em um clique e cobrança de recorrência não deixam cartão guardado
Passou da janela Padrão de 120 minutos contados do pagamento
Teto de upsells atingido Até 5 por venda paga. Checkout que morreu sem cobrar (recusado ou expirado) não ocupa vaga
Adquirente diferente O upsell precisa cair na mesma adquirente da venda de origem
O comprador declarado é outro Quando você envia customer no upsell, ele tem de ser a mesma pessoa da venda de origem

Por isso: escreva a sua página de upsell para funcionar nos dois casos. Mostre o botão quando vier true e o elemento comum quando vier false.

Atenção O customer do upsell, quando enviado, tem de ser o mesmo comprador da venda de origem. É o que impede cobrar o cartão guardado de uma pessoa numa venda de outra, dentro da mesma conta. O caminho mais simples é não enviar customer no upsell: os dados vêm da venda de origem.

O que o comprador vê#

Com one_click: true, o elemento mostra o produto, o valor, a bandeira com os quatro últimos dígitos e um botão. Há também um link discreto para usar outro cartão, que abre o formulário completo na mesma tela.

Em alguns casos o banco pede o código de segurança para confirmar a recompra. Quando isso acontece, o elemento mostra um campo de três dígitos (quatro no Amex) abaixo do cartão, e o comprador confirma ali mesmo. Continua sem digitar número, validade ou nome, e nenhuma tentativa é gasta quando o código é pedido.

Quando o cartão guardado não serve mais no momento do clique, o formulário de sempre volta sozinho, sem aviso e sem gastar tentativa: para o comprador, nada aconteceu.

Eventos na sua página#

Os mesmos de sempre, sem evento novo: throne-elements:ready, throne-elements:paid, throne-elements:error e throne-elements:resize. Veja Throne Elements.

Perguntas que aparecem sempre#

Preciso guardar o cartão do meu cliente? Não. Você não recebe, não guarda e não manuseia dado de cartão em nenhum momento. Quem cuida disso é o Throne, e o que você usa é só o transaction_id da venda anterior, que você já tem.

E se o comprador tiver fechado a aba entre a compra e o upsell? Enquanto estiver dentro da janela de 120 minutos e você mandar o one_click_from certo, funciona. O reconhecimento não depende de cookie nem de sessão no navegador.

Posso usar o mesmo one_click_from em dois upsells? Sim, até 5 por venda paga. Cada um é uma venda independente, com o seu próprio transaction_id e o seu próprio webhook.

Dá para fazer upsell de upsell? Sim, mas a origem continua sendo a venda em que o comprador digitou o cartão: use sempre o transaction_id dela em one_click_from, inclusive no segundo e no terceiro upsell, dentro dos 120 minutos e do teto de 5. O transaction_id de um upsell pago em um clique não serve de origem: a resposta vem one_click: false.

A janela conta do primeiro pagamento ou do último? Do pagamento da venda que você citou em one_click_from.

O valor pode ser diferente da primeira venda? Sim, é uma venda nova: valor, moeda e produto são seus.

O que aparece no extrato do comprador? Duas cobranças separadas, com o mesmo descritor das suas vendas de cartão.

Serve para Pix? Não. O Pix não tem o que guardar: cada cobrança é um QR Code novo. O campo é aceito com um transaction_id de Pix, mas a resposta vem one_click: false.

Em quais adquirentes funciona#

No POST /elements/checkout, o campo one_click_from pode ser enviado sempre, em qualquer adquirente de cartão: o que muda é a resposta. No Checkout Brasil, ele não existe e volta 422 field_not_supported. Neste endpoint o um clique está disponível na Apex; nas outras, o campo é aceito e one_click volta false, sem erro. Consulte GET /elements/acquirers para ver o que a sua conta tem habilitado.

Na Vortex o um clique existe por uma rota própria, dentro da integração direta: o POST /api/v1/vortex/upsell. Ele não usa one_click_from nem card_token, cobra o cartão guardado da venda de origem e pode ele mesmo ser recorrente. Precisa estar liberado na conta, à parte da integração direta.

Com roteamento de adquirente fixado na sua conta, o upsell cai na mesma adquirente de tudo o que você vende, e é justamente o caso em que ele acende sozinho.

Referência do campo#

Campo Onde Tipo Obrigatório Descrição
one_click_from corpo do POST /elements/checkout string, até 64 caracteres não transaction_id de uma venda sua, paga, da mesma adquirente
one_click resposta 201 booleano só quando one_click_from foi enviado o checkout abre em um clique
one_click_card resposta 201 objeto só quando one_click é true brand e last4, para a sua página

Veja também Recorrência, para a cobrança que se repete sozinha.