Práticas recomendadas para uso do SourcesObsoleto
Práticas recomendadas para aceitar diversas formas de pagamento com uma única integração.
Aviso
We deprecated the Sources API and plan to remove support for local payment methods. If you currently handle any local payment methods using the Sources API, you must migrate them to the Payment Methods API.
While we don’t plan to remove support for card payments, we recommend replacing any use of the Sources API with the PaymentMethods API, which provides access to our latest features and payment method types.
A flexibilidade da API Sources ajuda a reduzir as mudanças necessárias para aceitar as formas de pagamento que você for adicionando.
Fluxo típico dos pagamentos com cartão
Em um fluxo de checkout normal de pagamentos com cartão (exceto o 3D Secure), sua integração coleta os dados do cartão, cria uma fonte e a usa para fazer uma solicitação de cobrança. Como o cliente não precisa fazer mais nada e os pagamentos com cartão oferecem confirmação síncrona, podemos confirmar imediatamente se o pagamento foi bem-sucedido e os fundos foram garantidos. Não é preciso usar webhooks.
O uso obrigatório de webhooks
Outras formas de pagamento podem exigir outras ações do cliente (por exemplo, um redirecionamento) antes que a fonte se torne chargeable
(cobrável) e possa ser usada na criação de uma solicitação de cobrança (por exemplo, o iDEAL). Normalmente, essa transição ocorre de forma assíncrona e pode até acontecer depois que o cliente saiu do seu site. Por esses motivos, a integração precisa de webhooks para determinar quando uma fonte se torna cobrável antes de criar a cobrança.
A Stripe envia os seguintes eventos de webhook para notificar mudanças no status da fonte:
Evento | Descrição | Ação sugerida |
---|---|---|
source. | Um objeto Source se torna chargeable depois que o cliente autentica e confirma o pagamento. | Criar uma cobrança. |
source. | Um objeto Source não se tornou cobrável porque o cliente não autenticou o pagamento. | Cancele o pedido e, se quiser, traga o cliente de volta para seu fluxo de pagamento. |
source. | Um objeto Source expirou e não pode ser usado para criar uma cobrança. | Cancele o pedido e, se quiser, traga o cliente de volta para seu fluxo de pagamento. |
Da mesma forma, ao criar uma cobrança, determinadas formas de pagamento assíncronas podem levar dias para cobrar e confirmar os fundos, exigindo que os webhooks saibam quando confirmar e, por fim, executar os pedidos.
A Stripe envia os seguintes eventos de webhook para notificar mudanças no status de uma cobrança:
Evento | Descrição | Ação sugerida |
---|---|---|
charge. | A cobrança está pendente (somente para pagamentos assíncronos). | Nenhuma ação é necessária. |
charge. | A cobrança foi finalizada e o pagamento foi concluído. | Finalize o pedido e envie um e-mail de confirmação ao cliente. |
charge. | A cobrança falhou e o pagamento não foi concluído. | Cancele o pedido e, se quiser, traga o cliente de volta para seu fluxo de pagamento. |
Criar uma integração flexível
Para garantir a flexibilidade do processo de checkout e aceitar várias formas de pagamento, recomendamos a seguinte abordagem:
Criar a fonte
Quando criar Sources, registre o ID da fonte na representação interna do pedido para poder recuperá-lo quando receber e processar webhooks source.
. Não se esqueça de indexar seus objetos de pedido pelo atributo source
, para facilitar as buscas.
Criar a cobrança
A fonte é cobrada depois da entrega do evento source.
. Quando receber o webhook, recupere a representação interna do pedido, localizando-a pelo ID de fonte recebido e verifique se o pedido está aguardando um pagamento.
Quando fizer uma solicitação de cobrança, use o ID do pedido interno como chave de idempotência para evitar qualquer possível condição de corrida. Além disso, se a fonte for reutilizável e você quiser usá-la novamente, anexe-a a um objeto Customer antes de cobrá-la. Consulte os guias Uso avulso ou recorrente e Sources e Customers para saber mais sobre como lidar com Sources de uso único e recorrente e como eles interagem com os objetos Customer.
De forma semelhante à criação da fonte, registro o ID da cobrança na representação interna do pedido para poder recuperá-lo quando receber e processar webhooks charge.
.
Página de confirmação
Depois que o cliente realiza as ações necessárias para autorizar um pagamento (por exemplo, seguiu um redirecionamento), você deve apresentar uma página de confirmação que mostra o estado do pedido. Isso pode ser feito sondando internamente o pedido.
Como a latência de entrega dos webhooks não é garantida, se você quiser otimizar ainda mais a página de confirmação, sonde o status da fonte associada no código do lado do cliente. Quando você detectar que a fonte se tornou chargeable
, poderá iniciar a criação de uma Charge usando essa fonte sem precisar aguardar a chegada do webhook source.
.
Alguns tipos de fontes podem levar minutos (ou até dias) para se tornarem chargeable
. Se você decidir sondar a fonte, recomendamos que estabeleça um tempo limite e informe ao cliente que o pedido está aguardando confirmação de pagamento e depois envie um e-mail de confirmação de pagamento de forma assíncrona. Veja na tabela baixo nossas recomendações de mensagens para o cliente para cada status de fonte.
A sondagem do lado do cliente será interrompida se o cliente sair da página. Isso significa que sua integração também precisa considerar o webhook source.
para garantir que você continue acompanhando o pedido do cliente.
Se você está usando o Stripe.js, pode implementar a sua própria sondagem com stripe.retrieveSource():
// In order-confirmation-page.js const stripe = Stripe(
); // After some amount of time, we should stop trying to resolve the order synchronously: const MAX_POLL_COUNT = 10; let pollCount = 0; const pollForSourceStatus = async () => { const {source} = await stripe.retrieveSource({id: SOURCE_ID, client_secret: CLIENT_SECRET}) if (source.status === 'chargeable') { // Make a request to your server to charge the Source. // Depending on the Charge status, show your customer the relevant message. } else if (source.status === 'pending' && pollCount < MAX_POLL_COUNT) { // Try again in a second, if the Source is still `pending`: pollCount += 1; setTimeout(pollForSourceStatus, 1000); } else { // Depending on the Source status, show your customer the relevant message. } }; pollForSourceStatus();'pk_test_TYooMQauvdEDq54NiTphI7jx'
A tabela abaixo contém recomendações de possíveis mensagens que podem ser mostradas ao cliente conforme o status da fonte.
Status | Mensagem para o cliente |
---|---|
O status da fonte é chargeable | Seu pedido foi recebido e está aguardando confirmação do pagamento. |
O status da fonte é canceled | Seu pagamento falhou e o seu pedido não foi processado. |
O status da fonte é failed | Seu pagamento falhou e o seu pedido não foi processado. |
O status da fonte continua pending após um período de sondagem | Seu pedido foi recebido e está aguardando confirmação do pagamento. |
Após criar uma Charge (e se o usuário permanecer na página de confirmação), você poderá mostrar as seguintes mensagens de acordo com o status da Charge:
Status | Mensagem para o cliente |
---|---|
O status da cobrança é pending | Seu pedido foi recebido e está aguardando confirmação do pagamento. |
O status da cobrança é failed | Seu pagamento falhou e o seu pedido não foi processado. |
O status da cobrança é succeeded | Seu pagamento foi confirmado e seu pedido foi concluído. |
Confirmação do pedido
Confirme o pedido só depois que receber o webhook charge.
(isso pode ocorrer imediatamente, mas também pode demorar). Envie um e-mail ao cliente neste ponto porque a confirmação do pagamento pode levar dias no caso de pagamentos assíncronos.
Cancelamentos e falhas
Ouça os webhooks source.
e source.
e cancele o pedido associado à fonte envolvida. Se seguir as práticas recomendadas acima, você não deve receber o webhook source.
para fontes previamente chargeable
(pois o gerenciador de source.
criar imediatamente uma cobrança para evitar o cancelamento da fonte). Você continuará recebendo os webhooks source.
para fontes pending
que nunca se tornaram chargeable
. Normalmente, isso indica que o cliente saiu do fluxo de checkout antes de concluí-lo. Você também pode receber um webhook source.
quando o cliente recusar o pagamento ou ocorrer um problema técnico no esquema de pagamentos.
Você também deve escutar os webhooks charge.
, para assegurar o cancelamento do pedido associado à cobrança recebida.
Para cada um desses eventos, recomendamos que você notifique o cliente que o pedido falhou e, se quiser, convide-o para voltar ao fluxo de pagamento.