Habilita tus ventas
Usa tu perfil verificado y cuenta de efectivo activa según la política del Mall. La billetera de la tienda recibe los USDC.
Guía de integración · Checkout alojado
Conecta tu web o aplicación con Kairos Pay. Comparte productos publicados en Kairos Mall y recibe notificaciones firmadas de sus ventas.
Esta versión reutiliza el catálogo, los pedidos y la billetera de tu tienda en el Mall. No requiere abrir otra cuenta de Kairos ni copiar claves privadas.
Usa tu perfil verificado y cuenta de efectivo activa según la política del Mall. La billetera de la tienda recibe los USDC.
Configura precio, disponibilidad y condiciones. Conserva el identificador del producto publicado para tu enlace.
El comprador revisa el producto en Kairos Pay y continúa en Kairos Wallet para completar y autorizar su pedido.
Desde Mi tienda → Kairos Pay puedes elegir un producto y copiar su enlace, QR o botón. Para integrarlo por código necesitas el ID UUID de un producto real. No se solicita ninguna firma ni se crea un pedido al generar el enlace.
<script src="https://kairos777.com/kairos-pay.js?v=1.3.0"></script>
<div id="comprar"></div>
<script>
const boton = KairosPay.createCheckoutButton({
productId: 'UUID_DE_TU_PRODUCTO',
label: 'Pagar con Kairos Pay'
});
document.getElementById('comprar').appendChild(boton);
</script>Sustituye el marcador por un UUID válido de tu tienda. createCheckoutButton devuelve un enlace accesible y sólo admite productId y label. El destino, la cantidad final y el importe no se configuran en el SDK.
| Método | Uso |
|---|---|
getCheckoutUrl(productId) | Devuelve el enlace HTTPS de checkout para compartirlo en tu web, correo o campaña. |
openCheckout(productId) | Abre el checkout en la misma pestaña, después de una acción del comprador. No cobra ni confirma una venta. |
createCheckoutButton({ productId, label }) | Crea un elemento <a> listo para insertar. No necesita init(), wallet del vendedor, precio ni clave API. |
createMallButton({ productId, label }) | Conserva el acceso directo existente al producto dentro de Kairos Wallet. |
https://kairos777.com/pay-checkout?product=UUID_DE_TU_PRODUCTOLos enlaces no aceptan redirecciones arbitrarias, un importe alternativo ni un destinatario de pago. No uses onSuccess del SDK antiguo como prueba de una venta del Mall.
Abrir una página de retorno, volver a la tienda o ver un hash no demuestra que el vendedor haya recibido el pago.
order.paid. Comprueba firma, tienda e identidad del pedido antes de entregar el producto o licencia.id en tu base de datos y vincúlalo con tu operación local dentro de una transacción.En Kairos Wallet, abre tu tienda y la sección Kairos Pay → Integraciones · webhooks. Registra la URL HTTPS pública de tu servidor. Guarda el secreto que se muestra una sola vez en la configuración segura del servidor.
| Campo | Contrato de entrega |
|---|---|
x-kairos-firma | t=TIMESTAMP_MS,v1=HMAC_HEX. HMAC-SHA256 sobre timestamp + "." + cuerpo_original, con el secreto textual de esa suscripción. |
x-kairos-evento | Tipo de evento. Usa el tipo del cuerpo verificado como autoridad; esta cabecera no sustituye la firma. |
| Cuerpo JSON | id, tipo, tienda, creadoEn y datos. En order.paid, los datos incluyen pedidoId, totalUsdc, txHash y chainId. |
| Confirmación | Responde con HTTP 2xx después de guardar el evento de forma duradera. Los avisos pueden repetirse y no se garantiza su orden de llegada. |
| Reintentos | Hasta cinco intentos por entrega. Comprueba el registro de entregas y reconcilia cualquier fallo; no dependas de reintentos ilimitados. |
El catálogo distingue fisico, digital y servicio. La modalidad queda fijada al crear el pedido. Por compatibilidad, order.shipped también comunica una entrega digital registrada por el vendedor: comprueba datos.requiereEnvio y datos.tipoCumplimiento antes de tratarla como un envío físico. La nota privada de acceso se muestra únicamente al comprador autenticado, no en el webhook. La recepción del comprador es un paso separado.
Conserva el cuerpo como Buffer antes de procesar JSON. El secreto hexadecimal se usa como texto, sin convertirlo a bytes hexadecimales. El reloj del servidor debe estar sincronizado.
const crypto = require('node:crypto');
function verifyKairosSignature(rawBody, signature, secret, now = Date.now()) {
if (!Buffer.isBuffer(rawBody) || rawBody.length > 65536
|| typeof secret !== 'string' || secret.length < 32) return false;
const parts = /^t=(\d+),v1=([a-f0-9]{64})$/.exec(String(signature || ''));
if (!parts) return false;
const timestamp = Number(parts[1]);
if (!Number.isSafeInteger(timestamp)
|| Math.abs(now - timestamp) > 300000) return false;
const expected = crypto.createHmac('sha256', secret)
.update(parts[1] + '.').update(rawBody).digest();
return crypto.timingSafeEqual(expected, Buffer.from(parts[2], 'hex'));
}Esta función comprueba autenticidad y antigüedad; no procesa una venta. Después de validarla, analiza el JSON, exige que tienda sea tu dirección de vendedor, valida tipo y contrasta datos.pedidoId y el importe esperado con tu pedido. Registra el evento y la entrega de forma atómica para evitar entregar dos veces. Mantén los secretos fuera del navegador, del repositorio y de los logs.
La pantalla de tu tienda usa estas rutas existentes. Todas requieren la firma V2 de la wallet propietaria, vinculada al método, ruta, cuerpo y solicitud. No son endpoints públicos ni utilizan una clave global compartida.
Base: https://api.kairos777.com/api/tienda/mi-tienda/pagos
| Ruta relativa | Operación |
|---|---|
GET /webhooks | Lista tus suscripciones y eventos admitidos, sin mostrar los secretos. |
POST /webhooks | Registra { url, eventos }. La tienda se obtiene de la firma. |
GET /webhooks/entregas | Consulta el historial de entregas de tu tienda. |
POST /webhooks/:id/rotar-secreto | Rota el secreto de una suscripción propia y muestra el nuevo una sola vez. |
DELETE /webhooks/:id | Desactiva una suscripción de tu tienda. |
| Situación | Comportamiento esperado |
|---|---|
| Pago pendiente | No despaches ni actives una licencia. La Wallet permite seguir el pedido mientras se comprueba el pago. |
| Resultado de envío incierto | Revisa el mismo pedido y transacción. No solicites otro pago para resolver un retraso de confirmación. |
| Compra abandonada | Cerrar el checkout no confirma, devuelve ni cancela una transacción que ya se haya enviado. El pedido tiene su propio estado y vencimiento. |
| Pago confirmado | order.paid informa una venta comprobada. Deduplica por ID del evento y por operación comercial. |
| Devolución | order.refunded se registra tras comprobar la devolución correspondiente. Concilia el importe devuelto; no presupongas que una notificación representa el reembolso total de un pedido. |
| Disponible en este recorrido | Requiere habilitación o desarrollo adicional |
|---|---|
| Productos existentes del Mall, checkout alojado, enlaces, botón para tu web y pago en USDC desde Kairos Wallet. | Cobro directo con tarjeta o cuenta bancaria, alta de comercios ante el procesador y sus capacidades de reembolso o disputa. |
| Notificaciones firmadas por tienda y gestión de pedidos en la Wallet. | Checkout embebido con campos de tarjeta del proveedor, suscripciones, facturas fiscales y API general para catálogos externos. |
| El vendedor recibe USDC en su billetera; la comisión sigue las condiciones del pedido. | Depósito automático de estas ventas en la cuenta de efectivo de Bridge. |
Antes de entregar un producto real, comprueba conexión de tienda, compra autorizada, confirmación, webhook duplicado, recuperación de un envío incierto y devolución en el entorno adecuado. Ninguna pantalla de presentación acredita fondos ni demuestra por sí sola aprobación del procesador.