Boton de pago
Cajita de pagos | RecomendadoBotón de pago por redirecciónTokenizaciónSplit de Pagos
Plugins
WoocommercePrestashop
APIs
Links de PagoAPI SalePagos MasivosWebViewNotificación ExternaAPI UserConsulta por LotesPre-registro de comercios
Soporte
visita payphone.app
  • 🔹📎 ¿Qué es la cajita de pagos Payphone?

  • 🔹🔑 Configuración del ambiente

  • 🔹🛠️ Insertar cajita de pagos Payphone

  • 🔹🧾 Consultar respuesta de transacción

  • 🔹🎞️ Video Tutorial

  • 🔹🔰 Pruebas y paso a producción

  • 🔹↩️ Reverso de Transacciones

  • 🔹🔧 Funcionalidades Adicionales

Cajita de Pagos Payphone

📎¿Qué es la cajita de pagos de Payphone?

La Cajita de Pagos de Payphone es una solución de pago digital diseñada para facilitar transacciones seguras y ágiles entre negocios y clientes. Esta herramienta permite aceptar pagos con tarjetas de crédito y débito (Visa y MasterCard) y con saldo Payphone, brindando una experiencia de pago versátil y práctica para cualquier tipo de negocio o proyecto en línea.

Desde e-commerce hasta freelancers o pequeños emprendimientos, cualquier negocio puede beneficiarse de esta solución.

Payphone transforma los cobros en un proceso fácil de implementar utilizando tecnologías como HTML y JavaScript, solicitudes POST, ideales para integrar en páginas web de forma rápida y sin complicaciones. ¡En pocos minutos puedes activar una pasarela de pago funcional y confiable!

¿Listo para comenzar?


Flujo de cajita de pagos 💳 Payphone

La Cajita de Pagos de Payphone es una solución ágil y segura para integrar pagos en línea directamente en tu sitio web. Con esta herramienta, tus clientes podrán pagar con tarjetas Visa, MasterCard o saldo Payphone, sin salir de tu página.

🚀¿Cómo funciona? La integración se realiza en dos fases clave:

1. 🧩 Preparación

En esta etapa se incorpora el botón de pago a tu sitio utilizando los recursos proporcionados por Payphone:

  1. Script JS, fuente CSS y etiqueta HTML.
  2. Permite que controles totalmente las acciones de pago, registrando los montos, impuestos y demás detalles de la transacción.
  3. Acepta pagos con tarjetas Visa, MasterCard, o saldo Payphone, brindando una experiencia de pago completa y flexible.

2. ✅ Confirmación

Una vez que el usuario completa el pago, Payphone redirige a tu sitio con parámetros en la URL que representan el resultado de la operación.

Tu sistema debe:

  1. Capturar los parámetros de respuesta.
  2. Realizar una solicitud POST a la API de Confirmación de Payphone.
  3. Obtener el detalle completo de la transacción (estado, monto, autorización, etc.)

🔙 Importante: Reverso Automático

Si tu sistema no ejecuta la fase de confirmación dentro de los primeros 5 minutos después del pago, Payphone reversará automáticamente la transacción. Esto se hace para proteger tanto al comercio como al cliente, evitando:

  • Cobros indebidos
  • Procesos incompletos por falta de datos
  • Conflictos o reclamos por parte del cliente

📖 En resumen: Si no confirmas el pago, Payphone lo cancela automáticamente, ya que no puede garantizar que el comercio haya registrado correctamente la transacción.


⚠️ Consideraciones previas:

Antes de comenzar con la implementación de la Cajita de Pagos de Payphone, asegúrate de cumplir con los siguientes requisitos técnicos y administrativos:


🌐 Plataforma

  • La Cajita de Pagos está diseñada exclusivamente para entornos WEB. No está disponible para aplicaciones móviles directamente.

