Saltar al contenido principal

Integración vía SDK de JavaScript (Vanilla)

Nuestro SDK en JavaScript (sin frameworks) permite integrar el checkout de forma sencilla y segura en tu página web. Este SDK se encarga de renderizar la interfaz y gestionar toda la comunicación con Paylands para procesar las transacciones.

El SDK utiliza una biblioteca del lado del cliente en JavaScript que se puede integrar fácilmente en tu página de pago.

Esta biblioteca se encarga de renderizar la interfaz de usuario y de gestionar la comunicación necesaria con Paylands para ejecutar cualquier tipo de transacción de manera fluida.

Para poder utilizar el SDK será necesario previamente haber generado una orden de pago en Paylands. Esta orden deberá contener el uuid del checkout creado previamente. Para más información sobre cómo generar una orden con checkout, consulta la sección Integración via API.

1. Incluir el SDK en tu web

En nuestra página, cargaremos el script del checkout SDK de Paylands.

<script async src="https://ws-paylands.paynopain.com/assets/checkout/paylands-checkout-sdk.js"></script>

Y a continuación inicializaremos el SDK indicando el token generado en la orden de pago.

const paylandsCheckout = await PaylandsCheckout.create({token: '9fdade323e7...'. environment: 'SANDBOX'});

Esto devolverá una instancia de PaylandsCheckout que se puede utilizar para interactuar con el SDK.

2. Funciones del SDK

Redirección

Para redirigir al usuario al checkout, simplemente llama a la función redirect.

await paylandsCheckout.redirect();

Renderizado

Para renderizar el checkout en un contenedor específico, llama a la función render.

await paylandsCheckout.render('renderContainer');
Request
containerObligatorioID del contenedor en el que se renderizará el checkout.

Nota: Para completar el pago, no olvides el paso 3.

Formulario de tarjeta

Para renderizar un formulario de tarjeta personalizable en un contenedor específico, llama a la función card.

await paylandsCheckout.card({
container: '#renderContainer',
form: { ... },
customization: { ... }
});
Request
containerObligatorioID del contenedor en el que se renderizará el formulario
form (Object)ObligatorioConfiguración del formulario
customization (Object)ObligatorioPersonalización del formulario
form (Object)
holderLabelOpcionalLabel del input del propietario de la tarjeta
holderErrorOpcionalError a mostrar si el valor es incorrecto
panLabelOpcionalLabel del input del PAN de la tarjeta
panErrorOpcionalError a mostrar si el valor es incorrecto
expiryLabelOpcionalLabel del input de la fecha de caducidad de la tarjeta
expiryErrorOpcionalError a mostrar si el valor es incorrecto
cvvLabelOpcionalLabel del input del CVV de la tarjeta
cvvErrorOpcionalError a mostrar si el valor es incorrecto
customization (Object)
fontOpcionalFuente del texto
textColorOpcionalColor del texto
backgroundColorOpcionalColor del fondo
errorColorOpcionalColor del texto de error
borderColorOpcionalColor del borde de los inputs
borderRadiusOpcionalRadio del borde de los inputs
paddingOpcionalEspaciado
inputTextSizeOpcionalTamaño del texto del input
labelTextSizeOpcionalTamaño del texto del label
iconSizeOpcionalTamaño de los iconos
iconColorOpcionalColor de los iconos

¿Cómo validar el formulario?

El formulario tiene su propia validación la cual comunica mediante el evento card_valid.

window.addEventListener('message', event => {
if (event.data.card_valid === true) {
console.log('El formulario es válido');
}
if (event.data.card_valid === false) {
console.log('El formulario contiene errores');
}
});

¿Cómo hacer submit?

Enviar un evento pay con el valor card.

button.addEventListener("click", () => window.postMessage({ pay: "card" }));

Nota: Para completar el pago, no olvides el paso 3.

Botón de Google Pay

Para renderizar un botón de Google Pay en un contenedor específico, llama a la función google_pay. Es necesario que el comercio tenga habilitado Google Pay en su cuenta de Paylands. Para más información, consulta la sección Google Pay.

await paylandsCheckout.google_pay('#renderContainer');
Request
containerObligatorioID del contenedor en el que se renderizará el botón de Google Pay

Nota: Para completar el pago, no olvides el paso 3.

