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 split de pagos?

  • 🔹🛡️ Proceso de Autorización

  • 🔹🛠️ Implementación de split

  • 🔹📈 Visualizar transacciones con Split

  • 🔹🔰 Pruebas y paso a producción

Split de Pagos Payphone

📎¿Qué es split de pagos?

Un split de pagos, también conocido como pago dividido, es una funcionalidad que permite dividir el monto de un producto o servicio entre varios usuarios Payphone al momento de realizar el pago. En lugar de que un solo usuario reciba el valor del pago, el split de pagos facilita la distribución equitativa del monto entre los participantes.

La función de split de pagos se puede usar en los servicios:

  1. Botón de Pagos
  2. Cajita de Pagos
  3. Link de Pago

🔄Flujo de split

  1. Se configura cualquiera de los servicios mencionados se indica el monto a cobrar, detalles de la transacción y los actores en los cuales se debe dividir el monto. (Todos deben ser parte de la red Payphone)
  2. Se ejecuta una transacción mediante el servicio seleccionado (Botón de pago por redirección, cajita de pagos o link de pagos).
  3. Si el establecimiento cuenta con el permiso, y la transacción es aprobada el pago se dividirá de acuerdo con las configuraciones indicadas.

🛍️Casos de Uso

  1. Una app de ventas o Marketplace (restaurantes, delivery, taxis), donde se deba cobrar a la tarjeta del cliente y dividir el pago en varios actores. (Restaurante, repartidor o empresa que genere comisiones).
  2. Un sistema de recaudación donde un porcentaje de la compra vaya a un comercio y el otro al que cobra la comisión.

⚠️Consideraciones Importantes: ¡Puntos Clave a Tener en Cuenta!

💰Monto a Dividir

  1. El valor que se dividirá entre usuarios Payphone no debe sobrepasar el monto total a cobrar y se debe tener en cuenta el valor de comisión del 5.75% que se descuenta al pagar con tarjeta.
  2. Si al dividir el pago entre usuarios Payphone se supera el valor cobrado se usará el saldo disponible en la wallet del comercio.

🏪Permiso por Tienda

  1. La funcionalidad de split de pagos se habilita bajo una solicitud a nuestros agentes comerciales.
  2. Split de pagos será habilitada a una tienda específica de Payphone Business, si requiere habilitar a más tiendas se debe indicarse en la solicitud de activación.

🕒Tipo de Split

  1. Split inmediato: los montos son entregado de forma inmediata a cada usuario luego de cada pago de un cliente.
  2. Split al dia siguiente: los montos son entregado a cada usuario al dia siguiente de cada pago de un cliente.

✅Servicio Activo y Configurado

  1. Tu botón, cajita o link de pago debe estar correctamente configurado y operativo.
  2. Payphone no se hace responsable por problemas derivados de una mala configuración del botón de pago.

🔁 Reverso

  1. Split Inmediato:
    • El dinero ya no estará en tu cuenta, por lo que no se pueden hacer reversos automáticamente. Solo puedes recuperar el dinero si los usuarios involucrados te lo devuelven manualmente.
    • Si se realiza el reverso de una dispersión inmediata el monto saldrá del saldo disponible de la wallet del comercio.
  2. Split al día siguiente:
    • ¡El saldo total estará en tu cuenta y podrás hacer reversos con las restricciones habituales!
    • ¡Fondos Bloqueados! Si eliges la división al día siguiente, ese saldo estará bloqueado temporalmente. ¡Sin retiros ni transacciones con ese dinero hasta el día siguiente! 🚫

🛡️Proceso de Autorización para Split de Pagos

El acceso al servicio de Split de Pagos Payphone requiere una autorización previa. A continuación, se detalla el proceso:

✉️ Solicitud de Autorización:

Para iniciar el proceso, el comercio debe enviar un correo electrónico a nuestra area comercial de Payphone con la siguiente información:

📨 Correo electrónico de contacto: Las solicitudes pueden enviarse a requests.docs@payphone.app

  1. Asunto: Activación de la funcionalidad: Split de Pagos
  2. Identificador del comercio: RUC, Cédula de Identidad
  3. Nombre del comercio
  4. Giro de Negocio: la actividad o conjunto de actividades principales que realiza la empresa para generar ingresos.
  5. Motivo detallado de la solicitud: Explicar el uso que se le dará al servicio y los beneficios que aportará al negocio.
  6. Información de contacto del solicitante: Nombre completo, número de teléfono y correo electrónico.
🔍Revisión y Evaluación por el Agente Comercial:

El agente comercial de Payphone revisará cuidadosamente la solicitud, analizando los siguientes aspectos:

  1. Viabilidad comercial: Se evaluará si el servicio solicitado se alinea con la estrategia y los objetivos de Payphone.
  2. Riesgos: Se identificarán y evaluarán los posibles riesgos asociados con la activación del servicio, como riesgos de seguridad o fraude.
  3. Investigación adicional: El agente comercial podrá solicitar información adicional al cliente si es necesario para completar el análisis.
  4. Reuniones: El agente comercial podrá programar reuniones con el cliente para discutir la solicitud en detalle y aclarar cualquier duda.

🏢Validación del Comercio:

Payphone realizará una verificación exhaustiva de la información del comercio, incluyendo:

  1. Verificación de identidad: Se verificará la identidad del comercio y sus representantes.
  2. Datos de contacto: Se validarán los datos de contacto proporcionados.
  3. Actividad comercial: Se analizará la actividad comercial del comercio.
  4. Evaluación de riesgos: Se evaluarán los riesgos asociados al comercio, como riesgo crediticio o riesgo de fraude.
  5. Cumplimiento normativo: Se verificará que el comercio cumple con todas las regulaciones y normativas aplicables.
  6. Firma de acuerdos: Se firmarán acuerdos de responsabilidad entre Payphone y el comercio para formalizar la relación.

📏Políticas de Seguridad:

De acuerdo con las políticas de seguridad de Payphone, se requiere que el comercio mantenga el 10% del saldo obtenido a través de la plataforma durante un período de 6 meses. Este plazo permite verificar la ausencia de transacciones no reconocidas o pagos no autorizados.

✅Aprobación de la Solicitud:
  1. Autorización: Una vez que el comercio haya sido validado y se hayan obtenido las aprobaciones internas, el agente comercial autorizará el uso del servicio de Split de Pagos.
  2. Activación: El área técnica de Payphone procederá a activar el servicio para el cliente.
  3. Notificación: Se notificará al cliente que el servicio ha sido activado y se le proporcionarán las instrucciones de uso.
📡Seguimiento y Monitoreo:
  1. Monitoreo continuo: Payphone realizará un seguimiento continuo del uso del servicio para asegurar su correcto funcionamiento y detectar posibles problemas.
  2. Soporte: Se brindará soporte técnico al cliente en caso de cualquier inconveniente.

🛠️Implementación de split

¡Divide pagos automáticamente entre varios usuarios de forma segura y eficiente!

⚙️Implementación de servicios

Para implementar el Split de pagos debes seguir los siguientes pasos:

1️⃣ Integra uno de los servicios Payphone:

Integra correctamente el Botón de Pagos 🖱️, la Cajita de Pagos 📦 o el Link de Pagos 🔗 a través de nuestra API.

¡Sigue nuestras guías al pie de la letra! Esto incluye configurar tu aplicación en Payphone Developer, preparar la transacción y confirmarla.


Guia de botón de pagos
Guia de cajita de pagos
Guia de link de pagos


2️⃣ Agrega el parámetro transferTo

Al método seleccionado se debe agregar un nuevo parametro llamado "transferTo", Este parámetro es un objeto JSON 🔒 encriptado con AES 256 CBC sin vector de inicialización.

El objeto JSON tiene la siguiente estructura:

[
    { 
        "Identifier": "+593999999999",
        "Type": 4,
        "Amount":"100" 
    },
    { 
        "Identifier": "0123456789001",
        "Type": 3,
        "Amount":"100"
    }
]

