SDK web
Instalar
Opción 1: NPM
npm install @yuno-pagos/sdk-webimport { Yuno } from '@yuno-payments/sdk-web';Opción 2: CDN
<script src="https://sdk-web.y.uno/v1.5/main.js"></script>Opción 3: Carga dinámica
const script = document.createElement('script');
script.src = 'https://sdk-web.y.uno/v1.5/main.js';
document.head.appendChild(script);
Compatibilidad con TypeScriptTipos de instalación:
npm install @yuno-payments/sdk-web-types
pago básico de pago
1. Initialize
const yuno = await Yuno.initialize(public-api-key);2. Crear sesión de pago (backend)
// Your backend endpoint
const session = await fetch('/api/checkout/session', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
customer_id: 'cus_123',
amount: { currency: 'USD', value: 2500 },
country: 'US'
})
}).then(r => r.json());3. Configurar el proceso de pago
yuno.startCheckout({
checkoutSession: session.checkout_session,
elementSelector: '#payment-container',
countryCode: 'US',
language: 'en-US',
async yunoCreatePayment(oneTimeToken) {
const result = await fetch('/api/payment/create', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
one_time_token: oneTimeToken,
checkout_session: session.checkout_session
})
}).then(r => r.json());
yuno.continuePayment({ showPaymentStatus: true });
},
yunoPaymentResult: (data) => {
console.log('Payment completed:', data.status);
}
});4. Monta pago
yunomountCheckout();5. Iniciar pago
Añade un pago y activa el pago :
const payButton = document.querySelector('#pay-button');
payButton.addEventListener('click', () => {
yuno.startPayment();
});6. Añadir HTML
<div id="payment-container"></div>
<button id="pay-button">Pay Now</button>Ejemplo práctico completo
<!DOCTYPE html>
<html>
<head>
<title>Yuno Payment</title>
<script src="https://sdk-web.y.uno/v1.5/main.js"></script>
</head>
<body>
<div id="payment-container"></div>
<button id="pay-button">Pay Now</button>
<script>
async function initPayment() {
// Initialize
const yuno = await Yuno.initialize('pk_test_123');
// Create session
const session = await fetch('/api/checkout/session', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
customer_id: 'cus_123',
amount: { currency: 'USD', value: 2500 },
country: 'US'
})
}).then(r => r.json());
// Configure checkout
yuno.startCheckout({
checkoutSession: session.checkout_session,
elementSelector: '#payment-container',
countryCode: 'US',
async yunoCreatePayment(token) {
await fetch('/api/payment/create', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
one_time_token: token,
checkout_session: session.checkout_session
})
});
yuno.continuePayment();
},
yunoPaymentResult: (data) => {
if (data.status === 'SUCCEEDED') {
window.location.href = '/success';
}
}
});
// Mount form
yuno.mountCheckout();
// Start payment on button click
document.querySelector('#pay-button').addEventListener('click', () => {
yuno.startPayment();
});
}
initPayment();
</script>
</body>
</html>Gestión de pago
yuno.startCheckout({
// ... other config
yunoPaymentResult: (data) => {
switch(data.status) {
case 'SUCCEEDED':
window.location.href = '/success';
break;
case 'FAILED':
alert('Payment failed: ' + data.error?.message);
break;
case 'PENDING':
console.log('Payment is being processed');
break;
case 'REJECTED':
alert('Payment was rejected');
break;
}
},
yunoError: (error) => {
console.error('Error:', error);
}
});Autenticación 3DS
El SDK gestiona automáticamente el 3DS. Para pago asíncronos:
async yunoCreatePayment(token) {
await createPaymentOnBackend(token);
// Handle redirect if needed
const result = await yuno.continuePayment();
if (result?.action === 'REDIRECT_URL') {
window.location.href = result.redirect.init_url;
}
}Opciones de configuración
Parámetros esenciales
| Parámetro | Tipo | Descripción |
|---|---|---|
checkoutSession | string | ID de sesión del backend |
elementSelector | string | Selector CSS para contenedor |
countryCode | string | Código ISO del país (por ejemplo, «US») |
language | string | Código de idioma (por ejemplo, «en-US») |
yunoCreatePayment | función | Devolución de llamada pago |
Configuración de la tarjeta
yuno.startCheckout({
// ... other config
card: {
type: 'extends', // or 'only'
cardSaveEnable: true, // Show save checkbox
isCreditCardProcessingOnly: false, // Allow debit
onChange: ({ error, data }) => {
if (error) {
console.log('Card validation error:', error);
}
}
}
});Cargador y estado
yuno.startCheckout({
// ... other config
showLoading: true, // Show Yuno's loader
showPaymentStatus: true, // Show payment result page
onLoading: (isLoading) => {
console.log('Loading state:', isLoading);
}
});Próximos pasos
¿Estás listo para explorar funciones más avanzadas? Consulta la guía de funciones avanzadas para:
- Opciones de montaje alternativas -
mountCheckoutLite()ymountSeamlessCheckout()para la selección de pago personalizados - Inscripción (Guardar tarjetas): guarda pago para usarlos en el futuro.
- Token almacenados: pagos con un solo clic con tarjetas guardadas.
- Interfaz de usuario personalizada (integración sin interfaz gráfica): crea pago totalmente personalizados.
- Campos seguros: formularios de tarjetas personalizados que cumplen con la normativa PCI.
- Estilo y personalización: adapta el SDK a tu marca
- Configuración avanzada: vistas dinámicas, modo de renderizado y mucho más.
Véase también
- Ejemplos de código: ejemplos para copiar y pegar en situaciones habituales.
Actualizado hace 1 día