Introdução
Embora o Stripe seja apenas o segundo gateway de pagamento mais popular (o PayPal continua sendo o primeiro), ele está obtendo um uso cada vez maior de empresas novas e existentes em todo o mundo. O Stripe supostamente processou mais de US $ 200 bilhões em transações.
Embora existam muitos outros processadores de pagamento por aí, o Stripe torna mais fácil lidar com transações internacionais, especialmente quando você aceita pagamentos em dólares, libras, euros ou qualquer outra moeda internacional.
Aceitar o pagamento ou configurar uma assinatura via Stripe em seu aplicativo nativo React ficou mais fácil após o lançamento do Stripe React Native SDK . Embora o SDK ainda esteja em beta, é pertinente mergulhar e explorar o que este SDK tem a oferecer e como ele reduz o tempo de integração e aprimora a IU/UX.
Neste tutorial, mostrarei como aceitar pagamento usando o SDK nativo oficial do Stripe React recém-lançado.
Aqui está o que vamos cobrir:
- O que é Stripe?
- SDK nativo do Stripe React
- Configurando uma conta Stripe
- Criação de um aplicativo React Native Stripe
- Construindo a tela de pagamento
Para acompanhar este tutorial de estilo do React Native, você deve ter:
- Familiaridade com CSS, HTML e Javascript (ES6)
- Node.js e Watchman instalados em sua máquina de desenvolvimento
- Simulador de iOS ou emulador de Android para teste
- Um editor de código instalado em sua máquina de desenvolvimento (por exemplo, VS Code)
- Uma compreensão básica do React
O que é Stripe?
Stripe é um serviço financeiro e de software que ajuda desenvolvedores de software e empresas de comércio eletrônico a realizarem pagamentos contínuos por meio de sua API. Você poderia chamar a Stripe de uma empresa de software como serviço (SaaS).
À medida que a fintech continua a obter patrocínio de empresas SaaS novas e existentes em todo o mundo, uma em cada três serviços pagos lançados online usa Stripe como opção de pagamento. Ter um conhecimento profundo de como integrar o Stripe em seu aplicativo React Native será a melhor maneira de reduzir o incômodo de integração de pagamento em seus aplicativos iOS e Android.
SDK nativo do Stripe React
Agora que você entendeu do que se trata o Stripe, a melhor maneira de começar a usar a API do Stripe seria ler o Documentação do Stripe aqui .
Mas adivinhe? O Stripe React Native SDK pode reduzir esse processo em cerca de 60%.
Vamos explorar o Stripe React Native SDK e ver o que ele tem a oferecer. Abaixo está uma lista dos recursos fornecidos com sua versão v0.1.2.
Segurança
O Stripe React Native SDK ajuda você a coletar dados confidenciais, como números de cartão de crédito, e aceita pagamentos com segurança, enviando os dados para a API do Stripe em vez de passá-los pelo servidor de back-end.
Apple Pay e outros métodos de pagamento
O SDK oferece suporte para várias opções de pagamento, como transferências bancárias, débitos e redirecionamentos; cartões de crédito; compre agora, pague depois; vouchers; e carteiras digitais. Ele também tem suporte opcional para Apple Pay. Você pode ler a documentação oficial do Stripe sobre integração do Apple Pay aqui e como integre outros métodos de pagamento aqui .
Pronto para SCA
O SDK, por padrão, realiza uma autenticação 3D em conformidade com a autenticação forte do cliente oferecida pelo Stripe. Leia mais sobre autenticação de cartão e segurança 3D no Stripe aqui .
IU nativa
O Stripe React Native SDK vem com telas e elementos nativos para aceitar pagamentos com segurança no Android e iOS.
IU de pagamentos pré-construída (beta)
O SDK oferece suporte para interfaces de usuário de pagamento predefinidas oferecidas pelo Stripe. Este recurso está em beta, com suporte para Apple Pay, Google Pay e IUs de pagamento com cartão. No entanto, existem planos para criar suporte para mais opções de pagamento no futuro. Você pode ler sobre Stripe Payment UIs aqui .
Nesses tutoriais, exploraremos alguns dos recursos listados acima criando e testando uma tela de pagamento em nosso aplicativo React Native. Vamos começar na próxima seção.
Configurando uma conta Stripe
Cada SDK requer chaves de acesso pessoais e Stripe não é uma exceção. Para continuar com este tutorial do React Native, temos que criar uma conta Stripe e obter nossas chaves pessoais para aceitar o pagamento.
A primeira etapa é visitar https://dashboard.stripe.com/register, crie uma conta ou faça login em sua conta existente.
A seguir, obtenha sua chave pública. Certifique-se de manter sua chave privada; é a chave de acesso à sua conta Stripe.
A captura de tela abaixo mostra onde você pode encontrar sua chave pública em sua conta Stripe:
Aplicativo React Native Stripe
Agora que você criou sua conta Stripe e obteve sua chave pública, vamos inicializar um novo aplicativo React Native e instalar o Stripe React Native SDK.
Navegue até seu diretório de desenvolvimento e cole o comando abaixo para instalar um novo aplicativo React Native:
npx react-nativa StripeReactNative
Quando a instalação for concluída, navegue para StripeReactNative
por meio do terminal e cole o código abaixo para instalar o pacote Stripe React Native SDK em seu aplicativo:
yarn add @ stripe/stripe-react-native ou npm install @ stripe/stripe-react-native
O Stripe React Native SDK tem alguns requisitos para suporte no Android e iOS. Você pode consultá-los aqui:
Android
- Android 5.0 (API de nível 21) e superior
- Plug-in Android Gradle 4.x e superior
iOS
- Compatível com aplicativos voltados para iOS 11 ou superior.
Instalando com iOS
Instalar o Stripe React Native SDK no iOS é um pouco mais complicado do que no Android.
Para evitar erros após instalar o pacote via npm, abra seu StripeReactNative.xcworkspace
em XCode
e defina seu destino de implantação para iOS 11.0.
Veja a captura de tela abaixo para um exemplo:
Execute seu projeto no Xcode para garantir que todas as alterações sejam aplicadas e, em seguida, navegue até a pasta iOS. Abra podfile
, atualize platform: ios,'10.0'
para platform: ios,'11.0'
e execute pod install . Isso instalará as dependências nativas do Stripe para iOS.
A seguir, vamos nos livrar do código React Native padrão do App.js
. Atualize o arquivo App.js
com o código abaixo:
/** * Amostra de aplicativo nativo React * https://github.com/facebook/react-native * * @format * @flow strict-local */ import React from'react'; import { SafeAreaView, StyleSheet, } de'react-native'; const App=()=> { Retorna (); }; estilos const=StyleSheet.create ({ }); exportar aplicativo padrão;
Se você executar o aplicativo, deverá ver uma tela em branco semelhante a esta abaixo:
Construindo a tela de pagamento
Agora que instalamos o SDK com sucesso, vamos continuar criando nossa primeira tela de pagamento.
Construindo um componente de cartão
Para começar, crie uma nova pasta chamada telas
no diretório raiz do seu aplicativo React Native.
Navegue até a pasta e crie um novo arquivo chamado paymentScreen.js
e cole o código abaixo:
import React, {useState} de"react"; import { CardField, CardFieldInput, useStripe, } de'@ stripe/stripe-react-native'; exportar tela de pagamento padrão=()=> { const [cartão, setCard]=useState (CardFieldInput.Details | null); const {confirmPayment, handleCardAction}=useStripe () Retorna({ setCard (cardDetails); }} onFocus={(focusField)=> { console.log ('focusField', focusField); }} /> ) }
A seguir, vamos importar o paymentScreen.js
para a raiz do nosso projeto.
Abra App.js
e atualize seu código para se parecer com o seguinte:
/** * Amostra de aplicativo nativo React * https://github.com/facebook/react-native * * @format * @flow strict-local */ import React from'react'; import { SafeAreaView, StyleSheet, } de'react-native'; importar {StripeProvider} de'@ stripe/stripe-react-native'; importar PaymentScreen de"./screens/paymentScreen"; const App=()=> { const publishableKey="pk_test_AtN3VLAFhzbLNqf3Y9z50iNQ"; Retorna (); }; estilos const=StyleSheet.create ({ }); exportar aplicativo padrão;
Vamos executar nosso aplicativo para testar o que construímos até agora. Execute npx react-native run-ios
para executar uma compilação para iOS.
Você provavelmente encontrará um erro símbolos indefinidos para a arquitetura x86_64
, mas não entre em pânico! Para corrigir o erro, siga as etapas abaixo:
LIBRARY_SEARCH_PATHS=( remover:"\"$ (TOOLCHAIN_DIR)/usr/lib/swift/$ (PLATFORM_NAME) \"", remover:"\"$ (TOOLCHAIN_DIR)/usr/lib/swift-5.0/$ (PLATFORM_NAME) \"", "\"$ (herdado) \"", );
Abra seu projeto no Xcode
e crie um novo arquivo Swift ( Arquivo > Novo > Arquivo > Fix.swift
) e selecione criar um cabeçalho de ponte quando solicitado pelo Xcode.
Execute npx react-native run-ios
novamente e o erro deve ser corrigido. Se você for bem-sucedido, seu aplicativo deve se parecer com a imagem abaixo após o carregamento:
Acabamos de criar um componente de cartão simples que envia os detalhes do cartão diretamente para o servidor Stripe para validação em tempo real e, subsequentemente, armazena o estado do componente.
IU pré-construída (etapa única)
Este recurso é uma combinação de todas as etapas envolvidas na aceitação de pagamento no Stripe usando detalhes de cartão de crédito. Essa integração requer um endpoint que se comunique com a API Stripe de seu servidor.
Criando o endpoint
Para configurar um servidor para se comunicar com o Stripe do React Native, precisamos inicializar um novo aplicativo node.js
com install express body-parser
e dotenv
.
Crie uma nova pasta chamada server
, navegue até a pasta, execute npm init-y
e siga as instruções para criar um novo aplicativo Node. Em seguida, execute npm i express body-parser dotenv
.
Finalmente, crie um arquivo server.js
no nível raiz da pasta do servidor e cole o código abaixo no arquivo:
require ("dotenv"). config (); const express=require ("express"); const app=express (); const {resolve}=requer ("caminho"); const stripe=require ("stripe") (process.env.secret_key);//https://stripe.com/docs/keys#obtain-api-keys app.use (express.static (".")); app.use (express.json ()); //Um endpoint para seu checkout app.post ("/checkout", assíncrono (req, res)=> { //Crie ou recupere o objeto Stripe Customer associado ao seu usuário. deixar cliente=aguardar stripe.customers.create ();//Este exemplo apenas cria um novo cliente a cada vez //Cria uma chave efêmera para o cliente; isso permite que o aplicativo exiba métodos de pagamento salvos e salve novos const ephemeralKey=await stripe.ephemeralKeys.create ( {cliente: cliente.id}, {apiVersion:'2020-08-27'} ); //Crie um PaymentIntent com o valor do pagamento, moeda e cliente const paymentIntent=await stripe.paymentIntents.create ({ montante: 973, moeda:"usd", cliente: cliente.id }); //Envie as chaves do objeto para o cliente res.send ({ publishableKey: process.env.publishable_key,//https://stripe.com/docs/keys#obtain-api-keys paymentIntent: paymentIntent.client_secret, cliente: cliente.id, ephemeralKey: ephemeralKey.secret }); }); app.listen (process.env.PORT, ()=> console.log (`Servidor de nó ouvindo na porta $ {process.env.PORT}!`) );
Não se esqueça de criar um arquivo .env
com o código abaixo:
secret_key=Your_Secret_Key PORTA=8000
Em seguida, atualize o paymentScreen.js
com o código abaixo para adicionar um botão de checkout ao aplicativo:
import React, {useState, useEffect} de"react"; import {StyleSheet, Button, View} from'react-native'; import { CardField, CardFieldInput, useStripe, } de'@ stripe/stripe-react-native'; exportar tela de pagamento padrão=()=> { const [cartão, setCard]=useState (CardFieldInput.Details | null); const {confirmPayment, handleCardAction}=useStripe () const API_URL="http://localhost: 8000"; const {initPaymentSheet, presentPaymentSheet}=useStripe (); const [carregando, setLoading]=useState (false); const fetchPaymentSheetParams=async ()=> { const response=await fetch (`$ {API_URL}/checkout`, { método:'POST', cabeçalhos: { 'Content-Type':'application/json', }, }); const {paymentIntent, ephemeralKey, customer}=await response.json (); Retorna { paymentIntent, ephemeralKey, cliente, }; }; const initializePaymentSheet=async ()=> { const { paymentIntent, ephemeralKey, cliente, }=aguarda fetchPaymentSheetParams (); const {erro}=espera initPaymentSheet ({ customerId: cliente, customerEphemeralKeySecret: ephemeralKey, paymentIntentClientSecret: paymentIntent, }); if (! erro) { setLoading (true); } }; const openPaymentSheet=async ()=> { const {erro}=espera presentPaymentSheet ({clientSecret}); if (erro) { Alert.alert (`Código do erro: $ {error.code}`, error.message); } senão { Alert.alert ('Sucesso','Seu pedido foi confirmado!'); } }; useEffect (()=> { initializePaymentSheet (); }, []); Retorna ({ setCard (cardDetails); }} onFocus={(focusField)=> { console.log ('focusField', focusField); }} /> ) } estilos const=StyleSheet.create ({ container: { flex: 1, preenchimento: 20, marginHorizontal: 10, marginVertical: 10, }, botão: { backgroundColor:'# 00aeef', borderColor:'red', borderWidth: 5, borderRadius: 15 } })
Como visto acima, crie um projeto node.js
separado e configure o servidor com a porta 8000. Em React Native, envie uma solicitação para o endpoint /checkout
no servidor. Assim que a solicitação for bem-sucedida, o initializePaymentSheet
será chamado usando o gancho useEffect
.
Durante este processo, o botão permanece desativado até que uma resposta seja recebida do back end. Observe que seu servidor de back-end deve estar instalado e funcionando pelo tempo que você pretende se comunicar com ele.
Neste ponto, seu aplicativo deve ser semelhante à captura de tela abaixo:
Conclusão
O Stripe React Native SDK da Stripe é muito fácil de implementar. Com suporte para UIs pré-construídas (incluindo planos para suporte futuro para mais UIs pré-construídas) e opções de pagamento, está se tornando o favorito dos desenvolvedores.
A postagem Explorando o novo Stripe React Native SDK apareceu primeiro no LogRocket Blog .