Ir al contenido

Embedded Checkout

El Embedded Checkout es un widget que puedes integrar directamente en tu sitio web, permitiendo a tus clientes crear su propia solicitud de pago. El widget maneja automáticamente la selección de país, validación de datos y redirige al cliente al proceso de checkout.

Embedded Checkout de Aloha Pay

Antes de integrar el Embedded Checkout, necesitas:

Debes crear una clave API desde el dashboard de Aloha Pay. Esta clave se usará para autenticar las solicitudes del widget.

Los Allowed Origins son las URLs de los sitios web donde utilizarás el Embedded Checkout. Por ejemplo:

  • https://tudominio.com
  • https://www.tudominio.com
  • http://localhost:3000 (para desarrollo)

Puedes configurar los Allowed Origins al crear o editar tu clave API en el dashboard de Aloha Pay.

Incluye el script directamente desde nuestro CDN:

<script src="https://cdn.alohapay.co/v2/aloha-pay.umd.js"></script>
<!DOCTYPE html>
<html>
<head>
<title>Checkout - Mi Tienda</title>
</head>
<body>
<div id="aloha-checkout"></div>
<script src="https://cdn.alohapay.co/v2/aloha-pay.umd.js"></script>
<script>
const checkout = AlohaPay.create({
// Requeridos
apiKey: 'pay_xxxxx_live_xxxxxxxxxxxxx',
container: '#aloha-checkout',
amount: 60000,
// Opcionales
locale: 'es',
description: 'Compra en Mi Tienda',
defaultCountry: 'CL',
useSandbox: false,
hideAmount: true,
// Estilos personalizados
styles: {
headerBackground: 'linear-gradient(135deg, #846ffb 0%, #6b5fcd 100%)',
buttonColor: '#846ffb',
maxWidth: '480px'
},
// Datos pre-llenados del cliente (opcional)
customer: {
firstName: 'Juan',
lastName: 'Pérez',
email: 'juan@email.com',
phone: '+56912345678'
},
// Callbacks
onReady: () => {
console.log('Widget listo');
},
onError: (error) => {
console.error('Error:', error);
},
onPaymentLinkCreated: (checkoutUrl) => {
console.log('Link de pago creado:', checkoutUrl);
},
onPaymentComplete: () => {
console.log('¡Pago completado!');
// Aquí puedes redirigir al usuario o mostrar confirmación
}
});
</script>
</body>
</html>
PropiedadTipoDescripción
apiKeystringTu clave API de Aloha Pay
containerstringSelector CSS del contenedor donde se renderiza el widget
amountnumberMonto a cobrar en la moneda de tu billetera
PropiedadTipoDefaultDescripción
locale'en' | 'es' | 'pt''en'Idioma del widget
descriptionstring'Payment'Descripción del pago
defaultCountrystringundefinedCódigo de país pre-seleccionado (ej: 'BR', 'MX', 'CL')
useSandboxbooleanfalseUsar ambiente de pruebas
hideAmountbooleanfalseOculta el monto en la parte superior del widget
customerCustomerDataundefinedDatos pre-llenados del cliente
stylesCheckoutStylesundefinedEstilos personalizados
PropiedadTipoDescripción
firstNamestringNombre del cliente
lastNamestringApellido del cliente
emailstringEmail del cliente
phonestringTeléfono del cliente (con código de país)
PropiedadTipoDefaultDescripción
headerBackgroundstringlinear-gradient(135deg, #846ffb 0%, #6b5fcd 100%)Fondo del header
amountColorstring#ffffffColor del texto del monto
buttonColorstring#846ffbColor de fondo del botón
buttonTextColorstring#ffffffColor del texto del botón
linkColorstring#846ffbColor de los enlaces
maxWidthstring480pxAncho máximo del widget

El widget proporciona varios callbacks para que puedas reaccionar a los diferentes estados del proceso de pago:

EventoParámetrosDescripción
onReady-Se ejecuta cuando el widget está completamente cargado y listo para usar
onErrorerror: ErrorSe ejecuta cuando ocurre un error (fallos de red, validación, etc.)
onPaymentLinkCreatedcheckoutUrl: stringSe ejecuta cuando se genera el link de pago y el usuario es redirigido
onPaymentComplete-Se ejecuta cuando el pago se completa exitosamente
AlohaPay.create({
apiKey: 'pay_xxxxx_live_xxxxxxxxxxxxx',
container: '#checkout',
amount: 50000,
onReady: () => {
// Ocultar spinner de carga
document.getElementById('loading').style.display = 'none';
},
onError: (error) => {
// Mostrar mensaje de error al usuario
alert(`Error: ${error.message}`);
// Enviar a tu sistema de monitoreo
logError(error);
},
onPaymentLinkCreated: (checkoutUrl) => {
// El checkout se abrió en una nueva pestaña
// Puedes guardar la URL o mostrar instrucciones
console.log('Continúa el pago en:', checkoutUrl);
},
onPaymentComplete: () => {
// Mostrar confirmación
showSuccessMessage();
// Redirigir a página de confirmación
window.location.href = '/orden-confirmada';
}
});
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ │ │ │ │ │
│ Formulario │────▶│ Esperando │────▶│ Completado │
│ │ │ Pago │ │ │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │
│ │
▼ ▼
Validación Abre checkout
de datos en nueva pestaña
+ polling cada 3s
  1. Formulario: El cliente selecciona país e ingresa sus datos
  2. Esperando: Se abre el checkout en nueva pestaña, el widget hace polling para detectar el pago
  3. Completado: Se muestra confirmación cuando el pago es exitoso

El callback onPaymentComplete es útil para mejorar la experiencia del usuario, pero no es seguro para confirmar transacciones porque:

  1. Puede ser manipulado por usuarios maliciosos
  2. El usuario podría cerrar el navegador antes de que se ejecute
  3. Problemas de red podrían impedir que el evento llegue
  1. En el frontend: Usa onPaymentComplete para mostrar feedback inmediato al usuario
  2. En el backend: Configura webhooks para recibir notificaciones seguras de pagos completados
  3. Verificación: Siempre verifica la firma del webhook antes de procesar
// Frontend - Solo para UX
onPaymentComplete: () => {
// Mostrar mensaje provisional
showMessage('Verificando pago...');
// Consultar tu backend para confirmar
checkPaymentStatus(orderId).then(status => {
if (status === 'confirmed') {
redirectToConfirmation();
}
});
}
// Backend - Webhook handler (Node.js/Express)
app.post('/webhooks/aloha-pay', (req, res) => {
const signature = req.headers['x-aloha-signature'];
// Verificar firma
if (!verifySignature(req.body, signature, webhookSecret)) {
return res.status(401).send('Invalid signature');
}
const event = req.body;
if (event.type === 'payment.completed') {
// Actualizar orden en tu base de datos
updateOrderStatus(event.data.orderId, 'paid');
}
res.status(200).send('OK');
});
CódigoPaís
ARArgentina
BRBrasil
CLChile
COColombia
MXMéxico
AmbienteAPI URLUso
Producciónhttps://api.alohapay.co/api/external/v1Transacciones reales
Sandboxhttps://api-dev.alohapay.co/api/external/v1Pruebas y desarrollo

Para usar el ambiente de pruebas, configura useSandbox: true en la inicialización del widget.

  1. Verifica que el script esté correctamente incluido
  2. Revisa la consola del navegador por errores
  3. Confirma que el contenedor existe en el DOM antes de inicializar
  1. Verifica que hayas configurado los Allowed Origins en tu clave API
  2. Asegúrate de incluir el protocolo completo (https:// o http://)
  3. Para desarrollo local, agrega http://localhost:PUERTO
  1. Verifica que los webhooks estén correctamente configurados
  2. Revisa los logs de tu servidor para errores
  3. Confirma que tu servidor responde con status 200 a los webhooks