Botón de Apple Pay

Para renderizar un botón de Apple Pay en un contenedor específico, llama a la función apple_pay. Es necesario que el comercio tenga habilitado Apple Pay en su cuenta de Paylands. Para más información, consulta la sección Apple Pay.

await paylandsCheckout.apple_pay('#renderContainer');
Request
containerObligatorioID del contenedor en el que se renderizará el botón de Apple Pay

Nota: Para completar el pago, no olvides el paso 3.

Botón de PayPal

Para renderizar un botón de PayPal en un contenedor específico, llama a la función payPal. Es necesario que el comercio tenga habilitado PayPal en su cuenta de Paylands. |

await paylandsCheckout.payPal({
container: '#renderContainer',
form: { ... },
customization: { ... }
});
Request
containerObligatorioID del contenedor en el que se renderizará el botón de PayPal
form (Object)ObligatorioConfiguración del botón
customization (Object)ObligatorioPersonalización del botón
form (Object)
prefilledAddressOpcionalDirección del usuario si la conocemos
prefilledCountryOpcionalPaís del usuario si lo conocemos
customization (Object)
layoutOpcionalhttps://developer.paypal.com/sdk/js/reference/#link-layout
colorOpcionalhttps://developer.paypal.com/sdk/js/reference/#link-color
labelOpcionalhttps://developer.paypal.com/sdk/js/reference/#link-label
borderRadiusOpcionalhttps://developer.paypal.com/sdk/js/reference/#link-borderradius

Nota: Para completar el pago, no olvides el paso 3.

Metodos de pago alternativos

Para renderizar un metodo de pago alternativo en un contenedor específico, llama a la función <NOMBRE DEL METODO DE PAGO>. Actualmente los métodos de pago alternativos disponibles son:

  • bizum
  • boleto
  • cofidis
  • efecty
  • loterica
  • mbway
  • multibanco
  • pago_facil
  • payshop
  • pse
  • safetypay
  • pix
  • picpay
  • mach
  • khipu
  • klap
  • servipag
  • flowpay
  • spei
  • webpay
await paylandsCheckout.bizum({
container: '#renderContainer',
form { ... },
customization: { ... }
});

Nota: Para saber que campos de formulario son obligatorios para un método de pago en concreto, consulta su sección en la documentación.

Request
containerObligatorioID del contenedor en el que se renderizará el formulario
form (Object)ObligatorioConfiguración del formulario
customization (Object)ObligatorioPersonalización del formulario
form (Object)
nameLabelOpcionalLabel del input del nombre
nameErrorOpcionalError a mostrar si el valor es incorrecto
lastNameLabelOpcionalLabel del input del apellido
lastNameErrorOpcionalError a mostrar si el valor es incorrecto
emailLabelOpcionalLabel del input del email
emailErrorOpcionalError a mostrar si el valor es incorrecto
prefilledNameOpcionalNombre del usuario si lo conocemos
prefilledLastNameOpcionalApellido del usuario si lo conocemos
prefilledEmailOpcionalEmail del usuario si lo conocemos
prefixLabelOpcionalLabel del input del prefijo telefónico
prefixErrorOpcionalError a mostrar si el valor es incorrecto
phoneLabelOpcionalLabel del input del número telefónico
phoneErrorOpcionalError a mostrar si el valor es incorrecto
prefilledPrefixOpcionalPrefijo del usuario si lo conocemos
prefilledPhoneOpcionalNúmero del usuario si lo conocemos
prefilledDocumentIdentificationNumberOpcionalNumero de identificación personal si lo conocemos
documentIdentificationNumberLabelOpcionalLabel del input de número de identificación personal
documentIdentificationNumberErrorOpcionalError a mostrar si el valor es incorrecto
addressLabelOpcionalLabel del input de la dirección
addressErrorOpcionalError a mostrar si el valor es incorrecto
zipCodeLabelOpcionalLabel del input del código postal
zipCodeErrorOpcionalError a mostrar si el valor es incorrecto
cityLabelOpcionalLabel del input de la ciudad
cityErrorOpcionalError a mostrar si el valor es incorrecto
countryLabelOpcionalLabel del input del país
countryErrorOpcionalError a mostrar si el valor es incorrecto
prefilledAddressOpcionalDirección del usuario si la conocemos
prefilledZipCodeOpcionalCódigo postal del usuario si lo conocemos
prefilledCityOpcionalCiudad del usuario si la conocemos
prefilledCountryOpcionalPaís del usuario si lo conocemos
customization (Object)
fontOpcionalFuente de texto
primaryColorOpcionalColor del botón
textColorOpcionalColor del texto
backgroundColorOpcionalColor del fondo
errorColorOpcionalColor del texto de error
borderColorOpcionalColor del borde de los inputs
borderRadiusOpcionalRadio del borde de los inputs
paddingOpcionalEspaciado
inputTextSizeOpcionalTamaño del texto del input
labelTextSizeOpcionalTamaño del texto del label
iconSizeOpcionalTamaño de los iconos
iconColorOpcionalColor de los iconos
buttonTextOpcionalContenido del botón
buttonTextSizeOpcionalTamaño del texto del botón

