Nequi

Una integración pensada para ser implementada del lado del cliente,  a través de nuestro SDK podrás invocar un servicio  JS para el procesamiento de transacciones  con los usuarios del monedero virtual Nequi. Con este método, mantendrá siempre al usuario dentro de su sitio y controlará todas las respuestas en pantalla.

Prerrequisitos

CCLW
Llaves de conexión al API
Certificado SSL
TLS 1.3 o superior

Base URL de ambientes

Producción
https://secure.paguelofacil.com/
https://api.pfserver.net/
Pruebas
https://sandbox.paguelofacil.com/
https://api-sand.pfserver.net/

1. Incluye SDK en tu sitio

Debes incluir los scripts para poder utilizar nequi dentro de tu sitio web.


<head >
...
<script src="https://secure.paguelofacil.com/HostedFields/vendor/scripts/NEQ/PFScript.js"></script>
<script src="https://secure.paguelofacil.com/HostedFields/vendor/qr-code/qrcode.js"></script>
...
<head >

  

2. Muestra el código QR

Debes incluir una etiqueta div donde se mostrará el código QR de nequi dentro de tu sitio web.


<body>
....
<div id="nequiQR"></div>
.....
</body>

  

3. Añade script de configuración

Debes incluir el script que realizara el proceso de generación QR/Push y procesamiento de pago.


<script>
    //pasar la variable "true" para utilizar plataforma de prueba.
    pfNequi.useAsSandbox(true);

    var mockTest = false;
    if (mockTest) {
        var forceTest = new pfNequi.hostedFields();
        forceTest.dataMerchant.merchant = {
            id: 2,
            name: "Paguelo Facil S.A", //Nombre Comercial registrado en su cuenta.
            legalName: "Paguelo Facil S.A" //Nombre legal registrado en su cuenta.
        };
        forceTest.dataMerchant.service = {
            id: 2, //Credencial Provisto por Paguelofacil
            code: "HFD" //Constante por el tipo de integración
        };

        startMerchantForm(forceTest);
    } else {
        //Utilizar Nequi token y CCLW suministrado por Paguelofacil
        var nequi_key = "53D689FC54A44D1153D1873CA26D23"; //Nequi token
        var cclw = "18011D0B9623B253D689FC54A44D1153D1873CA26D23F1E1D90A8F5A6F8BA1B3"; //credenciales del comercio 
        pfNequi.openService(nequi_key, cclw)
            .then(function (merchantSetup) {
                startMerchantForm(merchantSetup);
            }, function (error) {
                console.log(error);
            });
    }

    function startMerchantForm(merchantSetup) {
        var paymentInfo = {
            amount: 1.0,
            description: "Test SDK Nequi",
            email: "alambrito@correo.com",
            phone: "+50767890540"
        };

        var sdk = merchantSetup.init(merchantSetup.dataMerchant, paymentInfo);
        var useQR = true; //utilizar variable "false" para utilizar modo push notifications
        if (useQR) {
            setTimeout(function () {
                sdk.generateQR().then(function (qr) {
                    console.log("qr", qr);
                    //Puede realizar su qr con una libreria propia o usar el JS (qrcode.js) y llamando a la funcion printQR
                    sdk.printQR("nequiQR");
                }, function (error) {
                    console.log("error", error);
                });
            }, 2000);
        } else {
            setTimeout(function () {
                //Envio de notificación a cuenta de nequi "67890540"
                sdk.sendPush("67890540").then(function (data) {
                    console.log("pushSend", data);
                }, function (error) {
                    console.log("error", error);
                });
            }, 2000);
        }

        //Valida el pago recursivamente y registra la TX
        var validPayment = function () {
            sdk.validPayment().then(function (data) {
                if (data) {
                    if (data.validated) {
                        if (data.txSuccess) {

                            //Debes obtener las variables de data.txSuccess y completar su pago
                            console.log("Registro de Pago existoso", data.txSuccess);
                            /**** ejemplo de respuesta
                            {"date":"2021-05-07T17:15:15","totalPay":"0.1","authStatus":"35","operationType":"AUTH_CAPTURE","returnUrl":"https://checkout.paguelofacil.com/pf/default-receipt/ND-HBK6HNWOM7J5","requestPayAmount":0.1,"type":"NEQUI","email":"alam_brito@decobre.com","codOper":"ND-HBK6HNWOM7J5","status":1,"messageSys":"PAGADO"} 
                            Fin ejemplo de respuesta****/

                        } else {

                            //Informe el usuario del error e indique volver a intentarlo
                            console.log("Pago Declinado", data.txError);
                        }
                    } else {
                        console.log("Reenvia", data);
                        setTimeout(function () {
                            validPayment();
                        }, 1000);
                    }
                }
            }, function (error) {
                console.log("error valid", error);
            });
        };
        
        


        setTimeout(function () {
            validPayment();
        }, 5000);
    }
</script>

  

4. Valida la respuesta

Debes validar correctamente el pago exitoso dentro de tu respuesta de transacción.


<script>
        ...
        var validPayment = function () {
            sdk.validPayment().then(function (data) {
                if (data) {
                    if (data.validated) {
                        if (data.txSuccess) {
                          if(data.txSuccess.status == 1){
                             //Scripts para pago aprobado
                          }
                        } else {
                           ....
                        }
                    } else {
                       ....
                    }
                }
            }, function (error) {
                ....
            });
        };
        ...
</script>

Cancela el pago del usuario

Sí no recibes una respuesta del pago en  un tiempo determinado, o el usuario cierra la ventana del navegador es posible cancelar la solicitud, de este modo cuando el usuario quiera pagar en app de Nequi se le informará que esta solicitud fue cancelada.


<script>
        ...
       //voidPayment(); cancela la solicitud de pago

        var voidPayment = function () {
            sdk.voidPayment().then(function (data) {

            }, function (error) {
            });
        };
        ...
</script>

¿Uso Push o QR?

Debes decidir si utilizar ambas formas (push y QR), o solo unas de ellas dependiendo de si tu web recibe mayor visita por dispositivos móviles o web

Recomendaciones

  • Informa a tu usuario en cada proceso.
  • Coloca una ayuda en caso de dudas.