🔒 Dominio y entorno seguro

  • Es indispensable contar con un dominio que tenga un certificado SSL (https://) válido para producción.
  • Para fines de prueba o desarrollo local, puedes utilizar http://localhost sin necesidad de certificado SSL.
  • Importante: La Cajita de Pagos está vinculada directamente al dominio configurado en tu cuenta Payphone.
  • Esto significa que solo funcionará en ese dominio específico. Si se intenta ejecutar desde otro dominio no autorizado, se mostrará un error de autorización y el proceso de pago no podrá completarse.

🏢 Cuenta en Payphone Business

  • Debes tener una cuenta activa en Payphone Business.
  • Si aún no la tienes, puedes registrarte en: Payphone Business

👨💻 Usuario con rol de Desarrollador

  • Dentro de tu cuenta Payphone Business, deberás crear un usuario con el rol de Desarrollador.
  • Este usuario tendrá acceso a las configuraciones técnicas y a la generación de credenciales para integración.

💻 Entorno de desarrollo

  • Asegúrate de contar con un entorno de desarrollo funcional, incluyendo:
    • Editor de código (VSCode, WebStorm, etc.)
    • Navegador actualizado
    • Herramientas de prueba como Postman, Insomnia o cURL
    • Conocimientos básicos de HTML, JavaScript y consumo de APIs REST

🔑 Obtención de credenciales

  • Desde la plataforma para desarrolladores de Payphone, deberás:
    • Crear una nueva configuración de aplicación.
    • Obtener las credenciales necesarias para la integración: TOKEN de autenticación (Bearer Token) y STOREID asociado a tu comercio

Próximos pasos

En las siguientes secciones te guiaremos paso a paso para implementar correctamente cada una de estas fases, con ejemplos prácticos y buenas prácticas.

🔑Configuración del Ambiente y Obtención de Credenciales

¡Prepara tu plataforma para recibir pagos de forma segura, fácil y eficiente con Payphone! 🛒💳 Sigue estos pasos y empieza a procesar transacciones en minutos:

🚀 Lo primero es configurar tu ambiente

Para que Payphone funcione correctamente, necesitas establecer una conexión segura entre tu sistema y nuestra plataforma.

Esto incluye obtener dos credenciales clave:

Token y StoreID


🛠️ ¿Cómo hacerlo?

  1. Configura tu API. Desde tu cuenta de Payphone Developer asegúrate de haber creado una aplicación de tipo: "WEB"
  2. Al elegir aplicación de tipo "WEB", se requerirá completar dos campos nuevos: Dominio Web y URL de Respuesta.
  3. Obtén tus credenciales. Estos datos son esenciales para autenticarte con Payphone. Encuéntralos al configurar tu aplicación.
  4. Establece tu entorno de desarrollo y pruebas. Esto te permitirá realizar simulaciones antes de pasar a la producción.

🎯 ¿Por qué es importante?

  1. Seguridad: Tus transacciones estarán encriptadas y protegidas contra accesos no autorizados.
  2. Personalización: Adapta los métodos de pago según las necesidades de tu negocio.
  3. Funcionalidad: Garantiza que los pagos se procesen correctamente.


✨ ¡Comienza ahora!

Haz clic en el siguiente botón, sigue las instrucciones para obtener tus credenciales:


📑 Configuración de Ambiente y Obtención de Credenciales


⚠️NOTA:

👉 Sin esta configuración, no podrás procesar pagos a través de nuestra plataforma.

🛠️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:

Montos Con Impuestos
Montos Sin Impuestos
Montos Mixtos
<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.

Nombre

Descripción

Tipo de Dato

Opcional

token

Credencial que se genera en la configuración de Payphone Developer.

String

❌ No

amount

Valor total de la factura a cobrar, es la suma de amountWithTax, amountWithoutTax, Tax, service y tip.

Int

❌ No

amountWithoutTax

Monto que no está sujeto a impuestos.

Int

❌ No

amountWithTax

Monto que incluye el valor sujeto a impuestos, excluyendo el propio impuesto.

Int

✅ Sí

tax

Monto del impuesto aplicado a la transacción.

Int

✅ Sí

service

Monto asociado al servicio proporcionado.

Int

✅ Sí

tip

Monto de la propina otorgada por el cliente.

Int

✅ Sí

currency

Código de moneda ISO 4217. (ej:USD)

String

✅ Sí

clientTransactionId

Identificador único asignado por el comercio a cada transacción para su seguimiento. Máximo 50 caracteres

String

❌ No

storeId

Identificador de la sucursal que efectúa el cobro (se obtiene en Payphone Developer).

String

✅ Sí

reference

Motivo o referencia específica del pago. Máximo 100 caracteres

String

✅ Sí

phoneNumber

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

String

✅ Sí

email

Correo electrónico del titular; se solicitará si no se proporciona.

String

✅ Sí

documentId

Número de identificación del titular; se solicitará si no se proporciona.

String

✅ Sí

identificationType

Tipo de identificación:
*Cédula: 1
*RUC: 2
*Pasaporte: 3
Por defecto 1.

Int

✅ Sí

lang

Idioma de Formulario:
inglés (en),
español (es).
Por defecto en español.

String

✅ Sí

defaultMethod

El método por defecto a mostrar:
*Tarjeta = "card"
*Payphone = "payphone"

String

✅ Sí

timeZone

Zona horaria, (ej: -5)

Int

✅ Sí

lat

latitud en formato decimal: -1.831239

String

✅ Sí

lng

longitud en formato decimal: -78.183406

String

✅ Sí

🛑 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 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.

🧾Consultar respuesta de la transacción

Una vez que el usuario completa el pago, será redirigido automáticamente a la URL de respuesta que hayas configurado previamente en la plataforma de Payphone.

Esta URL incluirá dos parámetros esenciales en la cadena:

  • id Número entero que representa el identificador único de la transacción generado por Payphone.
  • clientTransactionId Cadena de texto definida como identificador unico por tu plataforma al iniciar el pago.

Es crucial capturar estos parámetros para poder realizar una solicitud POST al método Confirm.

🔸 Ejemplo en PHP para obtener los parámetros de la URL:

$id = isset($_GET["id"])?$_GET["id"]:0;
$clientTransactionId = isset($_GET["clientTransactionId"])?$_GET["clientTransactionId"]:"";
✔️Confirmar el Estado de la Transacción API Buttom/Confirm :

Para verificar si una transacción fue aprobada, cancelada o fallida, debes realizar una solicitud al endpoint de confirmación.

Esto te permitirá mostrar un mensaje claro al usuario sobre el resultado.

🔗Endpoint del API Confirm

https://pay.payphonetodoesposible.com/api/button/V2/Confirm

📦 Cuerpo de la solicitud (JSON):

El cuerpo de la solicitud debe ser un objeto JSON que contenga los siguientes parámetros, los cuales son los valores que se recibió de la URL de respuesta:

{
  "id": 0,
  "clientTxId": "string"
}

🔐 Es fundamental incluir las siguientes cabeceras en la solicitud:

  • Authorization: bearer TU_TOKEN (Esta cabecera debe contener el token de autenticación de tu aplicación, precedido por la palabra “Bearer”. Este token es el mismo que utilizaste al preparar la transacción inicialmente).
  • Content-type: application/json (Indica que el formato de los datos enviados en el cuerpo de la solicitud es JSON).
📬Respuesta satisfactoria de solicitud POST

Si la solicitud es correcta, recibirás un objeto JSON con el detalle de la transacción. Los parámetros recibidos son:

{
    "email": "aloy@mail.com",
    "cardType": "Credit",
    "bin": "530219",
    "lastDigits": "XX17",
    "deferredCode": "00000000",
    "deferred": false,
    "cardBrandCode": "51",
    "cardBrand": "Mastercard Produbanco/Promerica",
    "amount": 315,
    "clientTransactionId": "ID_UNICO_X_TRANSACCION-001",
    "phoneNumber": "593999999999",
    "statusCode": 3,
    "transactionStatus": "Approved",
    "authorizationCode": "W23178284",
    "message": null,
    "messageCode": 0,
    "transactionId": 23178284,
    "document": "1234567890",
    "currency": "USD",
    "optionalParameter3": "Descripción Extra",
    "optionalParameter4": "ELISABETH SOBECK",
    "storeName": "Tienda Payphone",
    "date": "2023-10-10T11:57:26.367",
    "regionIso": "EC",
    "transactionType": "Classic",
    "reference": "Pago por venta Fact#001"
}
📝Descripción de parámetros de respuesta

Una vez la llamada es satisfactoria obtendrás un JSON con los siguientes parámetros:

Nombre

Descripción

statusCode

Código de estado de la transacción.
2 = Cancelado.
3 = Aprobada

transactionStatus

Estado de la transacción (Approved o Canceled).

clientTransactionId

Identificador de transacción que enviaste en la petición.

authorizationCode

Código de autorización bancario.

transactionId

Identificador de transacción asignado por Payphone.

email

El correo electrónico registrado en el formulario para el pago.

phoneNumber

Número de teléfono registrado en el formulario para el pago.

document

Número de cédula registrado en el formulario para el pago.

amount

Monto total pagado.

cardType

Tipo de tarjeta utilizada (crédito o débito).

cardBrandCode

Código de la marca de la tarjeta.

cardBrand

Marca de la tarjeta. VISA o Mastercard y Banco Emisor

bin

Primeros 6 dígitos de la tarjeta utilizada.

lastDigits

Últimos dígitos de la tarjeta utilizada.

deferredCode

Código de diferido empleado por el usuario.

deferredMessage

Mensaje del diferido.

deferred

Indica si se usó un diferido (booleano).

message

Mesaje de error, si corresponde

messageCode

Código de mensaje.

currency

Moneda utilizada para el pago.

reference

Motivo de la transacción

optionalParameter3

Parámetro opcional

optionalParameter4

Nombre del titular si el pago es con tarjeta

storeName

Nombre de la tienda que cobro

date

Fecha de cobro en formato ISO 8601

regionIso

Códigos de país en ISO 3166-1

transactionType

Tipo de Transacción

📬Respuesta con error de solicitud POST

Si la solicitud contiene algún error, recibirás un objeto JSON con el detalle del error. Los parámetros recibidos son:

{
    "message": "La transacción no existe, verifique que el identificador enviado sea correcto.",
    "errorCode": 20
}
🔙 Importante Recordar: Reverso Automático

Si tu sistema no ejecuta la fase de confirmación dentro de los primeros 5 minutos después del pago, Payphone reversará automáticamente la transacción. Esto se hace para proteger tanto al comercio como al cliente, evitando:

  • Cobros indebidos
  • Procesos incompletos por falta de datos
  • Conflictos o reclamos por parte del cliente

📖 En resumen: Si no confirmas el pago, Payphone lo cancela automáticamente, ya que no puede garantizar que el comercio haya registrado correctamente la transacción.

🧱 Ejemplo de Implementación API Buttom/Confirm

A continuación, se presenta varios ejemplos de cómo realizar solicitudes POST:

PHP
JQUERY
FETCH
<?php
    //Obtener parametros enviados por payphone de la URL de respuesta
    $id = isset($_GET["id"])?$_GET["id"]:0;
    $clientTxId = isset($_GET["clientTransactionId"])?$_GET["clientTransactionId"]:"";

    //Preparar cabecera para la solicitud
    $headers[] = 'Authorization: Bearer your_token' ;//CREDENCIALES DE CONFIGURACION
    $headers[] = 'Content-Type: application/json' ;//TIPO DE APLICACION 

    //Preparar objeto JSON para solicitud
    $data = array(
        "id" => (int)$id,
        "clientTxId" => $clientTxId 
    );
    $objetoJSON = json_encode($data);

    //Iniciar solicitud curl: POST 
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, "https://pay.payphonetodoesposible.com/api/button/V2/Confirm");
    curl_setopt($curl, CURLOPT_POST, 1);

    curl_setopt($curl, CURLOPT_POSTFIELDS, $objetoJSON);    
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    //Respuesta en formato JSON
    $curl_response = curl_exec($curl);
    //Finaliza solicitud curl: POST
    curl_close($curl);


    //Mostrar Resultado en Pantalla
    echo "<h1>Prueba Confirmacion de Transaccion</h1> <br>";

    $result= json_decode($curl_response);
    echo "Respuesta : <pre>".json_encode($result,JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT )."</pre>";