¿Cómo validar el formulario?

El formulario tiene su propia validación la cual comunica mediante el evento <METODO DE PAGO>_valid.

window.addEventListener('message', event => {
if (event.data.bizum_valid === true) {
console.log('El formulario es válido');
}
if (event.data.bizum_valid === false) {
console.log('El formulario contiene errores');
}
});

¿Cómo hacer submit?

Enviar un evento pay con el valor <METODO DE PAGO>.

button.addEventListener("click", () => window.postMessage({ pay: "bizum" }));

Nota: Para completar el pago, no olvides el paso 3.

3. El cliente completa el pago

Una vez el usuario finalice el pago, se enviará un evento sobre la propia página con alguno de los siguientes valores que deberá ser tratado por el comercio:

Response
redirectURL hacia la que redirigir al usuario con el resultado del pago OK/KO
renderContenido HTML para renderizar en la página.
Esto sucede porque se requiere la intervención del usuario de nuevo, generalmente para completar el 3DS. El tamaño mínimo recomendado es de 500x600
errorContenido HTML con el error ocurrido.
window.addEventListener('message', event => {
if (event.data.redirect) {
window.location.href = event.data.redirect;
} else if (event.data.render) {
const container = document.getElementById('renderContainer');
if (container) {
container.innerHTML = event.data.render;
}
const submitButton = document.getElementById('submitBTN');
if (submitButton) {
submitButton.click()
} else {
const form = document.querySelector('form')
if (form) {
form.submit()
}
}
} else if (event.data.error) {
const container = document.getElementById('renderContainer');
if (container) {
container.innerHTML = event.data.error;
}
}

Nota: Esto no será necesario si se ha utilizado la función redirect del SDK. En este caso, el SDK se encargará de redirigir al cliente a la URL de redirección correspondiente según el resultado de la operación:

  • Si se ha efectuado el pago correctamente se redirige a la url especificada en el campo url_ok de la orden.
  • En cualquier otro caso se redirige a la url especificada en el campo url_ko de la orden.

4. Ejemplo de uso

<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Ejemplo de checkout por SDK</title>
</head>
<body>
<div id="payment-container" style="max-width: 400px;"></div>
<script>
const script = document.createElement('script');
script.src = 'https://api.paylands.com/assets/checkout/paylands-checkout-sdk.js';
script.onload = async () => {
const paylandsCheckout = await PaylandsCheckout.create({
token: TOKEN_DE_LA_ORDEN, // Reemplaza con el token de la orden generado en tu backend
environment: 'SANDBOX', // Cambia a 'PRODUCTION' para el entorno de producción
});

await paylandsCheckout.render('payment-container'); // Consulta la documentación para más opciones de pago

window.addEventListener('message', event => {
if (event.data.redirect) {
window.location.href = event.data.redirect;
} else if (event.data.render) {
const container = document.getElementById('payment-container');
if (container) {
container.innerHTML = event.data.render;
}
const submitButton = document.getElementById('submitBTN');
if (submitButton) {
submitButton.click()
} else {
const form = document.querySelector('form')
if (form) {
form.submit()
}
}
} else if (event.data.error) {
const container = document.getElementById('payment-container');
if (container) {
container.innerHTML = event.data.error;
}
}
});
};
script.onerror = () => {
console.error('Error al cargar el SDK de Paylands');
};
document.head.appendChild(script);
</script>
</body>
</html>