Permita que as empresas da sua plataforma aceitem pagamentos diretamente
Facilite pagamentos diretos a empresas na sua plataforma SaaS de clientes próprios.
Este guia abrange a permissão para seus usuários aceitarem pagamentos, transferir uma parte das receitas dos usuários para o seu saldo e repassar o restante para as contas bancárias dos usuários. Para ilustrar esses conceitos, usaremos um exemplo de plataforma que permite que as empresas criem suas próprias lojas online.

Essa integração combina todas as etapas exigidas para pagar – coleta dos dados de pagamento e confirmação do pagamento – em uma única folha que é exibida com base no seu aplicativo.
Pré-requisitos
- Cadastre sua plataforma.
- Adicione dados da empresa para ativar sua conta.
- Conclua seu perfil da plataforma.
- Personalize as configurações da sua marca. Adicione um nome de empresa, ícone e cor da marca.
Configurar a StripeDo lado do servidorDo lado do cliente
Primeiro, você precisa de uma conta Stripe. Cadastre-se agora.
Lado do servidor
Esta integração exige que os endpoints do seu servidor se comuniquem com a API da Stripe. Use as bibliotecas oficiais para acessar a API da Stripe pelo seu servidor:
Lado do cliente
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.
Criar uma conta conectada
Quando um usuário (vendedor ou provedor de serviços) se cadastrar em sua plataforma, crie uma Conta de usuário (chamada de conta conectada) para aceitar pagamentos e enviar valores para a conta bancária dele. Contas conectadas representam seu usuário no API da Stripe e ajudam a gerenciar a coleta de requisitos de onboarding para que a Stripe possa verificar a identidade do usuário. No nosso exemplo do criador de lojas, a conta conectada representa a empresa que está configurando a loja online.
Etapa 2.1: Crie uma conta conectada e preencha os dados Lado do servidor
Use a API /v1/accounts
para criar uma conta conectada. Você pode criar a conta conectada usando os parâmetros padrão da conta conectada ou especificando o tipo de conta.
Se você já coletou dados de suas contas conectadas, pode usá-los para preencher o objeto Account
. Você pode preencher quaisquer dados de conta, inclusive dados pessoais e comerciais, dados de contas externas e muito mais.
O Connect Onboarding não solicita as informações pré-preenchidas. No entanto, ele solicita que o titular da conta confirme as informações pré-preenchidas antes de aceitar o contrato de serviços do Connect.
Ao testar sua integração, preencha antecipadamente os dados da conta usando dados de teste.
Etapa 2.2: crie um link de conta Lado do servidor
Você pode criar um link de conta chamando a API Account Links com os seguintes parâmetros:
account
refresh_
url return_
url type
=account_
onboarding
Etapa 2.3: redirecione seu usuário para o URL do link da conta Lado do cliente
A resposta à sua solicitação de links de conta inclui um valor para a chave url
. Os links de conta são temporários e usados somente uma vez, porque concedem acesso aos dados pessoais do usuário da conta conectada. Se quiser preencher as informações, faça-o antes de gerar o link da conta. Após criar o link para uma conta Standard, não será possível ler ou gravar informações na conta. Envie este URL ao aplicativo e abra-o no navegador para que o usuário conclua o fluxo de Connect Onboarding.
Dica de segurança
Não envie URLs de links de conta por e-mail, SMS ou outra maneira para fora do aplicativo da sua plataforma. Em vez disso, forneça-os ao titular da conta autenticado dentro do seu aplicativo.
Etapa 2.4: gerencie o usuário que está retornando à sua plataforma Lado do cliente
O Connect Onboarding exige que você passe um return_
e um refresh_
para gerenciar todos os casos em que o usuário é redirecionado à sua plataforma. É importante implementá-los corretamente para proporcionar a melhor experiência ao usuário. Você pode configurar um deep link para habilitar a página da Stripe a redirecionar automaticamente para o seu aplicativo.
return_url
A Stripe emite um redirecionamento para este URL quando o usuário conclui o fluxo do Connect Onboarding. Isso não significa que todas as informações foram coletadas ou que não há requisitos pendentes na conta. Significa somente que a entrada e saída do fluxo foram normais.
Nenhum estado é passado através deste URL. Após o redirecionamento de um usuário para o return_
, verifique o estado do parâmetro details_
na conta dele, realizando uma das seguintes ações:
refresh_url
O usuário é redirecionado para refresh_
nestes casos:
- O link expirou (alguns minutos se passaram desde a criação do link)
- O usuário já acessou o link (atualizou a página ou clicou em Voltar ou Avançar no navegador).
- Sua plataforma não consegue mais acessar a conta
- A conta foi recusada
O refresh_
deve acionar um método no servidor para chamar novamente a API Account Links com os mesmos parâmetros e redirecionar o usuário ao fluxo do Connect Onboarding para criar uma experiência ideal.
Etapa 2.5: Gerencie os usuários que não concluíram o onboarding
Um usuário que é redirecionado para o seu return_
pode não ter concluído o processo de onboarding. Use o endpoint /v1/accounts
para recuperar a conta do usuário e verificar charges_
. Se a conta não estiver totalmente integrada, forneça solicitações de IU para permitir que o usuário continue o onboarding mais tarde. O usuário pode concluir a ativação da conta por meio de um novo link de conta (gerado por sua integração). Verifique o estado do parâmetro details_
na conta dele para ver se o processo de onboarding foi concluído.
Ativar formas de pagamento
Veja as configurações de formas de pagamento e ative as que pretende aceitar. Os pagamentos com cartão são ativados por padrão, mas você pode ativar e desativar as formas de pagamento conforme a necessidade.
Adicionar um endpointDo lado do servidor
Nota
Para exibir o PaymentSheet antes de criar um PaymentIntent, consulte Colete os dados de pagamento antes de criar um Intent.
Esta integração usa três objetos da API da Stripe:
PaymentIntent: A Stripe usa isso para representar sua intenção de coletar o pagamento de um cliente, acompanhando suas tentativas de cobrança e alterações no estado do pagamento durante todo o processo.
(Opcional) Customer: Para configurar uma forma de pagamento para pagamentos futuros, vincule-a a um Customer. Crie um objeto Customer quando o cliente abrir uma conta na sua empresa. Se o cliente pagar como convidado, você pode criar o objeto Customer antes do pagamento e associá-lo à sua representação interna da conta do cliente, mais tarde.
(Opcional) Chave Efêmera de Cliente: as informações sobre o objeto Customer são confidenciais e não podem ser obtidas diretamente por um apliativo. Uma Chave Efêmera concede acesso temporário ao Cliente para o SDK.
Observação
Se você nunca salva cartões para um cliente e não permite que clientes retornando reutilizem cartões salvos, é possível omitir os objetos cliente e Ephemeral Key da sua integração.
Por motivos de segurança, seu aplicativo não pode criar esses objetos. Em vez disso, adicione um endpoint ao seu servidor que:
- Recuperar ou criar um Customer.
- Criar uma chave efêmera para o Customer.
- Cria um PaymentIntent com o valor, a moeda e o cliente. Também é possível incluir opcionalmente o parâmetro
automatic_
. A Stripe habilita sua funcionalidade por padrão na versão mais recente da API.payment_ methods - Retorna o segredo do cliente do Payment Intent, o
secret
da chave efêmera, o id do cliente e sua chave publicável ao aplicativo.
As formas de pagamento mostradas aos clientes durante o processo de checkout também são incluídas no PaymentIntent. Você pode permitir que a Stripe obtenha as formas de pagamento das configurações do Dashboard ou listá-las manualmente. Independentemente da opção escolhida, saiba que a moeda passada no PaymentIntent filtra as formas de pagamento mostradas para o cliente. Por exemplo, se você passar EUR no eur
e a OXXO estiver ativada no Dashboard, a OXXO não será exibida ao cliente porque a OXXO não aceita pagamentos em eur
.
Se sua integração não exige uma opção baseada em código para oferecer formas de pagamento, a Stripe recomenda a opção automática. Isso ocorre porque a Stripe avalia a moeda, as restrições de forma de pagamento e outros parâmetros para determinar a lista de formas de pagamento aceitas. Priorizamos as formas de formas de pagamento que aumentam a conversão e que são mais relevantes para a moeda e a localização do cliente.
Integrar a descrição da compraDo lado do cliente
Antes de exibir o Element Pagamento para dispositivos móveis, a página de checkout deve:
- Mostrar os produtos sendo comprados e o valor total
- Coletar todos os dados de entrega necessários
- Incluir um botão de checkout para apresentar a IU da Stripe
No checkout do aplicativo, faça uma solicitação de rede para o endpoint de backend criado por você na etapa anterior e chame o initPaymentSheet
do hook useStripe
.
export default function CheckoutScreen() { const { initPaymentSheet, presentPaymentSheet } = useStripe(); const [loading, setLoading] = useState(false); const fetchPaymentSheetParams = async () => { const response = await fetch(`${API_URL}/payment-sheet`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, }); const { paymentIntent, ephemeralKey, customer } = await response.json(); return { paymentIntent, ephemeralKey, customer, }; }; const initializePaymentSheet = async () => { const { paymentIntent, ephemeralKey, customer, } = await fetchPaymentSheetParams(); const { error } = await initPaymentSheet({ merchantDisplayName: "Example, Inc.", customerId: customer, customerEphemeralKeySecret: ephemeralKey, paymentIntentClientSecret: paymentIntent, // Set `allowsDelayedPaymentMethods` to true if your business can handle payment //methods that complete payment after a delay, like SEPA Debit and Sofort. allowsDelayedPaymentMethods: true, defaultBillingDetails: { name: 'Jane Doe', } }); if (!error) { setLoading(true); } }; const openPaymentSheet = async () => { // see below }; useEffect(() => { initializePaymentSheet(); }, []); return ( <Screen> <Button variant="primary" disabled={!loading} title="Checkout" onPress={openPaymentSheet} /> </Screen> ); }
Quando o cliente tocar no botão Checkout, chame presentPaymentSheet()
para abrir a descrição. Depois que o cliente finalizar o pagamento, a descrição será descartada e a promessa será resolvida com um StripeError<PaymentSheetError>
opcional.
export default function CheckoutScreen() { // continued from above const openPaymentSheet = async () => { const { error } = await presentPaymentSheet(); if (error) { Alert.alert(`Error code: ${error.code}`, error.message); } else { Alert.alert('Success', 'Your order is confirmed!'); } }; return ( <Screen> <Button variant="primary" disabled={!loading} title="Checkout" onPress={openPaymentSheet} /> </Screen> ); }
Se não houver erro, informe ao usuário que está tudo pronto (por exemplo, exibindo uma tela de confirmação de pedido).
Configurar allowsDelayedPaymentMethods
como verdadeiro permite formas de pagamento de notificação assíncrona 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.
Configurar um URL de retorno (somente iOS)Do lado do cliente
O cliente pode sair do seu aplicativo para autenticar (por exemplo, no Safari ou no aplicativo bancário). Para permitir que eles voltem ao seu aplicativo após a autenticação, configure um esquema de URL personalizado e configure seu aplicativo delegado para encaminhar o URL ao SDK. A Stripe não aceita links universais.
Além disso, defina o returnURL no seu objeto PaymentSheet.Configuration para o URL do seu aplicativo.
var configuration = PaymentSheet.Configuration() configuration.returnURL = "your-app://stripe-redirect"
Gerenciar eventos pós-pagamento
Stripe envia um evento payment_intent.succeeded quando o pagamento é concluído. Use a ferramenta Dashboard webhook ou siga o guia de webhooks para receber esses eventos e executar ações, como enviar um e-mail de confirmação do pedido ao cliente, registrar a venda em um banco de dados ou iniciar um fluxo de trabalho de envio.
Escute esses eventos em vez de aguardar um retorno de chamada do cliente. No cliente, o consumidor pode fechar a janela do navegador ou sair do aplicativo antes da execução do retorno de chamada, o que permite que clientes mal-intencionados manipulem a resposta. Configurar sua integração para escutar eventos assíncronos é o que permite a você aceitar diferentes tipos de formas de pagamento com uma única integração.
Além de gerenciar o evento payment_
, recomendamos gerenciar esses outros eventos ao coletar pagamentos com o Element Pagamento:
Evento | Descrição | Ação |
---|---|---|
payment_intent.succeeded | Enviado quando um cliente conclui um pagamento com êxito. | Envie ao cliente uma confirmação de pedido e processe o pedido. |
payment_intent.processing | Enviado quando um cliente inicia um pagamento, mas o pagamento ainda precisa ser concluído. Esse evento costuma ser enviado quando um cliente inicia um débito bancário. Ele é seguido por um evento payment_ ou payment_ no futuro. | Envie ao cliente uma confirmação do pedido que indica que o pagamento está pendente. Para produtos digitais, pode ser necessário executar o pedido antes de aguardar a conclusão do pagamento. |
payment_intent.payment_failed | Enviado quando um cliente tenta fazer um pagamento, mas o pagamento falha. | Se um pagamento passa de processing para payment_ , ofereça ao cliente outra tentativa para pagar. |
Testar a integração
Consulte Testes para obter mais informações sobre como testar sua integração.
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); } }, }, });
OpcionalAtivar Google Pay
Configure a integração
Para usar o Google Pay, habilite a API Google Pay adicionando o seguinte à <application>
tag do seu AndroidManifest.xml:
<application> ... <meta-data android:name="com.google.android.gms.wallet.api.enabled" android:value="true" /> </application>
Veja mais detalhes na Configuração da API Google Pay do Google Pay para Android.
Adicionar Google Pay
Quando você inicializar PaymentSheet
, defina merchantCountryCode
como o código de país da sua empresa e defina googlePay
como true.
Você também pode usar o ambiente de teste passando o parâmetro testEnv
. Você só pode testar o Google Pay em um dispositivo Android físico. Siga a documentação do React Native para testar seu aplicativo em um dispositivo físico.
const { error, paymentOption } = await initPaymentSheet({ // ... googlePay: { merchantCountryCode: 'US', testEnv: true, // use test environment }, });
OpcionalHabilitar leitura de cartões (somente iOS)Do lado do cliente
Para habilitar o suporte à leitura de cartão, defina a NSCameraUsageDescription
(Privacidade - Descrição de uso de câmera) no Info.plist do seu aplicativo e informe um motivo para acessar a câmera (por exemplo, “Para ler cartões”). Dispositivos com iOS 13 ou versão mais recente aceitam a leitura de cartões.
OpcionalPersonalizar a descrição
Toda personalização é configurada usando initPaymentSheet
.
Aparência
Personalize cores, fontes e outros atributos de acordo com a aparência do aplicativo usando a API Appearance.
Nome de exibição do comerciante
Especifique o nome da empresa exibido para o cliente definindo merchantDisplayName
. Por padrão, este é o nome do seu aplicativo.
await initPaymentSheet({ // ... merchantDisplayName: 'Example Inc.', });
Modo escuro
Por padrão, o PaymentSheet
se adapta automaticamente às configurações de aparência do sistema do usuário (modo claro e escuro). É possível alterar isso configurando a propriedade style
como modo alwaysLight
ou alwaysDark
no iOS.
await initPaymentSheet({ // ... style: 'alwaysDark', });
No Android, configure o modo claro ou escuro no seu aplicativo:
// force dark AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) // force light AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
Dados de faturamento padrão
Para definir valores padrão para dados de cobrança coletados no PaymentSheet, configure a propriedade defaultBillingDetails
. A PaymentSheet
preenche previamente seus campos com os valores que você informou.
await initPaymentSheet({ // ... defaultBillingDetails: { email: 'foo@bar.com', address: { country: 'US', }, }, });
Coletar dados de cobrança
Use billingDetailsCollectionConfiguration
para especificar como você deseja coletar dados de cobrança no PaymentSheet.
Você pode coletar o nome, e-mail, número de telefone e endereço do cliente.
Se não pretende coletar os valores exigidos pela forma de pagamento, faça o seguinte:
- Anexe os valores não coletados por
PaymentSheet
à propriedadedefaultBillingDetails
. - Defina
billingDetailsCollectionConfiguration.
comoattachDefaultsToPaymentMethod true
.
await initPaymentSheet({ // ... defaultBillingDetails: { email: 'foo@bar.com', } billingDetailsCollectionConfiguration: { name: PaymentSheet.CollectionMode.ALWAYS, email: PaymentSheet.CollectionMode.NEVER, address: PaymentSheet.AddressCollectionMode.FULL, attachDefaultsToPaymentMethod: true }, });
Observação
Consulte seu jurídico sobre as leis que se aplicam à coleta de dados. Só colete números de telefone se precisar deles para a transação.
OpcionalConclua o pagamento em sua IU
Você pode exibir a Payment Sheet apenas para coletar dados da forma de pagamento e depois chamar um método confirm
para concluir o pagamento na IU do aplicativo. Isso é útil quando você tem um botão de compra personalizado ou precisa de mais etapas após a coleta dos dados do pagamento.

Observação
Um exemplo de integração está disponível no GitHub.
- Primeiro, chame
initPaymentSheet
e passecustomFlow: true
.initPaymentSheet
é resolvido com uma opção de pagamento inicial que contém uma imagem e um rótulo representando a forma de pagamento do cliente. Atualize a IU com esses dados.
const { initPaymentSheet, presentPaymentSheet, confirmPaymentSheetPayment, } = useStripe() const { error, paymentOption } = await initPaymentSheet({ customerId: customer, customerEphemeralKeySecret: ephemeralKey, paymentIntentClientSecret: paymentIntent, customFlow: true, merchantDisplayName: 'Example Inc.', }); // Update your UI with paymentOption
- Use
presentPaymentSheet
para coletar detalhes de pagamento. Quando o cliente termina, a folha se desfaz por si mesma e resolve a promessa. Atualize sua IU com os detalhes da forma de pagamento selecionada.
const { error, paymentOption } = await presentPaymentSheet();
- Use
confirmPaymentSheetPayment
para confirmar o pagamento. Isso é resolvido com o resultado do pagamento.
const { error } = await confirmPaymentSheetPayment(); if (error) { Alert.alert(`Error code: ${error.code}`, error.message); } else { Alert.alert( 'Success', 'Your order is confirmed!' ); }
Configurar allowsDelayedPaymentMethods
como verdadeiro permite formas de pagamento de notificação assíncrona 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.
Repasses
Por padrão, qualquer cobrança criada por você para uma conta conectada fica acumulada no saldo da Stripe da conta conectada e é repassada diariamente. As contas conectadas podem gerenciar seus próprios cronogramas de repasses no Stripe Dashboard.