?>
<html lang="es">
    <head>
        <meta charset="utf-8">
        <title>Confirmacion con jQuery</title>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>   
        <script>
            //---------Funcion que obtiene parametros de la url---------//
            function getQueryVariable(variable) {
                var query = window.location.search.substring(1);
                var vars = query.split("&");
                for (var i=0; i < vars.length; i++) {
                    var pair = vars[i].split("=");
                    if(pair[0] == variable) {
                        return pair[1];
                    }
                }
                return false;
            } 

            var id=getQueryVariable('id');
            var clientTxId=getQueryVariable('clientTransactionId');

            $(document).ready(function() {
                $.ajax({
                    url: "https://pay.payphonetodoesposible.com/api/button/V2/Confirm",
                    type: "POST",
                    headers: {
                    "Content-Type": "application/json",
                    "Authorization": "Bearer your_token"
                    },
                    data: JSON.stringify({ 
                        "id": id,
                        "clientTxId": clientTxId
                    }),
                    success: function(response) {
                        $("#resultado").html(
                            "Respuesta : <pre>" + JSON.stringify(response, null, 2) + "</pre>"
                        );
                    },
                    error: function(error) {
                        $("#resultado").html(
                            "Error en la solicitud : <pre>" + JSON.stringify(error, null, 2) + "</pre>"
                        );
                    }
                });
            });
        </script>
    </head>    
    <body>
        <h1>Ejemplo de Solicitud POST con jQuery</h1>
        <div id="resultado"></div>
    
    </body>
