Crie uma integração de assinaturas
Crie e gerencie assinaturas para aceitar pagamentos recorrentes.


Esforço de integração
Personalização da IU
Personalize a aparência.
Tipo de integração
Use formulários integrados criados previamente para coletar pagamentos e gerenciar assinaturas.
Configure o servidor
Configurar a Stripe
Instale o cliente Stripe de sua escolha:
Criar um produto e preço
Crie seus produtos e preços usando o Dashboard ou a Stripe CLI.
Este exemplo usa um serviço de preço fixo com duas opções diferentes de nível de serviço: Básico e Premium. Para cada opção de nível de serviço, você precisa criar um produto e um preço recorrente. (Se quiser adicionar uma cobrança avulsa para um item como tarifa de configuração, crie um terceiro produto com um preço avulso. Para simplificar, este exemplo não inclui uma cobrança avulsa.)
Neste exemplo, o faturamento de cada produto é mensal. O produto básico custa 5 USD e o produto Premium custa 15 USD.
Se você oferecer vários intervalos de cobrança, use o Checkout para fazer upsell aos clientes em intervalos de cobrança maiores e coletar mais receitas antecipadamente.
Para outros modelos de preços, consulte os exemplos de cobrança.
Criar uma sessão do Checkout
Adicione um endpoint ao servidor que cria uma Checkout Session.
Ao criar a Checkout Session, passe os seguintes parâmetros:
- Para usar o formulário do Checkout integrado, defina ui_mode como
embedded
. - Para criar assinaturas quando seu cliente fizer checkout, defina mode como
subscription
. - Para definir a página à qual o cliente retorna após concluir ou tentar o pagamento, especifique um return_url. Inclua a variável de modelo
{CHECKOUT_
no URL. O Checkout substitui a variável pelo ID da sessão do Checkout antes de redirecionar o cliente. Você cria e hospeda a página de devolução no seu site.SESSION_ ID}
Para montar o Checkout, use o client_
da Checkout Session retornado na resposta.
Criar sua página de assinaturaCliente
Montar Checkout
Exibir uma página de devolução
Depois que o cliente tenta fazer o pagamento, a Stripe o redireciona para uma página de devolução hospedada por você no seu site. Quando criou a sessão do Checkout, você especificou o URL da página de retorno no parâmetro return_url.
Observação
Durante o pagamento, algumas formas de pagamento redirecionam o cliente para uma página intermediária, como uma página de autorização bancária. Quando concluírem essa página, a Stripe o redirecionará para sua página de retorno.
Criar um endpoint para recuperar uma sessão do Checkout
Adicione um endpoint para recuperar o status de uma sessão do Checkout com o ID da sessão do Checkout no URL.
Recuperar uma sessão do Checkout
Para usar os detalhes da sessão do Checkout, faça imediatamente uma solicitação ao endpoint no seu servidor para recuperar o status da sessão do Checkout usando o ID da sessão do Checkout no URL assim que a página de retorno for carregada.
Gerenciar a sessão
Trate o resultado de acordo com o status da sessão:
complete
: O pagamento foi bem-sucedido. Use as informações da sessão do Checkout para renderizar uma página de sucesso.open
: o pagamento falhou ou foi cancelado. Remonte o Checkout para que seu cliente possa tentar novamente.
// Retrieve a Checkout Session // Use the session ID initialize(); async function initialize() { const queryString = window.location.search; const urlParams = new URLSearchParams(queryString); const sessionId = urlParams.get('session_id'); const response = await fetch(`/session-status?session_id=${sessionId}`); const session = await response.json(); // Handle the session according to its status if (session.status == 'open') { // Remount embedded Checkout window.location.replace('http://localhost:4242/checkout.html') } else if (session.status == 'complete') { document.getElementById('success').classList.remove('hidden'); document.getElementById('customer-email').textContent = session.customer_email; // Show success page // Optionally use session.payment_status or session.customer_email // to customize the success page } }
// Add an endpoint to fetch the Checkout Session status app.get('/session_status', async (req, res) => { const session = await stripe.checkout.sessions.retrieve(req.query.session_id); const customer = await stripe.customers.retrieve(session.customer); res.send({ status: session.status, payment_status: session.payment_status, customer_email: customer.email }); });
Provisionar acesso
Agora que a assinatura está ativa, forneça ao usuário o acesso ao seu serviço. Para fazer isso, escute os eventos customer.
, customer.
e customer.
. Esses eventos passam um objeto de assinatura que contém um campo status
indicando se a assinatura está ativa, vencida ou cancelada. Consulte o ciclo de vida da assinatura para obter uma lista completa dos status. Para saber mais sobre como gerenciar o acesso ao recurso do seu produto, consulte o documento sobre integração de direitos.
No seu gerenciador de webhooks:
- Verifique o status da assinatura. Se estiver
active
, o usuário pagou o produto. - Confira o produto que o cliente assinou e conceda acesso ao serviço. Verificar o produto em vez do preço proporciona mais flexibilidade, caso seja necessário alterar os preços ou o intervalo de faturamento.
- Armazene o
product.
,id subscription.
eid subscription.
no seu banco de dados junto com ostatus customer.
que já salvou. Verifique esse registro quando determinar quais recursos precisam ser ativados para o usuário no seu aplicativo.id
O estado de uma assinatura pode mudar a qualquer momento durante sua vida útil, mesmo se o aplicativo não fizer nenhuma chamada direta para a Stripe. Por exemplo, uma renovação pode falhar devido a um cartão de crédito vencido, o que coloca a assinatura em um estado vencido. Ou, se você implementar o portal do cliente, um usuário pode cancelar a assinatura sem visitar diretamente seu aplicativo. A implementação correta do manipulador mantém o estado do aplicativo em sincronia com a Stripe.
Teste a integração
Testar formas de pagamento
Use a tabela a seguir para testar diferentes formas de pagamento e cenários.
Forma de pagamento | Cenário | Como testar |
---|---|---|
Débito automático BECS | O cliente paga com débito automático BECS. | Preencha o formulário usando o número de conta 900123456 e BSB 000-000 . Inicialmente, o status do PaymentIntent muda para processing e, três minutos depois, para succeeded . |
Débito automático BECS | O pagamento do cliente falha com um código de erro account_ . | Preencha o formulário usando o número de conta 111111113 e BSB 000-000 . |
Cartão de crédito | O pagamento com cartão é bem-sucedido e não precisa de autenticação. | Preencha o formulário do cartão de crédito usando o número de cartão de crédito 4242 4242 4242 4242 com qualquer validade, CVC e código postal. |
Cartão de crédito | O pagamento com cartão precisa de autenticação. | Preencha o formulário do cartão de crédito usando o número 4000 0025 0000 3155 com qualquer validade, CVC e código postal. |
Cartão de crédito | O cartão é recusado com um código de recusa como insufficient_ . | Preencha o formulário do cartão de crédito usando o número 4000 0000 0000 9995 com qualquer validade, CVC e código postal. |
Débito automático SEPA | O cliente paga com débito automático SEPA. | Preencha o formulário usando o número de conta AT321904300235473204 . Inicialmente, o status do PaymentIntent muda para processing e, três minutos depois, para succeeded. |
Débito automático SEPA | O status do PaymentIntent do cliente muda de processing para requires_ . | Preencha o formulário usando o número de conta AT861904300235473202 . |
Monitoramento de eventos
Configure webhooks para ouvir eventos de alteração de assinatura, como atualizações e cancelamentos. Saiba mais sobre webhooks de assinatura. É possível visualizar eventos no Dashboard ou com a Stripe CLI.
Saiba como testar sua integração com o Billing.