Crie uma integração de assinaturas
Crie e gerencie assinaturas para aceitar pagamentos recorrentes.
Aprenda a vender assinaturas com preço fixo. Você usará o Elemento de Pagamento Móvel para criar um formulário de pagamento personalizado que você pode integrar ao seu aplicativo.

Observação
Se você vende produtos ou serviços digitais consumidos no seu aplicativo (por exemplo, assinaturas, moedas de jogos, níveis de jogos, acesso a conteúdo premium ou desbloqueio de uma versão completa), use as APIs de compra no aplicativo da Apple. Essa regra tem algumas exceções, incluindo serviços pessoais individuais e aplicativos baseados em regiões específicas. Consulte as diretrizes de revisão da App Store para obter mais informações.
Crie sua assinatura
Este guia ensina a:
- Modelar seus negócios criando um catálogo de produtos.
- Crie um processo de registro para adicionar clientes.
- Criar assinaturas e coletar dados de pagamento.
- Teste e monitore o status de pagamentos e assinaturas.
- Permitir que os clientes alterem o plano ou cancelem a assinatura.
- Saiba como usar o modo de faturamento flexíve para acessar o comportamento de faturamento aprimorado e recursos adicionais.
Como modelar na Stripe
Assinaturas simplificam as cobranças, criando faturas e PaymentIntents automaticamente para você. Para criar e ativar uma assinatura, crie primeiro um produto como modelo do que está sendo vendido e um preço que determina a frequência e o valor da cobrança. Você também precisa de um cliente para armazenar os PaymentMethods usados para fazer cada pagamento recorrente.
Definições de objetos de API
Recurso | Definição |
---|---|
Cliente | Representa um cliente que compra uma assinatura. Use o objeto Customer associado a uma assinatura para fazer e rastrear cobranças recorrentes e para gerenciar os produtos dos quais têm assinatura. |
Direito | Representa o acesso de um cliente a um recurso incluído em um produto de serviço que assina. Quando você cria uma assinatura para a compra recorrente de um produto por um cliente, um direito ativo é automaticamente criado para cada recurso associado a esse produto. Quando um cliente acessa seus serviços, use os direitos ativos para habilitar os recursos incluídos na assinatura. |
Recurso | Representa uma função ou capacidade que seus clientes podem acessar quando assinam um produto de serviço. Você pode incluir recursos em um produto criando ProductFeatures. |
Fatura | Uma declaração de valores devidos por um cliente que acompanha os status de pagamento desde o esboço até o pagamento (ou outro tipo de finalização). As assinaturas geram faturas automaticamente. |
PaymentIntent | Uma maneira de criar fluxos de pagamentos dinâmicos. Um PaymentIntent acompanha o ciclo de vida do fluxo de checkout de um cliente e aciona etapas adicionais de autenticação quando for exigido por mandatos regulatórios, regras personalizadas contra fraudes do Radar ou formas de pagamento baseadas em redirecionamento. As faturas criam PaymentIntents automaticamente. |
PaymentMethod | As formas de pagamento que um cliente usa para pagar seus produtos. Por exemplo, você pode armazenar um cartão de crédito em um objeto Customer e usá-lo para fazer pagamentos recorrentes para esse cliente. Normalmente usado com as APIs Payment Intents ou Setup Intents. |
Price | Define o preço unitário, a moeda e o ciclo de faturamento de um produto. |
Product | Um produto ou serviço que sua empresa vende. Um produto de serviço pode incluir um ou mais recursos. |
ProductFeature | Representa a inclusão de um único recurso em um único produto. Cada produto está associado a um ProductFeature para cada recurso que é incluído, e cada recurso é associado a um ProductFeature para cada produto que o inclui. |
Subscription | Representa a compra recorrente agendada de um produto por um cliente. Use uma assinatura para coletar pagamentos e fornecer entregas repetidas ou acesso contínuo a um produto. |
Aqui está um exemplo de como produtos, recursos e direitos funcionam juntos. Imagine que você deseja configurar um serviço de assinatura que oferece dois níveis: um produto padrão com funções básicas e um produto avançado que adiciona funções estendidas.
- Você cria dois recursos:
basic_
efeatures extended_
.features - Você cria dois produtos:
standard_
eproduct advanced_
.product - Para o produto padrão, você cria uma ProductFeature que associa
basic_
comfeatures standard_
.product - Para o produto avançado, você cria duas ProductFeatures: uma que associa
basic_
comfeatures advanced_
e outra que associaproduct extended_
comfeatures advanced_
.product
Um cliente, first_
, assina o produto padrão. Quando você cria a assinatura, a Stripe cria automaticamente um Entitlement que associa first_
com basic_
.
Outro cliente, second_
, assina o produto avançado. Quando você cria a assinatura, a Stripe cria automaticamente dois Entitlements: um que associa second_
a basic_
e outro que associa second_
com extended_
.
É possível determinar quais recursos fornecer para um cliente recuperando seus direitos ativos ou escutando o evento Active Entitlement Summary. Você não precisa buscar as assinaturas, os produtos e os recursos dele.
Configurar a Stripe
O SDK do React Native é de código aberto e totalmente documentado. Internamente, utiliza as SDKs de iOS nativo e Android. Para instalar o SDK do React Native da Stripe, execute um dos seguintes comandos no diretório do seu projeto (dependendo de qual gerenciador de pacotes você usa):
Em seguida, instale algumas outras dependências necessárias:
- Para iOS, vá para o diretório ios e execute
pod install
para garantir a instalação das dependências nativas necessárias. - Para Android, não há mais dependências para instalar.
Observação
Recomendamos seguir o guia oficial do TypeScript para adicionar suporte ao TypeScript.
Inicialização da Stripe
Para inicializar a Stripe no aplicativo React Native, insira sua tela de pagamento com o componente StripeProvider
ou use o método de inicialização initStripe
. Somente a chave da API publicável em publishableKey
é necessária. O exemplo a seguir mostra como inicializar a Stripe usando o componente StripeProvider
.
import { useState, useEffect } from 'react'; import { StripeProvider } from '@stripe/stripe-react-native'; function App() { const [publishableKey, setPublishableKey] = useState(''); const fetchPublishableKey = async () => { const key = await fetchKey(); // fetch key from your server here setPublishableKey(key); }; useEffect(() => { fetchPublishableKey(); }, []); return ( <StripeProvider publishableKey={publishableKey} merchantIdentifier="merchant.identifier" // required for Apple Pay urlScheme="your-url-scheme" // required for 3D Secure and bank redirects > {/* Your app code here */} </StripeProvider> ); }
Observação
Use suas chaves de API de teste enquanto testa e desenvolve, e as chaves de modo de produção quando publica seu aplicativo.
Em seguida, instale a Stripe CLI. A CLI fornece testes de webhooks, e você pode executá-la para fazer chamadas de API para a Stripe. Este guia mostra a você como usar a CLI para configurar um modelo de preços em uma seção posterior.
Para obter opções de instalação adicionais, consulte Comece a usar o Stripe CLI.
Criar o modelo de preçosStripe CLI ou Dashboard
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.
Criar o clienteCliente e servidor
A Stripe precisa de um cliente para cada assinatura. No front-end do seu aplicativo, colete todas as informações necessárias dos seus usuários e passe-as ao back-end.
Se precisar coletar detalhes de endereço, o Address Element permite coletar um endereço de entrega ou cobrança para seus clientes. Saiba mais o Address Element na página Address Element.
import React from 'react'; import {View, TextInput, StyleSheet, Button, Platform} from 'react-native'; function RegisterView() { const [email, setEmail] = React.useState(''); const createCustomer = async () => { const apiEndpoint = Platform.OS === 'ios' ? 'http://localhost:4242' : 'http://10.0.2.2:4567'; const response = await fetch(`${apiEndpoint}/create-customer`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ email: email, }), }); if (response.status === 200) { const customer = await response.json(); console.log(customer); } }; return ( <View> <TextInput style={styles.input} placeholder="Email" value={email} onChangeText={setEmail} /> <Button title="Register" onPress={async () => { await createCustomer(); }} /> </View> ); } const styles = StyleSheet.create({ input: { height: 40, margin: 12, borderWidth: 1, padding: 10, }, }); export default RegisterView;
No servidor, crie o objeto do cliente Stripe.
Criar a assinaturaCliente e servidor
Observação
Se quiser renderizar o Payment Element antes de criar uma assinatura, consulte Coletar dados de pagamento antes de criar um Intent.
Permita que seu novo cliente escolha um plano e crie a assinatura. Neste guia, ele escolhe Básico ou Premium.
No seu aplicativo, passe o ID do preço selecionado e o ID do registro do cliente ao back-end.
const createSubscription = async (priceId, customerId) => { const apiEndpoint = Platform.OS === 'ios' ? 'http://localhost:4242' : 'http://10.0.2.2:4567'; const response = await fetch(`${apiEndpoint}/create-subscription`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ priceId: priceId, customerId: customerId, }), }); if (response.status === 200) { const subscription = await response.json(); return subscription; } };
No back-end, crie a assinatura com status incomplete
usando payment_
. Em seguida, retorne o client_
do primeiro Payment Intent da assinatura ao frontend para concluir o pagamento expandindo o confirmation_
na última fatura da assinatura.
Para habilitar comportamento de assinatura aprimorado, defina billing_
como flexible
. Você deve usar a versão 2025-06-30.basil ou posterior da API da Stripe.
Defina save_default_payment_method como on_
para salvar a forma de pagamento como o padrão para uma assinatura quando um pagamento for bem-sucedido. Salvar uma forma de pagamento padrão aumenta o sucesso de futuros pagamentos de assinatura.
Observação
Se estiver usando um preço multimoeda, use o parâmetro currency para informar à assinatura qual das moedas do preço deve ser usada. (Se você omitir o parâmetro currency
, a Assinatura usará a moeda padrão do preço.)
Neste ponto, a assinatura fica inactive
e aguardando pagamento. Veja este exemplo de resposta. Os campos mínimos para armazenar são destacados, mas armazenam qualquer coisa que o aplicativo acessa com frequência.
{ "id": "sub_JgRjFjhKbtD2qz", "object": "subscription", "application_fee_percent": null, "automatic_tax": { "disabled_reason": null, "enabled": false, "liability": "null" }, "billing_cycle_anchor": 1623873347,
Colete dados de pagamentoCliente
Use the Payment Sheet to collect payment details and activate the subscription. You can customize Elements to match the look and feel of your application.
The Payment Sheet securely collects all necessary payment details for a wide variety of payments methods. Learn about the supported payment methods for Payment Sheet and Subscriptions.
Adicionar o Payment Element ao seu aplicativo
Observação
Esta etapa mostra uma maneira de começar, mas você pode usar qualquer integração de pagamentos no aplicativo.
Inicialize e apresente o Mobile Payment Element usando a classe PaymentSheet.
import React from 'react'; import {useStripe, PaymentSheetError} from '@stripe/stripe-react-native'; import {View, Button} from 'react-native'; function SubscribeView({clientSecret}) { const {initPaymentSheet, presentPaymentSheet} = useStripe(); React.useEffect(() => { const initializePaymentSheet = async () => { const {error} = await initPaymentSheet({ paymentIntentClientSecret: clientSecret, returnURL: 'stripe-example://payment-sheet', // Set `allowsDelayedPaymentMethods` to true if your business handles // delayed notification payment methods like US bank accounts. allowsDelayedPaymentMethods: true, }); if (error) { // Handle error } }; initializePaymentSheet(); }, [clientSecret, initPaymentSheet]); return ( <View> <Button title="Subscribe" onPress={async () => { const {error} = await presentPaymentSheet(); if (error) { if (error.code === PaymentSheetError.Failed) { // Handle failed } else if (error.code === PaymentSheetError.Canceled) { // Handle canceled } } else { // Payment succeeded } }} /> </View> ); } export default SubscribeView;
O Mobile Payment Element renderiza uma planilha que permite ao cliente selecionar uma forma de pagamento. O formulário coleta automaticamente todos os dados de pagamento necessários da forma de pagamento selecionada.
Configurar allowsDelayedPaymentMethods
como verdadeiro permite formas de pagamento de notificação posterior como contas bancárias dos EUA. Para essas formas de pagamento, o status final do pagamento não é conhecido quando o PaymentSheet
é concluído, sendo efetivado ou não posteriormente. Se você aceitar esses tipos de formas de pagamento, informe o cliente que seu pedido está confirmado e somente processe o pedido (por exemplo, fazendo o envio do produto) quando o pagamento for bem-sucedido.
Você pode personalizar o Payment Element conforme o design do seu aplicativo usando a propriedade appearance
do seu objeto PaymentSheet.
.
Confirmar pagamento
O Mobile Payment Element cria um PaymentMethod e confirma o primeiro PaymentIntent da assinatura incompleta, resultando em uma cobrança. Se a Autenticação forte de cliente (SCA) for necessária para o pagamento, o Payment Element gerenciará o processo de autenticação antes de confirmar o PaymentIntent.
Configurar um URL de retorno (somente iOS)Lado do cliente
Quando um cliente sair do seu aplicativo (por exemplo, para fazer a autenticação no Safari ou no aplicativo do banco), forneça uma opção para que ele retorne automaticamente ao seu aplicativo. Muitos tipos de formas de pagamento exigem um URL de retorno. Se você não fornecer um, não poderemos apresentar formas de pagamento que exijam um URL de retorno aos seus usuários, mesmo que você os habilite.
Para fornecer um URL de retorno:
- Cadastre um URL personalizado. Links universais não são aceitos.
- Configurar seu URL personalizado.
- Configure seu componente-raiz para encaminhar o URL ao SDK da Stripe, conforme mostrado abaixo.
Observação
Se estiver usando a Expo, defina seu esquema no arquivo app.
.
import { useEffect, useCallback } from 'react'; import { Linking } from 'react-native'; import { useStripe } from '@stripe/stripe-react-native'; export default function MyApp() { const { handleURLCallback } = useStripe(); const handleDeepLink = useCallback( async (url: string | null) => { if (url) { const stripeHandled = await handleURLCallback(url); if (stripeHandled) { // This was a Stripe URL - you can return or add extra handling here as you see fit } else { // This was NOT a Stripe URL – handle as you normally would } } }, [handleURLCallback] ); useEffect(() => { const getUrlAsync = async () => { const initialUrl = await Linking.getInitialURL(); handleDeepLink(initialUrl); }; getUrlAsync(); const deepLinkListener = Linking.addEventListener( 'url', (event: { url: string }) => { handleDeepLink(event.url); } ); return () => deepLinkListener.remove(); }, [handleDeepLink]); return ( <View> <AwesomeAppComponent /> </View> ); }
Além disso, defina o returnURL
quando chamar o método initPaymentSheet
:
await initPaymentSheet({ ... returnURL: 'your-app://stripe-redirect', ... });
Para obter mais informações sobre esquemas de URL nativos, consulte a documentação do Android e do iOS.
OpcionalAtivar Apple Pay
Solicitar um ID de comerciante da Apple
Obtenha um ID de comerciante da Apple solicitando um novo identificador no site de desenvolvedores da Apple.
Preencha o formulário com descrição e identificador. A descrição é para seu controle e pode ser modificada no futuro. A Stripe recomenda que você use o nome do aplicativo como identificador (por exemplo, merchant.
).
Criar um certificado do Apple Pay
Crie um certificado para criptografia de dados de pagamento pelo aplicativo.
Vá até Configurações de certificado do iOS no Dashboard, clique em Adicionar novo aplicativo e siga o guia.
Baixe um arquivo de solicitação de assinatura de certificado (CSR) para obter um certificado seguro da Apple que permite usar o Apple Pay.
Um arquivo CSR deve ser usado para emitir exatamente um certificado. Se você trocar seu ID de comerciante da Apple, acesse as Configurações de certificado do iOS no Dashboard para obter um novo CSR e certificado.
Integrar com Xcode
Adicione as funções do Apple Pay ao aplicativo. No Xcode, abra as configurações do projeto, clique na guia Signing & Capabilities e adicione o recurso Apple Pay. Talvez seja necessário fazer login na sua conta de desenvolvedor. Selecione o ID de comerciante criado anteriormente e o aplicativo já pode aceitar Apple Pay.

Habilitar o recurso Apple Pay no Xcode
Adicionar Apple Pay
Rastreamento de pedidos
Para adicionar informações de rastreamento de pedido no iOS 16 ou mais recente, configure uma função de retorno de chamada setOrderTracking
. A Stripe chama sua implementação após a conclusão do pagamento, mas antes que o iOS ignore a descrição de compra do Apple Pay.
Na implementação da função de retorno de chamada setOrderTracking
, obtenha os detalhes do pedido concluído no seu servidor e passe esses dados à função de completion
informada.
Para saber mais sobre rastreamento de pedidos, consulte a documentação de pedidos da carteira da Apple.
await initPaymentSheet({ // ... applePay: { // ... setOrderTracking: async complete => { const apiEndpoint = Platform.OS === 'ios' ? 'http://localhost:4242' : 'http://10.0.2.2:4567'; const response = await fetch( `${apiEndpoint}/retrieve-order?orderId=${orderId}`, { method: 'GET', headers: { 'Content-Type': 'application/json', }, }, ); if (response.status === 200) { const orderDetails = await response.json(); // orderDetails should include orderIdentifier, orderTypeIdentifier, // authenticationToken and webServiceUrl complete(orderDetails); } }, }, });
Ouvir webhooksServidor
Para concluir a integração, é preciso processar os webhooks enviados pela Stripe. Os eventos são acionados sempre que o estado dentro da Stripe muda, como assinaturas criando novas faturas. Em seu aplicativo, configure um gerenciador de HTTP para aceitar uma solicitação POST contendo o evento de webhook e verifique a assinatura do evento:
Durante o desenvolvimento, use o Stripe CLI para observar webhooks e encaminhá-los ao seu aplicativo. Execute o seguinte em um novo terminal enquanto seu aplicativo de desenvolvimento está sendo executado:
stripe listen --forward-to localhost:4242/webhook
Para produção, configure um URL de endpoint de webhook no Dashboard ou use o Webhook Endpoints API.
Você precisa ouvir alguns eventos para concluir as etapas restantes deste guia. Consulte Eventos de assinatura para obter mais detalhes sobre webhooks específicos de assinatura.
Providenciar acesso ao seu serviçoCliente e servidor
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 apresentam 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 de status.
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
product.
,id subscription.
eid subscription.
no seu banco de dados junto com ostatus customer.
que você já salvou. Verifique esse registro ao determinar quais recursos devem ser habilitados para o usuário em 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 porque o cartão de crédito venceu, o que coloca a assinatura em 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 Stripe.
Cancelar a assinaturaCliente e servidor
É comum permitir que os clientes cancelem suas assinaturas. Este exemplo adiciona uma opção de cancelamento à página de configurações da conta.
O exemplo coleta o ID da assinatura no front-end, mas o seu aplicativo pode obter essas informações do seu banco de dados para seu usuário conectado.

Configurações da conta com a capacidade de cancelar a assinatura
const cancelSubscription = async subscriptionId => { const apiEndpoint = Platform.OS === 'ios' ? 'http://localhost:4242' : 'http://10.0.2.2:4567'; const response = await fetch(`${apiEndpoint}/cancel-subscription`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ subscriptionId: subscriptionId, }), }); if (response.status === 200) { const subscription = await response.json(); return subscription; } };
No back-end, defina o endpoint para a chamada do seu aplicativo.
Seu back-end recebe um evento customer.
.
Após o cancelamento da assinatura, remova do banco de dados o ID de assinatura da Stripe que você armazenou anteriormente e limite o acesso ao seu serviço.
Depois de serem canceladas, as assinaturas não podem ser reativadas. Obtenha dados de faturamento atualizados do seu cliente, atualize a forma de pagamento padrão e crie uma nova assinatura com o registro de cliente existente.
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 da conta 900123456 e BSB 000000 . O PaymentIntent confirmado inicialmente passa para o status processing , depois passa para succeeded três minutos depois. |
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 da conta 111111113 e BSB 000000 . |
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 . |
Monitorar 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 mais em testar sua integração com o Billing.
OpcionalPermita que os clientes alterem seus planosCliente e servidor
Para permitir que seus clientes alterem assinaturas, obtenha o ID do preço da opção para a qual desejam mudar. Em seguida, envie o ID do novo preço do aplicativo para um endpoint de back-end. Este exemplo também passa o ID da assinatura, mas é possível acessá-lo no seu banco de dados para seu usuário conectado.
const updateSubscription = async (subscriptionId, priceId) => { const apiEndpoint = Platform.OS === 'ios' ? 'http://localhost:4242' : 'http://10.0.2.2:4567'; const response = await fetch(`${apiEndpoint}/update-subscription`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ subscriptionId: subscriptionId, priceId: priceId, }), }); if (response.status === 200) { const subscription = await response.json(); return subscription; } };
No back-end, defina o endpoint para a chamada do seu front-end, passando o ID da assinatura e o ID do novo preço. A assinatura agora é Premium, a US$ 15 por mês, em vez de Básica, a US$ 5 por mês.
Seu aplicativo recebe um evento customer.
.
OpcionalPrévia de uma alteração de preçoCliente e servidor
Quando seu cliente altera a assinatura, normalmente há um ajuste no valor devido, conhecido como cobrança proporcional. Você pode usar o endpoint de criação de prévia de fatura para exibir o valor ajustado aos clientes.
No aplicativo, passe os detalhes da prévia da fatura para um endpoint de back-end.
const createPreviewInvoice = async (subscriptionId, priceId, newPriceId) => { const apiEndpoint = Platform.OS === 'ios' ? 'http://localhost:4242' : 'http://10.0.2.2:4567'; const response = await fetch(`${apiEndpoint}/create-preview-invoice`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ subscriptionId: subscriptionId, priceId: priceId, newPriceId: newPriceId, }), }); if (response.status === 200) { const invoice = await response.json(); return invoice; } };
No back-end, defina o endpoint para a chamada do seu front-end.
OpcionalExibir a forma de pagamento do clienteCliente e servidor
Exibir a bandeira e os últimos quatro dígitos do cartão do seu cliente informa qual cartão está sendo cobrado ou se é preciso atualizar a forma de pagamento.
No front-end, envie o ID da forma de pagamento para um endpoint de back-end que recupera os detalhes da forma de pagamento.
const retrieveCustomerPaymentMethod = async paymentMethodId => { const apiEndpoint = Platform.OS === 'ios' ? 'http://localhost:4242' : 'http://10.0.2.2:4567'; const response = await fetch( `${apiEndpoint}/retrieve-customer-payment-method`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ paymentMethodId: paymentMethodId, }), }, ); if (response.status === 200) { const paymentMethod = await response.json(); return paymentMethod; } };
No back-end, defina o endpoint para a chamada do seu aplicativo.
Exemplo de resposta:
{ "id": "pm_1GcbHY2eZvKYlo2CoqlVxo42", "object": "payment_method", "billing_details": { "address": { "city": null, "country": null, "line1": null, "line2": null, "postal_code": null,
Observação
Recomendamos que você salve o paymentMethod.
e last4
no seu banco de dados (por exemplo, paymentMethod.
como stripeCustomerPaymentMethodId
na sua coleção ou tabela users
. Você também pode armazenar exp_
, exp_
, fingerprint
e billing_
conforme necessário. Isso é para limitar o número de chamadas que você faz para a Stripe, tanto para eficiência de desempenho quanto para evitar possíveis limitações de taxa.
Divulgue a Stripe para seus clientes
A Stripe coleta informações sobre interações do cliente com o Elements para fornecer serviços a você, evitar fraudes e melhorar os serviços. Isso inclui o uso de cookies e endereços IP para identificar quais Elements o cliente visualizou durante uma única sessão de checkout. Você é responsável por divulgar e obter todos os direitos e consentimentos necessários para que a Stripe use os dados dessas maneiras. Para saber mais, acesse nossa central de privacidade.