</html>
<html lang="es">
    <head>
        <meta charset="utf-8">
        <title>Confirmacion con Fetch</title> 
        <script>
            //---------Funcion que obtiene parametros de la url---------//
            function getQueryVariable(variable) {
                var query = window.location.search.substring(1);
                var vars = query.split("&");
                for (var i=0; i < vars.length; i++) {
                    var pair = vars[i].split("=");
                    if(pair[0] == variable) {
                        return pair[1];
                    }
                }
                return "0";
            } 

            const id=getQueryVariable('id');
            const clientTxId=getQueryVariable('clientTransactionId');

            const  headers = {
                "Content-Type": "application/json",
                "Authorization": "Bearer your_token",
                "Referer": document.referrer
            };

            const bodyJSON = { 
                "id": id,
                "clientTxId": clientTxId
            };

            const  url = "https://pay.payphonetodoesposible.com/api/button/V2/Confirm";

            fetch(url, {
                method: "POST",
                headers: headers,
                body: JSON.stringify(bodyJSON)
            })
            .then((res) => res.json())
            .catch((error) => {
                // Creamos la etiqueta <pre> que contiene el error
                const jsonResult = document.createElement("pre");
                jsonResult.textContent = JSON.stringify(error, null, 2);

                // Agregar etiqueta <pre> al <div>
                const container = document.createElement("div");
                container.appendChild(jsonResult);

                // Agregar la respuesta al body del documento o a un contenedor específico
                document.body.appendChild(container);
            })
            .then((data) => {

                // Creamos las etiquetas <a>
                const jsonResult = document.createElement("pre");
                jsonResult.textContent = JSON.stringify(data, null, 2);

                // Mostrar los enlaces en el documento con un salto de línea entre ellos
                const container = document.createElement("div");
                container.appendChild(jsonResult);

                // Agregar los enlaces al body del documento o a un contenedor específico
                document.body.appendChild(container);
            });  
        </script>
    </head>    
    <body>
        <h1>Confirmacion de Transaccion con Fetch</h1>   
    </body>