📄Descripción de los campos :

Type: es un valor entero

  1. 3 : para indicar q el campo Identifier recibe como valor un número de identificación del comercio
  2. 4 : para indicar q el campo Identifier recibe como valor un número de teléfono

Identifier: identificador de usuario de Payphone Business o Payphone Personal

  1. Número de Identificación: en este campo se indica el identificador de un usuario de Payphone Business, puede ser RUC(019041XXXX001) o CI (019041XXXX) o el identificador con el cual el comercio se registro.
  2. Número de teléfono: en este campo se indica el identificador de un usuario de Payphone Personal.
    Formato: Símbolo(+) + Código País + número telefónico. Ej. +59398XXXXXXX

Amount: es el valor que se pagará al actor registrado.

  1. Número Entero: Los valores monetarios deben expresarse en enteros. Es decir, se multiplica el valor en dólares por 100
  2. Límite de monto: el valor que se pagará al actor registrado no debe pasar el monto total a cobrar y se debe tener en cuenta el valor de comisión del 5.75% que se descuenta al pagar con tarjeta.
    Si al dividir el pago entre usuarios Payphone se supera el valor cobrado se usará el saldo disponible en la wallet del comercio.
🔒Encriptación de objeto JSON:

Para utilizar el servicio de split de pagos es necesario que el valor del campo transferTo esté encriptado para posteriormente enviarlo en la solicitud.

Utiliza el algoritmo de encriptación AES 256 CBC sin vector de inicialización para cifrar el objeto JSON antes de enviarlo en la solicitud.

  1. Clave de Encriptación: Consulta la clave de encriptación específica en la configuración de Payphone Developer.

🧱 Ejemplo encriptación:

Javascript
PHP
<!DOCTYPE html>
<html lang="es">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
    <title>Encriptacion AES 256 CBC</title>  
    <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js"></script>
</head>
<body>
    <h1>Encriptacion AES 256 CBC sin vector de inicializacion</h1>
    <div><a>Objeto JSON: <pre id="objetJSON"></pre></a></div>
    <div><a>Valor Encriptado : <strong id="result"></strong></a></div>       

    <script>
         //funcion que encripta en AES 256 CBC sin vector de inicializacion
         function encrypted_aes(objet) {
                const key = CryptoJS.enc.Utf8.parse('your_coding_password');
                const iv = CryptoJS.enc.Utf8.parse('');
                const encrypted = CryptoJS.AES.encrypt(objet, key,{ iv: iv });
                const result_aes = encrypted.ciphertext.toString(CryptoJS.enc.Base64);
                return result_aes;
            }        
        let  objetJSON=[
            { 
                "Identifier":"+593999999999",
                "Type": 4,
                "Amount": 500 
            },
            { 
                "Identifier": "0123456789001",
                "Type": 3,
                "Amount": 442
            }
        ];
        //ejecutar funcion de encriptacion para obtener transferTo
        let myTransferTo=encrypted_aes(JSON.stringify(objetJSON)); 
        //se muestra resultados
        document.getElementById("objetJSON").innerHTML=JSON.stringify(objetJSON, null, 2);
        document.getElementById("result").innerHTML=myTransferTo;        
        console.log("Valor Encriptado : "+myTransferTo);
    </script>
</body>
</html>
<?php
    //funcion que encripta en AES 256 CBC sin vector de inicializacion
    function encrypt($object) {
        error_reporting(E_ERROR | E_PARSE | E_NOTICE);
        $encrypted = base64_encode(openssl_encrypt($object,'AES-256-CBC',"your-coding-password",OPENSSL_RAW_DATA,""));   
        error_reporting(E_ALL);
        return $encrypted;
    }
    //Objeto JSON que contiene los usuarios y los montos a dividir
    $objetJSON=array(
        array( 
            "Identifier"=> "+593984112233",
            "Type"=> 4,
            "Amount"=>500 
        ),
        array( 
            "Identifier"=> "0123456789001",
            "Type"=> 3,
            "Amount"=>442
        )
    );
    //ejecutar funcion de encriptacion para obtener transferTo
    $transferTo=encrypt(json_encode($objetJSON));  
    //se muestra resultados
    echo "<h1>Encriptacion AES 256 CBC sin vector de inicializacion</h1>";
    echo "Respuesta : <pre>".json_encode($objetJSON,JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT )."</pre>";    
    echo "<a>Valor Encriptado : <strong>$transferTo</strong></a>";

