Aceitar um pagamento
Aceitar pagamentos online com segurança
Crie um formulário de pagamento ou use uma página de checkout pré-integrada para começar a aceitar pagamentos online.

Integre a IU de pagamento pré-criada da Stripe no checkout do seu aplicativo iOS com a classe PaymentSheet. Veja nosso exemplo de integração no GitHub.
Configurar a StripeLado do servidorLado do cliente
Primeiro, você precisa de uma conta Stripe. Inscreva-se aqui.
Lado do servidor
Esta integração exige que os endpoints do seu servidor se comuniquem com a API da Stripe. Use nossas bibliotecas oficiais para acessar a API da Stripe pelo seu servidor:
Lado do cliente
O SDK da Stripe para iOS é de código aberto, totalmente documentado e compatível com aplicativos que aceitam iOS 13 ou versões mais recentes.
Nota
Para obter mais informações sobre a versão mais recente e as versões anteriores do SDK, consulte a página Lançamentos no GitHub. Para receber notificações quando um novo lançamento for publicado, assista aos lançamentos do repositório.
Ativar formas de pagamento
Veja suas configurações de formas de pagamento e habilite as formas de pagamento que deseja aceitar. Você precisa de pelo menos uma forma de pagamento habilitada para criar um PaymentIntent.
Por padrão, a Stripe habilita cartões e outras formas de pagamento predominantes que podem ajudar você a alcançar mais clientes, mas recomendamos ativar outras formas de pagamento que sejam relevantes para sua empresa e seus clientes. Consulte Suporte a formas de pagamento para saber mais sobre os produtos e formas de pagamento aceitos, e nossa página de preços para ver as tarifas.
Adicionar um endpointLado 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) CustomerSession: Os dados do objeto Customer são confidenciais e não podem ser recuperados diretamente do aplicativo. Uma CustomerSession concede ao SDK acesso temporário com escopo definido ao cliente e fornece opções de configuração adicionais. Consulte uma lista completa de opções de configuração.
Nota
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 CustomerSession da sua integração.
Por motivos de segurança, o aplicativo não pode criar esses objetos. Para isso, adicione um endpoint ao servidor para:
- Recuperar ou criar um Customer.
- Cria uma CustomerSession para o cliente.
- Cria um PaymentIntent com o valor, a moeda e o cliente.
- Retorna o segredo do cliente do Payment Intent, o
client_da CustomerSession, o id do Cliente e sua chave publicável para seu aplicativo.secret
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.
Coletar dados de pagamentoLado do cliente
Para exibir o Payment Element para dispositivos móveis na tela de checkout, não se esqueça de:
- Mostrar os produtos que o cliente está comprando e o valor total
- Usar o Address Element para coletar todos os dados de envio necessários do cliente
- Adicionar um botão de checkout para exibir a IU da Stripe
Se PaymentSheetResult for ., informe ao usuário (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 retornoLado 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"
Processar eventos pós-pagamentoLado do servidor
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.
OpcionalHabilitar Link
Habilite o Link nas configurações de forma de pagamento para permitir que seus clientes salvem e reutilizem os dados de pagamento com segurança usando o botão de checkout expresso de um clique do Link.
Passe o e-mail do cliente para o Mobile Payment Element
O Link autentica um cliente usando o endereço de e-mail dele. A Stripe recomenda preencher o máximo possível de dados para agilizar o processo de checkout.
Para preencher o nome, o e-mail e o número de telefone do cliente, forneça os dados do cliente adefaultBillingDetails após inicializar PaymentSheet..
var configuration = PaymentSheet.Configuration() configuration.defaultBillingDetails.name = "Jenny Rosen" configuration.defaultBillingDetails.email = "jenny.rosen@example.com" configuration.defaultBillingDetails.phone = "888-888-8888"
OpcionalHabilitar Apple Pay
Nota
Se sua tela de checkout tiver um botão Apple Pay exclusivo, siga o guia do Apple Pay e use ApplePayContext para receber pagamentos pelo botão Apple Pay. Você pode usar PaymentSheet para processar outros tipos de forma de pagamento.
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 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 pedidos no iOS 16 ou posterior, configure um authorizationResultHandler em seu PaymentSheet.. A Stripe invoca sua implementação após a conclusão do pagamento, mas antes que o iOS descarte a descrição Apple Pay.
Na sua implementação de authorizationResultHandler, obtenha os detalhes do pedido a partir do seu servidor para o pedido concluído. Adicione esses detalhes ao PKPaymentAuthorizationResult fornecido e retorne o resultado modificado.
Para saber mais sobre o rastreamento de pedidos, consulte a documentação de pedidos da carteira da Apple.
let customHandlers = PaymentSheet.ApplePayConfiguration.Handlers( authorizationResultHandler: { result in do { // Fetch the order details from your service let myOrderDetails = try await MyAPIClient.shared.fetchOrderDetails(orderID: orderID) result.orderDetails = PKPaymentOrderDetails( orderTypeIdentifier: myOrderDetails.orderTypeIdentifier, // "com.myapp.order" orderIdentifier: myOrderDetails.orderIdentifier, // "ABC123-AAAA-1111" webServiceURL: myOrderDetails.webServiceURL, // "https://my-backend.example.com/apple-order-tracking-backend" authenticationToken: myOrderDetails.authenticationToken) // "abc123" // Return your modified PKPaymentAuthorizationResult return result } catch { return PKPaymentAuthorizationResult(status: .failure, errors: [error]) } } ) var configuration = PaymentSheet.Configuration() configuration.applePay = .init(merchantId: "merchant.com.your_app_name", merchantCountryCode: "US", customHandlers: customHandlers)
OpcionalHabilitar leitura de cartões
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.
OpcionalAtivar pagamentos por ACH
Para ativar pagamentos por débito ACH, inclua StripeFinancialConnections como uma dependência do aplicativo.
O SDK da Stripe para iOS é de código aberto, totalmente documentado e compatível com aplicativos que aceitam iOS 13 ou versões mais recentes.
Nota
Para obter mais informações sobre a versão mais recente e as versões anteriores do SDK, consulte a página Lançamentos no GitHub. Para receber notificações quando um novo lançamento for publicado, assista aos lançamentos do repositório.
OpcionalPersonalizar a descrição
Toda personalização é configurada usando o objeto PaymentSheet.Configuration.
Aparência
Personalize cores, fontes e outros atributos de acordo com a aparência do aplicativo usando a API Appearance.
Layout da forma de pagamento
Configure o layout das formas de pagamento na planilha usando paymentMethodLayout. Você pode exibi-los horizontalmente, verticalmente ou deixar a Stripe otimizar o layout automaticamente.

var configuration = PaymentSheet.Configuration() configuration.paymentMethodLayout = .automatic
Coletar endereços de usuários
Colete endereços de entrega ou cobrança locais e internacionais de seus clientes usando o Address Element.
Nome de exibição do comerciante
Especifique o nome da empresa exibido para o cliente definindo merchantDisplayName. Por padrão, esse é o nome do seu aplicativo.
var configuration = PaymentSheet.Configuration() configuration.merchantDisplayName = "My app, Inc."
Modo escuro
A PaymentSheet se adapta automaticamente às configurações de aparência do sistema do usuário (modos claro e escuro). Se o seu aplicativo não aceitar o modo escuro, defina estilo como modo alwaysLight ou alwaysDark.
var configuration = PaymentSheet.Configuration() configuration.style = .alwaysLight
Dados de faturamento padrão
Para definir valores padrão para dados de faturamento coletados na descrição da compra, configure a propriedade defaultBillingDetails. A PaymentSheet preenche previamente seus campos com os valores que você informou.
var configuration = PaymentSheet.Configuration() configuration.defaultBillingDetails.address.country = "US" configuration.defaultBillingDetails.email = "foo@bar.com"
Coleta de dados de faturamento
Use billingDetailsCollectionConfiguration para especificar como você deseja coletar dados de faturamento na página de pagamento.
Você pode coletar o nome, e-mail, número de telefone e endereço do cliente.
Se você quiser apenas os dados de faturamento exigidos pela forma de pagamento, defina billingDetailsCollectionConfiguration. como verdadeiro. Nesse caso, PaymentSheet. são definidos como os detalhes de faturamento da forma de pagamento.
Se você quiser coletar dados de faturamento adicionais que não são necessariamente exigidos pela forma de pagamento, defina billingDetailsCollectionConfiguration. como falso. Nesse caso, os dados de faturamento coletados por meio da PaymentSheet são definidos como os dados de faturamento da forma de pagamento.
var configuration = PaymentSheet.Configuration() configuration.defaultBillingDetails.email = "foo@bar.com" configuration.billingDetailsCollectionConfiguration.name = .always configuration.billingDetailsCollectionConfiguration.email = .never configuration.billingDetailsCollectionConfiguration.address = .full configuration.billingDetailsCollectionConfiguration.attachDefaultsToPaymentMethod = true
Nota
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.
OpcionalGerenciar logout de usuário
PaymentSheet armazena alguns dados localmente para lembrar se um usuário usou o Link dentro de um aplicativo. Para limpar o estado interno do PaymentSheet, chame o método PaymentSheet. quando o usuário fizer logout.
import UIKit import StripePaymentSheet class MyViewController: UIViewController { @objc func didTapLogoutButton() { PaymentSheet.resetCustomer() // Other logout logic required by your app } }
OpcionalConclua o pagamento em sua IU
Você pode exibir o 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.

Conclua o pagamento na IU do aplicativo
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.
OpcionalAtivar coleta de CVC na confirmação
As instruções a seguir para coletar novamente o CVC de um cartão salvo durante PaymentIntent confirmação presumem que sua integração inclua o seguinte:
- Criação de PaymentIntents antes de coletar dados de pagamento
Atualizar os parâmetros da criação de Intent
Para coletar novamente o CVC ao confirmar o pagamento, inclua require_ durante a criação do PaymentIntent.