</html>

¡Listo! Si llegaste hasta aquí, ya tienes la lógica principal implementada. En la siguiente sección del manual podrás ver cómo hacer pruebas con datos simulados y pasar a producción.

🎞️Video Tutorial

Aprende a integrar la Cajita de Pago de Payphone en minutos con nuestro video explicativo.

🔰Pruebas y paso a producción

En Payphone, tienes el control total de tu integración: tú decides cuándo probar y cuándo lanzar. No necesitas pasar por procesos de certificación, ni depender de terceros para poner tu aplicación en línea. Solo integras, pruebas y lanzas. Así de simple.

Payphone pone a tu disposición dos entornos listos para usar:


1. 🧪 Entorno de PRUEBAS

Espacio seguro y controlado para el desarrollo, integración y validación de tu aplicación. Aquí puedes realizar todas las pruebas necesarias sin afectar a usuarios reales ni realizar cobros reales.

  • Todas las transacciones se aprueban.
  • No se conecta con entidades bancarias.
  • Puedes usar datos reales (sin cobro) o datos ficticios válidos.
  • Compatible con herramientas como Postman o curl para pruebas automatizadas.

Probadores en App Payphone

Invita usuarios personales de Payphone como “probadores” para simular pagos reales desde la app. Ideal para validar la experiencia completa del cliente.