?>
🚀Generación de transacciones con Split:

Una vez implementados estos pasos, el comercio podrá generar transacciones utilizando la división de montos con el parámetro transferTo, para esto se debe realizar una solicitud HTTP POST normal a cualquiera de nuestros servicios pero esta vez cuenta con la funcionalidad de split.

Las url de los endpoint y cabeceras necesarias serán los mismo que se especifican en la documentación de cada servicio.
Lo único que cambiará es la configuración del cuerpo de la solicitud.

Estructura del Cuerpo de la Solicitud:

El cuerpo de la solicitud debe ser un objeto JSON similar al que estas utilizando en el servicio seleccionado de Payphone donde se indica montos y demás información para la transacción, pero se debe agregar el nuevo parámetro transferTo como se muestra en el ejemplo a continuación:

Para Boton
Para Cajita
Para Link
{ 
    "amount": 315, 
    "amountWithoutTax": 200, 
    "amountWithTax": 100,  
    "tax": 15,  
    "clientTransactionId": "ID_UNICO_X_TRANSACCION-001",  
    "currency": "USD",  
    "storeId": "your_storeId",  
    "reference": "Pago con Boton",   
    "responseUrl":"https://tu-dominio.com/ConfirmacionPago",
    "transferTo": "{{JSON_encriptado}}"
}
<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", 	
                transferTo: "{{encriptado}}"
            }).render('pp-button');
        })
</script>
{ 
    "amount": 315, 
    "amountWithoutTax": 200, 
    "amountWithTax": 100,  
    "tax": 15,  
    "clientTransactionId": "ID_UNICO_X_TRANSACCION-001",  
    "currency": "USD",  
    "storeId": "your_storeId",  
    "reference": "Pago con API Link",   
    "transferTo": "{{JSON_encriptado}}"
}

Proceso de pago: Con esto solo queda seguir el proceso normal de pago.

  1. El cliente realice el pago normalmente desde uno de los servicios Payphone pero esta vez dispone con la funcionalidad de split de pagos.
  2. Si la transacción es aprobada, Payphone realiza el la división de los montos de acuerdo con las configuraciones indicadas.
🧱 Ejemplos de solicitudes POST con split de pagos

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

