Aceitar um pagamento OXXO
Veja como aceitar OXXO, uma forma de pagamento comum no México.
Cuidado
Recomendamos seguir o guia Aceitar um pagamento, a menos que precise usar confirmação manual no lado do servidor ou que sua integração exija apresentação separada de formas de pagamento. Se você já fez a integração com o Elements, consulte o guia de migração do Payment Element.
Para receber OXXO em seu aplicativo, é preciso exibir uma visualização web da guia OXXO. O cliente recebe uma guia com um número específico e paga em dinheiro em uma loja de conveniência OXXO. Você recebe um aviso da Stripe quando o pagamento é recebido.
Configurar a StripeLado do servidorLado do cliente
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 a partir do seu servidor:
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á até 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.
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 React, { 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.
Crie um PaymentIntentLado do servidorDo lado do cliente
Um PaymentIntent é um objeto que representa sua intenção de coletar o pagamento de um cliente, acompanhando todas as etapas do ciclo de vida do processo de pagamento.
Lado do servidor
Crie uma PaymentIntent no seu servidor com um valor e a moeda mxn
(OXXO não aceita outras moedas). Se você já tiver uma integração usando a API Payment Intents, adicione oxxo
à lista de tipos de forma de pagamento para seu PaymentIntent
.
Outras opções da forma de pagamento
Você pode especificar um parâmetro opcional expires_
nas opções da forma de pagamento para o PaymentIntent
, definindo os dias corridos até o vencimento de uma guia OXXO. Por exemplo, se você criar uma guia OXXO na segunda-feira e a configuração de expires_
for 2, a guia vencerá na quarta-feira, às 23h59, horário da América/Mexico_City (UTC-6). O parâmetro expires_
pode ser de 1 a 7 dias. O padrão é 3 dias.
Do lado do cliente
No cliente, solicite um PaymentIntent a partir do seu servidor e armazene o segredo de cliente.
const fetchPaymentIntentClientSecret = async () => { const response = await fetch(`${API_URL}/create-payment-intent`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ email, currency: 'mxn', payment_method_types: ['oxxo'], }), }); const {clientSecret, error} = await response.json(); return {clientSecret, error}; };
Coletar dados da forma de pagamentoDo lado do cliente
No seu aplicativo, colete o nome completo e endereço de e-mail do cliente.
export default function OxxoPaymentScreen() { const [name, setName] = useState(); const [email, setEmail] = useState(); const handlePayPress = async () => { // ... }; return ( <Screen> <TextInput placeholder="Name" onChange={(value) => setName(value.nativeEvent.text)} /> <TextInput placeholder="E-mail" onChange={(value) => setEmail(value.nativeEvent.text)} /> </Screen> ); }
Enviar o pagamento para a StripeDo lado do cliente
Obtenha o segredo do cliente com o PaymentIntent criado e invoque confirmPayment
. Será apresentada uma visualização web com a guia OXXO.
export default function OxxoPaymentScreen() { const [name, setName] = useState(); const [email, setEmail] = useState(); const handlePayPress = async () => { const billingDetails: PaymentMethodCreateParams.BillingDetails = { name, email, }; const { error, paymentIntent } = await confirmPayment(clientSecret, { paymentMethodType: 'Oxxo', paymentMethodData: { billingDetails, } }); if (error) { Alert.alert(`Error code: ${error.code}`, error.message); console.log('Payment confirmation error', error.message); } else if (paymentIntent) { if (paymentIntent.status === PaymentIntents.Status.RequiresAction) { Alert.alert( 'Success', `The OXXO voucher was created successfully. Awaiting payment from customer.` ); } else { Alert.alert('Payment intent status:', paymentIntent.status); } } }; return ( <Screen> <TextInput placeholder="Name" onChange={(value) => setName(value.nativeEvent.text)} /> <TextInput placeholder="E-mail" onChange={(value) => setEmail(value.nativeEvent.text)} /> </Screen> ); }
Opcional: envie e-mail ao cliente com um link para a guia de pagamento
A Stripe envia um evento payment_intent.requires_action quando uma guia OXXO é criada. Se precisar enviar um e-mail ao cliente com o link para a guia, acesse o PaymentIntent para obter o link, após receber o evento. O campo hosted_
em payment_intent.next_action.oxxo_display_details contém o link para a guia.
Opcional: personalizar a guia
A Stripe permite personalizar as IUs exibidas para seus clientes na página Configurações da marca.
Estas configurações de marca podem ser aplicadas à guia:
- Ícone: a imagem de sua marca e nome fantasia da empresa
- Cor de destaque: usada no botão Copiar número
- Cor da marca: usada como cor de fundo
Gerenciar eventos pós-pagamentoLado do servidor
A OXXO é uma forma de pagamento com notificação posterior: os fundos não ficam disponíveis imediatamente. Os clientes podem não pagar a guia OXXO em uma loja de conveniência OXXO imediatamente após o checkout.
A Stripe envia um evento payment_intent.succeeded no dia útil seguinte (de segunda a sexta, exceto feriados do calendário mexicano) para todas as guias OXXO pagas. Use o Dashboard ou crie um gerenciador de webhooks para receber esses eventos e executar ações (por exemplo, enviar um e-mail de confirmação de pedido ao cliente, registrar a venda em um banco de dados ou iniciar um fluxo de entrega).
Após a data de validade, o status do PaymentIntent muda para processing
e o cliente não pode mais pagar a guia OXXO vencida. Se a guia não for paga até 23:59 (horário da Mexico_City/UTC-6) da data de validade, a Stripe envia um evento payment_intent.payment_failed até 10 dias corridos após a data de validade (na maioria dos casos, o evento é enviado dentro de 7 dias corridos). Por exemplo, se a guia OXXO vencer em 1º de setembro, o evento será enviado no máximo até 10 de setembro.
Evento | Descrição | Próximas etapas |
---|---|---|
payment_ | A guia OXXO é criada. | Espere que o cliente pague a guia OXXO. |
payment_ | O cliente não pode mais pagar a guia OXXO. | Aguarde a confirmação ou falha do pagamento. |
payment_ | O cliente pagou a guia OXXO antes do vencimento. | Execute o pedido de mercadorias ou serviços do cliente. |
payment_ | O cliente não pagou a guia OXXO antes do vencimento. | Entre em contato com o cliente por e-mail ou notificação push e solicite outra forma de pagamento. |
Receber eventos e tomar providências comerciais
Manualmente
Use o Stripe Dashboard para ver todos os pagamentos da Stripe, enviar recibos por e-mail, lidar com repasses ou tentar novamente pagamentos com falha.
Código personalizado
Crie um gerenciador de webhooks para ouvir eventos e criar fluxos personalizados de pagamentos assíncronos. Teste e depure a integração do webhook localmente usando a CLI da Stripe.
Testar a integração
Em uma área restrita, use os e-mails a seguir ao chamar confirmPayment
para testar diferentes cenários.
Descrição | |
---|---|
| Simula uma guia OXXO paga pelo cliente depois de 3 minutos, com o webhook Exemplo: fulano@test.com |
| Simula uma guia OXXO paga imediatamente pelo cliente, com o webhook Exemplo: succeed_immediately@test.com |
| Simula uma guia OXXO que vence sem ser paga pelo cliente, com o webhook O campo Exemplo: expire_immediately@test.com |
| Simula uma guia OXXO que vence sem ser paga pelo cliente, com o webhook O campo Exemplo: expire_with_delay@test.com |
| Simula uma guia OXXO que expira sem ser paga pelo cliente, com o webhook Exemplo: fill_never@test.com |
Validade e cancelamento
As guias do OXXO expiram após o carimbo de data e hora do UNIX expires_
e o cliente não pode pagá-lo após a expiração. As guias do OXXO não podem ser canceladas antes de expirar.
Depois do vencimento da guia OXXO, o status do PaymentIntent muda para requires_
. Neste ponto, você pode confirmar o PaymentIntent com outra forma de pagamento ou cancelar.