2. 🖥️ Entorno de PRODUCCIÓN

Ambiente en el que tus usuarios finales realizarán pagos reales. Todas las transacciones aquí son efectivas y se procesan a través de la red bancaria.

  • El dinero se transfiere directamente a tu cuenta Payphone.
  • Todas las transacciones se reflejan en tiempo real.


📓 Información detallada

Consulta la guía detallada sobre cómo usar ambos entornos, con ejemplos, recomendaciones técnicas y configuraciones paso a paso:


📑Guia Entorno de Pruebas y Produccion


⚠️ Consideraciones importantes

  • Realiza pruebas exhaustivas antes de pasar a producción.
  • En entorno de producción, usa únicamente datos reales y verificados.
  • Utiliza herramientas de visualización:
    • En Pruebas: revisa transacciones en Payphone Developer > Probadores> Transacciones.
    • En Producción: consulta tu historial en Payphone Business > Ventas.
  • Nuestro sistema tiene estrictos protocolos de seguridad: asegúrate de cumplir con las normas para evitar rechazos o bloqueos.

Una vez que tu aplicación esté en producción, el proceso estará completo.
¡Felicidades por integrar cajita de pagos de Payphone!

↩️Reverso de Transacciones

Este proceso permite deshacer una transacción que ya ha sido procesada, devolviendo los fondos al cliente.

Para gestionar reverso o anulación de transacciones, es necesario contar con el transactionID o el clientTransactionID. Estos identificadores son cruciales para localizar y manipular la transacción específica.


🗂️ Casos de uso

El método de reverso es útil en diferentes situaciones:

  • Cuando se generó transacciones erróneas.
  • Cuando el cliente realiza solicitudes de reembolso.
  • Cuando su plataforma no puede confirmar el estado de la transacción.
  • Por razones de seguridad, cuando un pago necesita ser reversado.

↩️API Reverse y Reverso desde payphone business

Para obtener una explicación detallada sobre el proceso de reverso a través de la API o para realizar reversos directamente desde la plataforma Payphone Business, consulte nuestra documentación.


📑 GUIA DE REVERSO PAYPHONE


⚠️Consideraciones

Es crucial tener en cuenta la siguiente restricción temporal para los reversos de transacciones:

  • Los reversos solo pueden ejecutarse el mismo día de la transacción original.
  • El período de reversión está limitado hasta las 20:00 del día en que se realizó la transacción.

🔧Funcionalidades Adicionales

💳 Tokenización de Tarjetas con Payphone


La tokenización es una nueva funcionalidad de Payphone que permite a los comercios guardar de forma segura un identificador único (cardToken) asociado a la tarjeta de un cliente, sin almacenar directamente los datos sensibles de la tarjeta.