Boton
Cajita
Link
<?php
    //Funcion q ejecuta una solicitud http POST
    function curlPost($urlAPI, $headers,$body) {
        //Iniciar solicitud curl: POST 
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $urlAPI);
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $body);    
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        //Respuesta en formato JSON
        $curl_response = curl_exec($curl);
        //Finaliza solicitud curl: POST
        curl_close($curl);
        return json_decode($curl_response);
    }
    // funcion de encriptacion en AES 256 CBC sin vector de inicializacion
    function encrypt($objet) {
        error_reporting(E_ERROR | E_PARSE | E_NOTICE);
        $encrypted = base64_encode(openssl_encrypt($objet,'AES-256-CBC',"your_coding_password",OPENSSL_RAW_DATA,""));   
        error_reporting(E_ALL);
        return $encrypted;
    } 

    /*## Preparar credenciales como variables para la solicitud ##*/
    $token="your_token";
    $storeId="your_storeID";
    
    /*## Preparar Datos para la transaccion ##*/
    //Genera Dato Unico por transaccion 
    $clientTransactionID = substr((date("ymd-Hi-s").gettimeofday()["usec"]),0, 16);
    //monto total a cobrar
    $totalAmount=1000;   
    //valor dividir entre usuarios: monto total - 5.75% de comision. 
    //Ej: De $10 menos el porcentaje de comision, el valor que se podria dividir es $9.42
    $amountUser1=500;  //montos entregado a usuario 1
    $amountUser2=442;  //montos entregado a usuario 2
    //Objeto JSON que contiene los usuarios y los montos a dividir
    $objetJSON=array(
        array( 
            "Identifier"=> "+593999999999",
            "Type"=> 4,
            "Amount"=>$amountUser1 
        ),
        array( 
            "Identifier"=> "0123456789001",
            "Type"=> 3,
            "Amount"=>$amountUser2
        )
    );
    //ejecutar funcion de encriptacion para obtener transferTo
    $transferTo=encrypt(json_encode($objetJSON));    

    /*## Preparar informacion para la solicitud POST ##*/
    //URL del servicio payphone
    $url="https://pay.payphonetodoesposible.com/api/button/Prepare";
    //Preparar cabecera para la solicitud
    $headers[] = "Authorization: Bearer ".$token ;//CREDENCIALES DE CONFIGURACION
    $headers[] = "Content-Type: application/json" ;//TIPO DE APLICACION    
     
    //Preparar objeto JSON para solicitud
    $data = array(        
        "amount"=> $totalAmount, //monto total a cobrar, debe ser igual a la suma de los montos individuales 
        "amountWithoutTax"=> $totalAmount, //Monto que no está sujeto a impuestos. 
        //Identificador único asignado por el comercio a cada transacción para su seguimiento.
        "clientTransactionId"=> $clientTransactionID,  //
        "currency"=> "USD",  //Código de moneda ISO 4217. (ej:USD)
        "storeId"=> $storeId,  //Identificador de la tienda que efectúa el cobro
        "reference"=> "Pago con Boton",   //Motivo o referencia específica del pago.
        "responseUrl"=>"https://tu-dominio.com/ConfirmacionPago",
        "transferTo"=> $transferTo       
    );
    $bodyJSON = json_encode($data); //objeto de tipo JSON

    //realizar solicitud http POST
    $result=curlPost($url, $headers,$bodyJSON);

    //Mostrar Resultado en Pantalla
    echo "<h1>Prueba de Transaccion con split</h1> <br>";
    echo "Cuerpo Solicitud : <pre>".json_encode($data,JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT )."</pre>"; 
    echo "Valores a Dividir: <pre>".json_encode($objetJSON,JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT )."</pre>";    
    echo "Respuesta : <pre>".json_encode($result,JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT )."</pre>";
    echo "<br>";
    if(isset($result->payWithCard)){
        echo "PAGAR CON TARJETA : <a href='".$result->payWithCard."'>CLIC AQUI</a>";
    }
