Uma marca de "Compra verificada" na Provedly significa uma coisa só: o registro chegou por um webhook cuja assinatura a Provedly conferiu com o segredo que você colou. No Stripe, isso leva quatro passos e cerca de cinco minutos, e está disponível em todos os planos, inclusive no Free. Este passo a passo cobre a configuração, o que a Provedly lê do evento, como obter a atribuição e o que conferir quando os eventos chegam mas nada é verificado.
Os quatro passos
Passo 1: adicione uma fonte Stripe na Provedly
Abra o widget, vá até a aba Data e adicione uma fonte Stripe. A Provedly mostra a URL do endpoint para este widget:
https://provedly.app/api/hooks/stripe/pp_your_token
Deixe essa aba aberta; você vai voltar para colar o segredo.
Passo 2: registre o endpoint no Stripe
No painel do Stripe, vá em Developers, depois Webhooks, depois Add endpoint. Cole a URL e selecione um evento: checkout.session.completed. Você não precisa de nenhum outro evento. Adicionar mais não faz mal, mas a Provedly os ignora e eles poluem os logs do seu webhook.
Se você usa a CLI do Stripe para testes locais, o equivalente é:
stripe listen --events checkout.session.completed \
--forward-to https://provedly.app/api/hooks/stripe/pp_your_token
Em produção, registre o endpoint no painel em vez de depender da CLI.
Passo 3: cole o signing secret
O Stripe mostra um signing secret para o novo endpoint, começando com whsec_. Copie-o para o campo de segredo da fonte Stripe na Provedly e salve. Essa é toda a base da verificação: o Stripe assina cada evento com esse segredo, a Provedly recalcula a assinatura, e um evento que não bate é rejeitado. Sem o segredo, nada é verificado.
Passo 4: envie um evento de teste
Use "Send test event" na página do endpoint no Stripe. Em poucos segundos, a fonte na Provedly mostra o horário do "último evento". Eventos de teste do Stripe trazem dados fictícios, então o registro pode ficar estranho; apague-o depois ou deixe a janela de retroatividade fazê-lo expirar. O primeiro checkout real produz um registro de verdade.
O que a Provedly lê do evento
| Campo na notificação | Vem de |
|---|---|
| Nome | o nome nos dados do cliente da sessão |
| Cidade e país | o endereço de entrega, se houver; senão, o de cobrança |
| Produto | o primeiro item do pedido |
| Preço | o total formatado na moeda da sessão |
| Horário | o horário do evento |
O nome passa então pela sua configuração de formato de nome (o padrão mostra "Sarah M.") e a localização pelo seu formato de localização (padrão "Austin, US"). O que o Stripe envia completo para você não é o que os visitantes veem. Veja Formatos de nome e localização: privacidade por padrão.
Se uma sessão não tem nome porque você não o coletou, a notificação usa um sujeito genérico. Colete nomes no checkout se quiser notificações com nome; não os invente depois.
Atribuição: envie o ID de visitante
O painel conta os pedidos assistidos pela prova, definidos como um comprador que viu uma notificação antes de comprar, cruzado pelo ID de visitante dentro de 30 dias. O Stripe não conhece o ID de visitante a menos que você o informe. Quando criar a Checkout Session no seu servidor, inclua-o como metadata:
// client: read the id before redirecting to checkout
const visitor = window.Provedly?.visitorId();
// server: create the session
const session = await stripe.checkout.sessions.create({
mode: 'payment',
line_items: [{ price: 'price_123', quantity: 1 }],
success_url: 'https://example.com/thanks',
cancel_url: 'https://example.com/cart',
metadata: { provedly_visitor: visitor ?? '' },
});
A Provedly lê metadata.provedly_visitor da sessão concluída e liga a compra ao visitante que viu a notificação. Sem metadata, sem atribuição; o painel nunca faz estimativas. Na Shopify isso é automático, porque o widget grava o ID de visitante no carrinho como o atributo provedly_visitor.
O que o visitante pode conferir
Toda notificação verificada leva à página de verificação pública do widget. Ela lista as fontes conectadas (aqui, o Stripe), as contagens, a última compra verificada e a política de honestidade do widget. Uma raiz SHA-256 noturna sela o histórico para que uma contagem não possa ser reescrita em silêncio depois. Essa é a parte que os concorrentes geralmente não têm; em outubro de 2026, segundo as próprias listagens, a maioria das ferramentas deixa o lojista digitar os números que quiser, sem nenhuma página explicando de onde eles vêm. Mais sobre isso em Por que a prova social precisa de uma página de verificação.
Solução de problemas
Os eventos chegam, mas os registros não são verificados. Quase sempre é o segredo. Copie de novo o whsec_ do endpoint exato que você registrou; cada endpoint tem o seu próprio segredo, e um segredo de outro endpoint ou da CLI vai falhar na conferência da assinatura. Salve e envie outro evento de teste.
Nenhum evento chega. Confira se a URL do endpoint não tem um espaço sobrando e confirme que checkout.session.completed está selecionado. Confirme que o endpoint está em modo live se a sua loja está no ar; endpoints em modo de teste só recebem eventos de teste.
Os registros chegam sem localização. A sessão não tinha endereço de entrega nem de cobrança. Ative a coleta de endereço no Checkout se a localização importa para você, ou defina o formato de localização como "none".
Duplicados. O Stripe pode tentar a entrega de novo. A Provedly remove duplicados por evento, então as novas tentativas não criam registros repetidos.
Pagamentos só com Payment Intents. Se você cobra com Elements e Payment Intents em vez de uma Checkout Session hospedada, checkout.session.completed nunca é disparado. Envie esses pedidos do seu backend para a Records API; eles vão levar o rótulo Imported, e a sua página de verificação vai listá-los em "Site owner's backend (API)". Veja Como usar a Records API para compras do seu próprio backend.
Perguntas frequentes
A Provedly precisa da minha chave de API do Stripe?
Não. Webhooks são de entrada: o Stripe envia os eventos para a Provedly. Você só compartilha o signing secret do webhook, que serve para verificar assinaturas e nada mais.
Posso conectar várias contas Stripe a um widget?
Cada fonte Stripe tem o seu próprio segredo de endpoint, então você pode adicionar uma fonte por conta no mesmo widget, se os limites de widgets do seu plano permitirem.
Renovações de assinatura aparecem como compras?
Não. Só checkout.session.completed é lido, então o checkout inicial aparece e os pagamentos de faturas posteriores, não. Isso é proposital; uma renovação não é um novo comprador tomando uma decisão.
Compras verificadas estão incluídas em todos os planos, inclusive no Free: comece com o Stripe conectado.