Aceptar un pago con Klarna
Descubre cómo aceptar Klarna, un método de pago internacional de «Compra ahora, paga después»
Cuando un cliente elige Klarna en tu aplicación, aparece una vista web para que autentique su pago. Una vez que se redirige al cliente a tu aplicación, puedes confirmar automáticamente si el pago se ha efectuado correctamente o ha dado error.
Nota
Antes de iniciar la integración, comprueba que tu cuenta sea compatible con Klarna en la configuración de los métodos de pago.
Configurar StripeLado del servidorLado del cliente
Lado del servidor
Esta integración necesita puntos de conexión en tu servidor que se comuniquen con la API de Stripe. Usa nuestras librerías oficiales para acceder a la API de Stripe desde tu servidor:
Lado del cliente
El SDK para React Native es de código abierto y está plenamente documentado. Internamente, utiliza el SDK de iOS nativo y Android. Para instalar el SDK para React Native de Stripe, ejecuta uno de los siguientes comandos en el directorio del proyecto (en función del administrador de paquetes que utilices):
A continuación, instala otras dependencias necesarias:
- Para iOS, navega hasta el directorio de ios y ejecuta
pod install
para asegurarte de instalar también las dependencias nativas necesarias. - Para Android, no hay más dependencias para instalar.
Nota
Recomendamos seguir la guía oficial de TypeScript para añadir compatibilidad con TypeScript.
Inicialización de Stripe
Para inicializar Stripe en tu aplicación React Native, ajusta tu pantalla de pago con el componente StripeProvider
o usa el método de inicialización initStripe
. Solo se requiere la clave publicable de la API en publishableKey
. El siguiente ejemplo muestra cómo inicializar Stripe mediante el 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> ); }
Nota
Usa las claves de prueba de la API durante las pruebas y las tareas de desarrollo, y las claves del modo activo cuando publiques tu aplicación.
Crea un PaymentIntentLado del servidorLado del cliente
Stripe utiliza un objeto PaymentIntent para representar tu intención de cobrarle a un cliente y hace el seguimiento de los intentos de cobro y de los cambios en el estado del pago a lo largo del proceso de pago.
Lado del servidor
Primero, crea un PaymentIntent
en tu servidor y especifica el importe que hay que cobrar y la divisa. Si ya tienes una integración con la API Payment Intents, añade klarna
a la lista de tipos de métodos de pago para tu PaymentIntent
.
Lado del cliente
Un PaymentIntent incluye un client secret. Puedes utilizar el secreto de cliente en tu aplicación React Native para completar el proceso de pago de forma segura en lugar de especificar el objeto PaymentIntent completo. En tu aplicación, solicita un PaymentIntent desde tu servidor y guarda el secreto de cliente.
function PaymentScreen() { // ... const fetchPaymentIntentClientSecret = async () => { const response = await fetch(`${API_URL}/create-payment-intent`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ currency: 'eur', }), }); const {clientSecret} = await response.json(); return clientSecret; }; return <View>...</View>; }
Envía el pago a StripeLado del cliente
Para enviar el pago a Stripe se necesita el secreto de cliente del PaymentIntent que creaste. Inclúyelo en tu llamada a confirmPayment
:
import {Picker} from '@react-native-picker/picker'; import {confirmPayment} from '@stripe/stripe-react-native'; export default function MyPaymentScreen() { const handlePayPress = async () => { // Fetch the intent client secret from the backend. // See `fetchPaymentIntentClientSecret()`'s implementation above. const clientSecret = await fetchPaymentIntentClientSecret(); const {error, paymentIntent} = await confirmPayment(clientSecret, { paymentMethodType: 'Klarna' }, }); if (error) { console.log('Payment confirmation error', error.message); // Update UI to prompt user to retry payment (and possibly another payment method) } else if (paymentIntent) { Alert.alert('Success', `The payment was confirmed successfully!`); } };
Prueba la integración de Klarna
A continuación, tenemos datos de prueba especialmente elegidos para los países de los clientes actualmente aceptados. En un entorno de prueba, Klarna aprueba o rechaza una transacción en función de la dirección de correo electrónico proporcionada.
Autenticación en dos pasos
Cualquier número de seis dígitos es un código válido de autenticación en dos pasos. Utiliza 999999
para que la autenticación no se complete.
Método de reembolso
En el flujo de Klarna, puedes usar los siguientes valores de prueba para probar varios tipos de reembolso:
Tipo | Valor |
---|---|
Adeudo directo | DE11520513735120710131 |
Transferencia bancaria | Banco de demostración |
Tarjeta de crédito |
|
Tarjeta de débito |
|
OpcionalAutorización y captura separadas
Klarna acepta la autorización y la captura por separado. Si hay un retraso en el pago y la entrega de productos a tu cliente, autoriza el pago primero y captúralo después. En el momento de la captura, Klarna envía un extracto al cliente e inicia las fechas de vencimiento de los pagos correspondientes que deban hacer. Debe capturarse el pago autorizado de Klarna en el transcurso de 28 días a partir de la autorización. De lo contrario, se cancelará automáticamente la autorización y ya no será posible capturar el pago.
Indicarle a Stripe que autorice solamente
Para indicar que quieres separar la autorización y la captura, establece capture_method en
manual
al crear el PaymentIntent. Este parámetro le indica a Stripe que solo debe autorizar el importe en la cuenta de Klarna del cliente.Capturar los fondos
Una vez que se efectúa la autorización, el estado de PaymentIntent pasa a
requires_
. Para capturar los fondos autorizados, solicita la capture del PaymentIntent. De forma predeterminada, se captura el importe total autorizado; no puedes capturar más de ese importe, pero sí menos.capture Opcional Cancela la autorización
Klarna contabiliza cualquier pago autorizado a partir del poder adquisitivo total del cliente dentro de Klarna. Asegúrate de cancelar activamente cualquier pago autorizado que no puedas completar (por ejemplo, si no se pueden enviar los bienes) en cuanto lo sepas.
OpcionalGestiona eventos posteriores al pago
Stripe envía un evento payment_intent.succeeded cuando se completa el pago. Utiliza el Dashboard, un webhook personalizado o una solución de socio para recibir estos eventos y ejecutar acciones como, por ejemplo, enviar un correo electrónico para confirmar el pedido al cliente, registrar la venta en una base de datos o iniciar el flujo de tareas de envío.
Escucha estos eventos en lugar de esperar una devolución de llamada del cliente. Por su parte, el cliente puede cerrar la ventana del navegador o salir de la aplicación antes de que se ejecute la devolución de llamada y los clientes malintencionados podrían manipular la respuesta. Configurar tu integración para escuchar eventos asincrónicos también te ayudará a aceptar más métodos de pago en el futuro. Obtén más información sobre las diferencias entre todos los métodos de pago aceptados.
Gestiona eventos manualmente en el Dashboard
Utiliza el Dashboard para ver tus pagos de prueba en el Dashboard, enviar recibos por correo electrónico, gestionar pagos o reintentar pagos fallidos.
Crea un webhook personalizado
Crea un webhook personalizado para escuchar eventos y crear flujos de pago asíncronos personalizados. Prueba y depura tu integración de webhooks de forma local con la CLI de Stripe.
Integra una aplicación prediseñada
Gestiona eventos empresariales comunes, como la automatización o la comercialización y ventas, integrando una aplicación asociada.
OpcionalPersonaliza la página de pago de Klarna
Rellenar automáticamente el formulario de Klarna
Cuando el cliente decide pagarle a Klarna con una opción de pago diferido (es decir, pagar más tarde, en cuotas o con financiación), Klarna recopila la información necesaria para la evaluación de riesgos y la aprobación. El tipo de información depende del país del cliente. Para la mayoría de los países de Europa, son necesarios los datos completos de facturación y la fecha de nacimiento. Puedes transmitir esta información a través de la API, y el formulario se completará automáticamente cuando el cliente llegue a la página.
Una página de pago de Klarna rellenada automáticamente con los datos de facturación de la API y personalizada para presentarse en inglés para un cliente de Alemania
OpcionalAñade partidas al PaymentIntent
Partidas individuales unificadas con Klarna
Para optimizar las tasas de aprobación cuando te integres con Klarna, incluye datos de line_
para representar lo que hay en el carrito de un comprador. Para obtener acceso anticipado, consulta Partidas individuales de pago.
Pagos fallidos
Klarna tiene en cuenta varios factores a la hora de decidir si acepta o rechaza una transacción (por ejemplo, el tiempo que el comprador lleva utilizando Klarna, el importe pendiente de pago del cliente, el valor del pedido actual).
Cuando el cliente elige un método de pago diferido, Klarna lleva a cabo una evaluación del riesgo antes de aceptar la transacción. Klarna podría rechazar la transacción debido a un resultado insatisfactorio de la evaluación de riesgos, al importe de la transacción o a que el cliente tenga una gran deuda pendiente. Por ello, te recomendamos que presentes otras opciones de pago como card
en tu flujo del proceso de compra. En estos casos, el PaymentMethod se separa y el estado del objeto PaymentIntent pasa automáticamente a requires_
.
Los clientes deben efectivizar el pago en el transcurso de 48 horas desde que se les redirige al sitio de Klarna. Si no se realiza ninguna acción después de 48 horas, el PaymentMethod se separa y el estado del objeto PaymentIntent pasa automáticamente de requires_
a requires_
.
En estos casos, informa a tus clientes que deben intentarlo de nuevo con una opción de pago diferente de tu flujo de proceso de compra.
Límites de velocidad de Klarna
Las solicitudes de API a Klarna están sujetas a límites de velocidad adicionales más allá de los límites de velocidad de toda la API de Stripe. Estos límites pueden variar en función de la forma de las solicitudes de API que realices. En general, si realizas más de 50 solicitudes por minuto, es posible que veas alguna limitación de frecuencia en forma de respuestas con el código de estatus HTTP 400`` o
402`. [Contacta con nosotros si te preocupa que tu consumo pueda alcanzar estos niveles, ya que Klarna puede aumentar estos límites según el caso.
Mensajes de error
Los errores en los pagos de Klarna normalmente devuelven uno de los siguientes códigos de fallo. Estos códigos se muestran en el objeto de la API last_payment_error.
Precaución
Antes de la versión de la API 2023-08-16
, cada error de Klarna se informaba como payment_intent_authentication_failure. Asegúrate de que la versión de la API esté actualizada para ver los errores detallados que se indican a continuación.
Código de fallo | Explicación |
---|---|
payment_method_customer_decline | El cliente ha cancelado el proceso de compra en la página de Klarna |
payment_method_provider_decline | Klarna ha rechazado el pago del cliente |
payment_intent_payment_attempt_expired | El cliente nunca completó el proceso de compra en la página de Klarna y la sesión de pago ha caducado |
payment_method_not_available | Se ha producido un error inesperado al intentar utilizar Klarna |