?>
<html lang="es">
    <head>
        <meta charset="utf-8">
        <title>Split con Cajita de pagos</title>            
        <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js"></script>
        <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>
        <h1>Split con Cajita de pagos</h1> 
        <div style="display: flex;"> 
            <div style="padding-right: 20px;border: 1px solid;">
                <a>Valor a Cobrar : <strong id="monto"></strong></a><br>
                <a>Valores a Dividir : <pre id="objetJSON"></pre></a>
            </div>
            <div>
                <a>PAGAR CON CAJITA</a><br>        
                <div id="pp-button"></div> 
            </div>
        </div>
        <script>
            
             //funcion que encripta en AES 256 CBC sin vector de inicializacion
            function encrypted_aes(objet) {
                const key = CryptoJS.enc.Utf8.parse('your_coding_password');
                const iv = CryptoJS.enc.Utf8.parse('');
                const encrypted = CryptoJS.AES.encrypt(objet, key,{ iv: iv });
                const result_aes = encrypted.ciphertext.toString(CryptoJS.enc.Base64);
                return result_aes;
            }        

            /*## Preparar credenciales como variables para la solicitud ##*/
            const myToken="your_token";
            const myStoreId="your_storeID";
            
            /*## Preparar Datos para la transaccion ##*/
            //Genera Dato Unico por transaccion 
            let fecha  = new Date();
            let myClientTransactionId=fecha.toISOString()+"-5";
            //monto total a cobrar
            let totalAmount=1000;   
            //valor dividir entre usuarios: monto total - 5.75% de comision. 
            //Ej: De $10 menos el porcentaje de comision, el valor que se podria dividir es $9.42
            let  amountUser1=500;  //montos entregado a usuario 1
            let  amountUser2=442;  //montos entregado a usuario 2
            //Objeto JSON que contiene los usuarios y los montos a dividir
            let  objetJSON=[
                { 
                    "Identifier":"+593999999999",
                    "Type": 4,
                    "Amount": amountUser1 
                },
                { 
                    "Identifier": "0123456789001",
                    "Type": 3,
                    "Amount": amountUser2
                }
            ];
            //ejecutar funcion de encriptacion para obtener transferTo
            let myTransferTo=encrypted_aes(JSON.stringify(objetJSON));  

            window.addEventListener('DOMContentLoaded',()=>{
                ppb = new PPaymentButtonBox({
                    token: myToken,	//credenciales de acceso, se genera en payphone developer
                    //Identificador único asignado por el comercio a cada transacción para su seguimiento.
                    clientTransactionId: myClientTransactionId, 	
                    amount: totalAmount, 	// Valor total de la factura a cobrar
                    amountWithoutTax: totalAmount, 	//Monto que no está sujeto a impuestos.
                    currency: "USD",	//Código de moneda ISO 4217. (ej:USD)
                    storeId: myStoreId, //Identificador único asignado a la transacción para su seguimiento.
                    reference:"Pago por venta Fact#001", 	//Motivo o referencia específica del pago. 
                    transferTo: myTransferTo
                }).render('pp-button');
            })         
            
            // Mostrar en pnatalla datos relevantes            
            document.getElementById("monto").innerHTML="$"+Math.round(totalAmount/100); //Monto a cobrar
            document.getElementById("objetJSON").innerHTML=JSON.stringify(objetJSON, null, 2); //montos a dividir
        </script> 
    </body>
</html>
<?php
    //Funcion q ejecuta una solicitud http POST
    function curlPost($urlAPI, $headers,$body) {
        //Iniciar solicitud curl: POST 
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $urlAPI);
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $body);    
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        //Respuesta en formato JSON
        $curl_response = curl_exec($curl);
        //Finaliza solicitud curl: POST
        curl_close($curl);
        return json_decode($curl_response);
    }
    // funcion de encriptacion en AES 256 CBC sin vector de inicializacion
    function encrypt($objet) {
        error_reporting(E_ERROR | E_PARSE | E_NOTICE);
        $encrypted = base64_encode(openssl_encrypt($objet,'AES-256-CBC',"your_coding_password",OPENSSL_RAW_DATA,""));   
        error_reporting(E_ALL);
        return $encrypted;
    } 

    /*## Preparar credenciales como variables para la solicitud ##*/
    $token="your_token";
    $storeId="your_storeID";
    
    /*## Preparar Datos para la transaccion ##*/
    //Genera Dato Unico por transaccion 
    $clientTransactionID = substr((date("ymd-Hi-s").gettimeofday()["usec"]),0, 15);
    //monto total a cobrar
    $totalAmount=1000;   
    //valor dividir entre usuarios: monto total - 5.75% de comision. 
    //Ej: De $10 menos el porcentaje de comision, el valor que se podria dividir es $9.42
    $amountUser1=500;  //montos entregado a usuario 1 : $5
    $amountUser2=442;  //montos entregado a usuario 2 : $4.42
    //Objeto JSON que contiene los usuarios y los montos a dividir
    $objetJSON=array(
        array( 
            "Identifier"=> "+593999999999",
            "Type"=> 4,
            "Amount"=>$amountUser1 
        ),
        array( 
            "Identifier"=> "0123456789001",
            "Type"=> 3,
            "Amount"=>$amountUser2
        )
    );
    //ejecutar funcion de encriptacion para obtener transferTo
    $transferTo=encrypt(json_encode($objetJSON));    

    /*## Preparar informacion para la solicitud POST ##*/
    //URL del servicio payphone
    $url="https://pay.payphonetodoesposible.com/api/Links";
    //Preparar cabecera para la solicitud
    $headers[] = "Authorization: Bearer ".$token ;//CREDENCIALES DE CONFIGURACION
    $headers[] = "Content-Type: application/json" ;//TIPO DE APLICACION    
     
    //Preparar objeto JSON para solicitud
    $data = array(        
        "amount"=> $totalAmount, //monto total a cobrar, debe ser igual a la suma de los montos individuales 
        "amountWithoutTax"=> $totalAmount, //Monto que no está sujeto a impuestos. 
        //Identificador único asignado por el comercio a cada transacción para su seguimiento.
        "clientTransactionId"=> $clientTransactionID,  //
        "currency"=> "USD",  //Código de moneda ISO 4217. (ej:USD)
        "storeId"=> $storeId,  //Identificador de la tienda que efectúa el cobro
        "reference"=> "Pago con Boton",   //Motivo o referencia específica del pago.
        "transferTo"=> $transferTo       
    );
    $bodyJSON = json_encode($data); //objeto de tipo JSON

    //realizar solicitud http POST
    $result=curlPost($url, $headers,$bodyJSON);

    //Mostrar Resultado en Pantalla
    echo "<h1>Prueba Link de pago con split</h1>";
    echo "Cuerpo Solicitud : <pre>".json_encode($data,JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT )."</pre>"; 
    echo "Valores a Dividir: <pre>".json_encode($objetJSON,JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT )."</pre>";
    if(is_string($result)){
        echo "<h3>Link creado</h3>"; 
        echo "<a>".$result."</a><br><br>"; 
        echo "<a href='$result' target='_blank'>PAGAR MEDIANTE LINK</a>";
    }else{
        echo "<pre>".json_encode($result,JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT )."</pre>";
    } 