Este cardToken puede usarse para realizar pagos futuros de forma rápida y segura, sin necesidad de que el cliente vuelva a ingresar sus datos. Es una funcionalidad adicional del botón de pago o cajita de pagos de Payphone.


🔁 ¿Cómo funciona?

Primera Transacción:

  • El cliente realiza un pago usando el botón o cajita de Payphone.
  • Si el comercio está autorizado, Payphone genera un cardToken y lo devuelve junto a los parámetros de la transacción aprobada.

Transacciones siguientes:

  • El comercio utiliza el cardToken para realizar nuevos cobros al mismo cliente, sin solicitar nuevamente los datos de su tarjeta.
  • Payphone procesa estos pagos usando el token de manera segura.

💼 Casos de uso comunes

  • Plataformas de suscripción (cobros mensuales automáticos)
  • Pagos recurrentes (membresías, servicios por cuotas)
  • Compras frecuentes (e-commerce que ofrece "pago rápido")
  • Apps de delivery o transporte con usuarios registrados
  • Servicios bajo demanda (streaming, educación en línea)

📓 Información detallada

Consulta nuestra guía completa para desarrolladores sobre cómo implementar la tokenización usando nuestra API:


📑 GUIA DE TOKENIZACION PAYPHONE


📌 Importante:

  • Esta funcionalidad requiere autorización previa por parte de Payphone.
  • La tokenización de Payphone NO es un sistema de pagos recurrentes.
  • El servicio entrega los tokens de las tarjetas para que los comercios puedan implementar sus propios sistemas de recurrencia.
  • El token solo se genera si la transacción inicial es aprobada por la entidad emisora de la tarjeta.
  • La tokenización solo funciona para pagos directos con tarjetas de crédito o débito.
  • Debes contar con un sistema de gestión de usuarios activo y funcional.

➗Split de Pagos con Payphone


El Split de Pagos permite dividir un cobro entre varios usuarios Payphone al momento de realizar un pago. Esta función es ideal para plataformas o comercios que necesiten distribuir un pago entre distintos actores (por ejemplo, una empresa, un socio o un proveedor de servicios).

Esta funcionalidad está disponible a través de:

  • Botón de Pagos
  • Cajita de Pagos
  • Link de Pago por API

🔁 ¿Cómo funciona?

  • Se configura el servicio indicando el monto total, los datos de la transacción y los usuarios que recibirán un porcentaje del pago.
  • Se realiza la transacción a través del canal elegido.
  • Si la operación es aprobada y el comercio tiene el permiso, el monto se distribuye automáticamente según lo configurado.

💼 Casos de uso comunes

  • Marketplaces o Aplicaciones de Venta Multiactor: Ideal para negocios como restaurantes, servicios de delivery o compañías de transporte (como taxis), donde un cliente paga y los fondos se reparten entre el establecimiento, el repartidor y la empresa que aplica comisiones.
  • Sistemas de Recaudación: Permite dividir pagos entre un comercio principal y un beneficiario que cobra una comisión.

📓 Información detallada

Para una guía paso a paso sobre cómo integrar el Split de Pagos mediante API, consulta nuestra documentación oficial:


📑 GUIA DE SPLIT DE PAGOS PAYPHONE


📌 Importante:

  • Esta funcionalidad requiere autorización previa por parte de Payphone.
  • El valor a dividir no puede superar el total cobrado (ten en cuenta la comisión del 5.75% por pagos con tarjeta).
  • Si el monto dividido supera el valor cobrado, se usará el saldo en la wallet del comercio para cubrir la diferencia.
  • Al hacer una dispersión inmediata, el saldo se transfiere de forma definitiva. Si necesitas hacer un reverso, deberás gestionar manualmente el reembolso con cada usuario receptor.
Videos tutorialesPolíticas de privacidadTérminos y condiciones
Copyright © 2024 Payphone | Todos los derechos reservados | Términos y condiciones