🛠️Insertar cajita de pagos Payphone
La integración de la Cajita de Pagos en tu sitio web es rápida y sencilla. Solo necesitas agregar dos scripts, una fuente CSS, un fragmento de JavaScript de configuración, y un contenedor HTML donde aparecerá el botón de pago.
🧷 Agrega las dependencias en la cabecera de tu página
- payphone-payment-box.css: La hoja de estilos CSS aplica el diseño visual del botón de pago.
- payphone-payment-box.js: El SDK JavaScript habilita el control y la lógica de la Cajita.
<head>
<link rel="stylesheet" href="https://cdn.payphonetodoesposible.com/box/v1.1/payphone-payment-box.css">
<script type="module" src="https://cdn.payphonetodoesposible.com/box/v1.1/payphone-payment-box.js"></script>
</head>
⚙️ Inserta el script de configuración
- Este script es el núcleo de la integración. Define los datos de la transacción, credenciales, impuestos, y comportamiento del formulario. Puedes colocarlo al final del
<body>
o también en el <head>
<script>
//Cobro mixto: 1 USD con impuesto del 15% y 2 USD sin impuesto
window.addEventListener('DOMContentLoaded',()=>{
ppb = new PPaymentButtonBox({
token: 'ACA TU TOKEN', //credenciales de acceso
clientTransactionId: 'ID_UNICO_X_TRANSACCION-001',
amount: 315, // Valor total
amountWithoutTax: 200,
amountWithTax:100,
tax: 15,
service: 0,
tip:0,
currency: "USD",
storeId:"TU_STOREID",
reference:"Pago por venta Fact#001",
lang: "es",
defaultMethod:"card", // *Tarjeta = "card" - *Payphone = "payphone"
timeZone: -5,
lat: "-1.831239",
lng: "-78.183406",
//Solo si se registran datos del titular de la tarjeta
phoneNumber:"+593999999999",
email: "aloy@mail.com",
documentId:"1234567890",
identificationType: 1 //Tipo de identificación: *Cédula: 1 *RUC: 2 *Pasaporte: 3 *Por defecto 1.
}).render('pp-button');
})
</script>
📦 Inserta el contenedor del botón
- Debes agregar un contenedor
<div id="pp-button">
en la ubicación donde desees que aparezca el botón de pago:
<div id="pp-button"></div>
📌 Importante:
📟 Cálculo del monto total (amount
)
El campo amount
debe ser la suma de todos los valores monetarios
amount = amountWithoutTax + amountWithTax + tax + service + tip
Aunque los campos individuales son opcionales, debe haber al menos uno presente que respalde el valor total amount
💵 Valores monetarios en centavos:
Todos los montos deben expresarse como enteros. Multiplica el valor en dólares por 100:
💵 Valor en USD |
🪙 Valor en centavos |
$ 1.00 |
100 |
$ 1.50 |
150 |
$ 10.00 |
1000 |
$ 12.68 |
1268 |
📈 Ejemplo básico de configuración
A continuación, se muestran ejemplos de configuraciones con los campos mínimos para diferentes tipos de cobro:
<script>
//Ejemplo de cobro de 1 USD con impuesto del 15%
window.addEventListener('DOMContentLoaded',()=>{
ppb = new PPaymentButtonBox({
token: 'ACA TU TOKEN',
clientTransactionId: 'ID_UNICO_X_TRANSACCION-001',
amount: 115,
amountWithTax:100,
tax: 15,
currency: "USD",
storeId:"TU_STOREID",
reference:"Pago por venta Fact#001"
}).render('pp-button');
})
</script>
<script>
//Ejemplo de cobro de 2 USD sin impuesto
window.addEventListener('DOMContentLoaded',()=>{
ppb = new PPaymentButtonBox({
token: 'ACA TU TOKEN',
clientTransactionId: 'ID_UNICO_X_TRANSACCION-001',
amount: 200,
amountWithoutTax: 200,
currency: "USD",
storeId:"TU_STOREID",
reference:"Pago por venta Fact#001"
}).render('pp-button');
})
</script>
<script>
//Ejemplo de un cobro mixto: 1 USD con impuesto del 15% y 2 USD sin impuesto
window.addEventListener('DOMContentLoaded',()=>{
ppb = new PPaymentButtonBox({
token: 'ACA TU TOKEN',
clientTransactionId: 'ID_UNICO_X_TRANSACCION-001',
amount: 315,
amountWithoutTax: 200,
amountWithTax:100,
tax: 15,
currency: "USD",
storeId:"TU_STOREID",
reference:"Pago por venta Fact#001"
}).render('pp-button');
})
</script>
🧾 Descripción de parámetros en la petición
A continuación se detallan todos los parámetros que se pueden usar para una transacción como montos a cobra, la moneda, datos del cliente y otros campos que necesites enviar.
Credencial que se genera en la configuración de Payphone Developer.
Valor total de la factura a cobrar, es la suma de amountWithTax, amountWithoutTax, Tax, service y tip.
Monto que no está sujeto a impuestos.
Monto que incluye el valor sujeto a impuestos, excluyendo el propio impuesto.
Monto del impuesto aplicado a la transacción.
Monto asociado al servicio proporcionado.
Monto de la propina otorgada por el cliente.
Código de moneda ISO 4217. (ej:USD)
Identificador único asignado por el comercio a cada transacción para su seguimiento. Máximo 50 caracteres
Identificador de la sucursal que efectúa el cobro (se obtiene en Payphone Developer).
Motivo o referencia específica del pago. Máximo 100 caracteres
Número de teléfono del titular; se solicitará si no se proporciona.
Formato: Símbolo(+) + Código País + numero telefónico.
Ej. +593984111222
Correo electrónico del titular; se solicitará si no se proporciona.
Número de identificación del titular; se solicitará si no se proporciona.
Tipo de identificación:
*Cédula: 1
*RUC: 2
*Pasaporte: 3
Por defecto 1.
Idioma de Formulario:
inglés (en),
español (es).
Por defecto en español.
El método por defecto a mostrar:
*Tarjeta = "card"
*Payphone = "payphone"
latitud en formato decimal: -1.831239
longitud en formato decimal: -78.183406
🛑 Advertencia:
Al utilizar los campos phoneNumber
, email
y documentId
en las solicitudes a los servicios de Payphone, es crucial que se ingresen los datos del titular de la tarjeta para cada transacción individual.
No se permite el uso de datos "quemados" o estáticos, ya que esto puede resultar en el rechazo de sus transacciones y el bloqueo de sus usuarios. El uso de datos falsos o repetitivos puede generar sospechas de fraude.
Payphone se compromete a proteger la seguridad y privacidad de los datos, por lo que es fundamental cumplir con esta política para garantizar un proceso de pago seguro y confiable.
🧱 Estructura final del código:
<!DOCTYPE html>
<html lang="es">
<head>
<script src="https://cdn.payphonetodoesposible.com/box/v1.1/payphone-payment-box.js" type="module" ></script>
<link href="https://cdn.payphonetodoesposible.com/box/v1.1/payphone-payment-box.css" rel="stylesheet" >
</head>
<body>
<script>
window.addEventListener('DOMContentLoaded',()=>{
ppb = new PPaymentButtonBox({
token: 'ACA TU TOKEN',
clientTransactionId: 'ID_UNICO_X_TRANSACCION-001',
amount: 315,
amountWithoutTax: 200,
amountWithTax:100,
tax: 15,
currency: "USD",
storeId:"TU_STOREID",
reference:"Pago por venta Fact#001"
}).render('pp-button');
})
</script>
<div id="pp-button"></div>
</body>
</html>
Una vez terminada la configuración de tu página con los campos requeridos se mostrara la cajita de pagos de la siguiente forma:

📌 Consideraciones
⏱️ Tiempo de vida del formulario
- Cada formulario de la Cajita de Pagos tiene una vigencia de 10 minutos desde su carga.
- Si el usuario no completa el pago en ese tiempo, el formulario expirará y se deberá generar uno nuevo.
🚫 Error de "Acceso denegado" en la Cajita de Pagos

¿Por qué ocurre este error?
El mensaje de “Acceso denegado o dominio no permitido” al intentar cargar o ejecutar la Cajita de Pagos puede deberse a una de las siguientes razones:
1. 🌐 Dominio no autorizado
- La Cajita de Pagos solo funciona en el dominio registrado en tu configuración de desarrollador en Payphone Developer.
- Si intentas ejecutarla desde otro dominio o mediante una redirección no autorizada, se bloqueará por motivos de seguridad.
- ✅ Solución: Asegúrate de que la redirección hacia el formulario de pago se realice desde el mismo dominio que configuraste en tu cuenta de Payphone.
2. 🛡️ Falta de identidad del sitio (Referrer-Policy)
En algunos frameworks o servidores, existe una configuración por defecto que no comparte la identidad del sitio web desde donde se hace la redirección al formulario de pago.
Esto impide que Payphone verifique el origen de la solicitud y provoca el error de acceso denegado.
La configuración detectada que puede causar el error:
- Referrer-Policy: en las plataformas mas comunes como C# / ASP.NET, WordPress, entre otras
- SECURE_REFERRER_POLICY: Desde Django 3.1 en adelante
📘 ¿Qué es la Referrer-Policy?
La Referrer-Policy es una política de seguridad del navegador que define qué información del origen (referencia) se envía al hacer peticiones a otros recursos.
A continuación, se muestran las opciones más comunes:
- no-referrer: No se envía ninguna referencia. Máxima privacidad, pero puede romper funcionalidades.
- no-referrer-when-downgrade: Envía la referencia solo si ambos sitios usan HTTPS.
- origin: Envía solo el esquema y host del sitio (sin ruta). Nivel medio de privacidad.
- origin-when-cross-origin: Como
origin
, pero solo en solicitudes entre sitios distintos.
- strict-origin: Similar a
origin
, pero restringido a HTTPS..
- strict-origin-when-cross-origin: Mayor control sobre envíos entre orígenes cruzados.
- no-referrer: No se envía ninguna referencia. Máxima privacidad, pero puede romper funcionalidades.
✅ Recomendación de Payphone
Para garantizar el correcto funcionamiento de la Cajita de Pagos, recomendamos usar:
- origin
- origin-when-cross-origin
Esto proporciona el equilibrio ideal entre funcionalidad y privacidad, y permite a Payphone validar correctamente el origen de la solicitud.