Saiba como criar e cobrar uma assinatura com o débito automático SEPA.
Observação
Se você for um novo usuário, use o Payment Element, em vez de usar Stripe Elements como descrito neste guia. O Payment Element fornece um caminho de integração low-code com otimizações de conversão integradas. Veja instruções em Criar uma assinatura.
Produtos representam o item ou serviço que você está vendendo. Preços definem quanto e com que frequência você cobra por um produto. Você estabelece quanto custa o produto, qual moeda você aceita e se a cobrança é avulsa ou recorrente. Se você tiver apenas alguns produtos e preços, crie e gerencie-os no Dashboard.
Este guia usa um serviço de banco de imagens como exemplo e cobra dos clientes uma assinatura mensal de 15 EUR. Para modelar isso:
Depois de criar o produto e o preço, registre o ID do preço para utilizá-lo nas etapas subsequentes. A página de preços exibe o ID, que tem esta estrutura: price_G0FvDp6vZvdwRZ.
Uma assinatura precisa de um cliente para que possa reutilizar formas de pagamento e acompanhar pagamentos recorrentes. Crie um objeto Customer quando seu cliente criar uma conta com sua empresa.
Crie a assinatura usando os IDs de cliente e de preço. Devolva no lado do cliente o client_secret do confirmation_secret.client_secret da última fatura ou, para assinaturas que não cobram um pagamento antecipado, o pending_setup_intent. Além disso, defina:
Defina payment_behavior como default_incomplete para simplificar a coleta da instrução de débito automático SEPA.
Use save_default_payment_method para on_subscription para salvar a forma de pagamento como o padrão para a assinatura quando o pagamento for bem-sucedido. Salvar uma forma de pagamento padrão aumenta o sucesso de futuros pagamentos de assinatura.
# Set your secret key. Remember to switch to your live secret key in production.# See your keys here: https://dashboard.stripe.com/apikeysStripe.api_key =
Você já pode coletar dados de pagamento do cliente com o Stripe Elements. O Elements é um conjunto de componentes de IU pré-integrados para coletar dados de pagamento.
Um Stripe Element contém um iframe que envia com segurança os dados de pagamento para a Stripe por uma conexão HTTPS. O endereço da página de checkout também deve iniciar com https://, e não http://, para que sua integração funcione.
Você pode testar sua integração sem usar HTTPS. Habilite-o quando estiver pronto para aceitar pagamentos no modo de produção.
Configurar o Stripe Elements
O Stripe Elements é disponibilizado automaticamente como recurso do script Stripe.js, que deve ser inserido em sua página de pagamento no head do arquivo HTML. Sempre carregue o Stripe.js diretamente de js.stripe.com para manter a conformidade com PCI. Não insira o script em um pacote nem hospede sua própria cópia.
Crie uma instância do Elements com o seguinte JavaScript em sua página de pagamento:
const stripe =Stripe(
'pk_test_TYooMQauvdEDq54NiTphI7jx'
);const elements = stripe.elements();
Adicionar e configurar um elemento IBAN
O Elements precisa de um lugar específico em seu formulário de pagamentos. Crie nós de DOM vazios (contêineres) com IDs individuais no formulário de pagamento. Além disso, o cliente precisa ler e aceitar o mandato do débito automático SEPA.
Exiba o seguinte texto de autorização padrão para que o cliente assine implicitamente o mandato.
Substitua Rocket Rides pelo nome da sua empresa.
Authorization text template
By providing your payment information and confirming this payment, you authorise (A) and Stripe, our payment service provider, to send instructions to your bank to debit your account and (B) your bank to debit your account in accordance with those instructions. As part of your rights, you are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. A refund must be claimed within 8 weeks starting from the date on which your account was debited. Your rights are explained in a statement that you can obtain from your bank. You agree to receive notifications for future debits up to 2 days before they occur.
A configuração de uma forma de pagamento cria o mandato aceito. Como o cliente assinou implicitamente o mandato quando aceitou estes termos, você precisa comunicar esses termos em um formulário ou por e-mail.
payment_setup.html
<formaction="/form"method="post"id="setup-form"><divclass="form-row inline"><divclass="col"><labelfor="accountholder-name">
Name
</label><inputid="accountholder-name"name="accountholder-name"placeholder="Jenny Rosen"required/></div><divclass="col"><labelfor="email">
Email Address
</label><inputid="email"name="email"type="email"placeholder="jenny.rosen@example.com"required/></div></div><divclass="form-row"><!--
Using a label with a for attribute that matches the ID of the
Element container enables the Element to automatically gain focus
when the customer clicks on the label.
--><labelfor="iban-element">
IBAN
</label><divid="iban-element"><!-- A Stripe Element will be inserted here. --></div></div><!-- Add the client_secret from the SetupIntent as a data attribute --><buttonid="submit-button"data-secret="{CLIENT_SECRET}">
Set up SEPA Direct Debit
</button><!-- Display mandate acceptance text. --><divid="mandate-acceptance">
By providing your payment information and confirming this payment, you
authorise (A) Rocket Rides and Stripe, our payment service provider
and/or PPRO, its local service provider, to send instructions to your
bank to debit your account and (B) your bank to debit your account in
accordance with those instructions. As part of your rights, you are
entitled to a refund from your bank under the terms and conditions of
your agreement with your bank. A refund must be claimed within 8 weeks
starting from the date on which your account was debited. Your rights
are explained in a statement that you can obtain from your bank. You
agree to receive notifications for future debits up to 2 days before
they occur.
</div><!-- Used to display form errors. --><divid="error-message"role="alert"></div></form>
Quando o formulário for carregado, crie uma instância do IBAN Element e monte-a no contêiner do Element:
// Custom styling can be passed to options when creating an Element.const style ={
base:{
color:'#32325d',
fontSize:'16px','::placeholder':{
color:'#aab7c4'},':-webkit-autofill':{
color:'#32325d',},},
invalid:{
color:'#fa755a',
iconColor:'#fa755a',':-webkit-autofill':{
color:'#fa755a',},},};const options ={
style,
supportedCountries:['SEPA'],// Elements can use a placeholder as an example IBAN that reflects// the IBAN format of your customer's country. If you know your// customer's country, we recommend passing it to the Element as the// placeholderCountry.
placeholderCountry:'DE',};// Create an instance of the IBAN Elementconst iban = elements.create('iban', options);// Add an instance of the IBAN Element into the `iban-element` <div>
iban.mount('#iban-element');
Use confirmSepaDebitPayment ou, para assinaturas que não cobram pagamento antecipado, confirmSepaDebitSetup para confirmar a assinatura e criar um PaymentMethod de débito automático SEPA. Inclua o nome e endereço de e-mail do cliente nas propriedades payment_method.billing_details.
PaymentSetup.js
// Define stripe with your publishable keyvar stripe =Stripe('pk_test_1234');// Get the IBAN information from your elementvar iban = document.getElementById('iban-element');const form = document.getElementById('payment-form');const accountholderName = document.getElementById('accountholder-name');const email = document.getElementById('email');
form.addEventListener('submit',async(event)=>{
event.preventDefault();// Create the subscriptionconst res =awaitfetch('/create-subscription',{
method:'POST',});const{type, clientSecret}=await res.json();const confirmIntent = type ==='setup'? stripe.confirmSepaDebitSetup: stripe.confirmSepaDebitPayment;const{error}=awaitconfirmIntent({
clientSecret,{
payment_method:{
sepa_debit: iban,
billing_details:{
name: accountholderName.value,
email: email.value,},},}});});
Você precisa armazenar uma forma de pagamento para o cliente para processar pagamentos futuros. Para isso, defina a forma de pagamento cobrada no nível superior do objeto Customer e como forma de pagamento padrão para faturas:
pagamentos por débito automático SEPA nunca são repetidos automaticamente, mesmo que haja um cronograma de novas tentativas configurado para outras formas de pagamento.
Você pode testar a integração usando os IBANs abaixo. Os dados da forma de pagamento são coletados para todos os IBANs, mas cada um deles terá um comportamento diferente na cobrança.
IBANs de teste
Número da conta
Descrição
DE89370400440532013000
O status do PaymentIntent muda de processing para succeeded.
DE08370400440532013003
O status do PaymentIntent muda de processing para succeeded após pelo menos três minutos.
DE62370400440532013001
O status do PaymentIntent muda de processing para requires_payment_method.
DE78370400440532013004
O status do PaymentIntent muda de processing para requires_payment_method após pelo menos três minutos.
DE35370400440532013002
O status do PaymentIntent muda de processing para succeeded, mas uma contestação é imediatamente criada.
DE65370400440000343434
O pagamento falha com um código de falha charge_exceeds_source_limit devido ao valor do pagamento fazer com que a conta exceda o limite de volume de pagamentos semanal.
DE27370400440000121212
O pagamento falha com um código de falha charge_exceeds_weekly_limit quando o valor do pagamento excedeu o limite de volume de transações da conta.
DE65370400440002222227
O pagamento falha com um código de falha insufficient_funds.