?>

¡Recuerda la Confirmación! ✅

En el caso del Botón y la Cajita de Pagos, ¡no olvides realizar la confirmación de la transacción tal como se indica en la documentación!

¡Y eso es todo! Si has llegado a este punto, ¡felicidades! Tu integración está completada. En la siguiente sección, te explicaremos cómo visualizar las transacciones con split de pagos desde Payphone Business.

📈Visualizar transacciones con Split:

Para poder visualizar las transacciones que tienen la funcionalidad de split de pagos se deben seguir los siguientes pasos:

1️⃣ Ingresar a la plataforma de Payphone Business
  1. Accede a tu cuenta de Payphone Business con tu RUC o CI, correo y contraseña.
  2. Dirígete a la sección "Usuarios" y selecciona "Crear Usuario" o "Editar Usuario" (icono lápiz).
2️⃣ Crear usuario con rol "Administrador de Split de pago"
  1. Selecciona el ROL "Administrador de Split de pago".
  2. Con el usuario "Administrador de Split de pago" creado, podrás acceder al menú "Split de Pagos".
🔁 Cierra sesión y vuelve a ingresar en Payphone Business
  1. Cierra sesión e ingresa nuevamente a Payphone Business con el usuario con rol "Administrador de Split de pago".
  2. Escoge la tienda que tenga configurado "Split de pagos"
  3. Se mostrara el menú "Split de Pagos" en la sección Gestión de Saldo
📊Módulo de Split de pagos

En el módulo de Split de pagos se presenta una lista paginada de las transacciones realizadas con Split de pagos. Este módulo se presenta únicamente para las tiendas habilitadas con Split de pagos.

Lista de transacciones y filtros de Búsqueda

  1. Los ítems de la lista padre tienen la opción de desplegar una lista con las transacciones hijas.
  2. Los ítems de la lista hijas hacen referencia a la división del cobro entre los múltiples usuarios (comercios o personas).
  3. Se puede filtrar las transacciones por teléfono, estado, número de transacción, monto y fecha
  4. Los filtros de búsqueda se aplican a la transacción padre.

🔰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!

Videos tutorialesPolíticas de privacidadTérminos y condiciones
Copyright © 2024 Payphone | Todos los derechos reservados | Términos y condiciones