JSPM

sdk-payway-ventasonline

1.1.1
    • ESM via JSPM
    • ES Module Entrypoint
    • Export Map
    • Keywords
    • License
    • Repository URL
    • TypeScript Types
    • README
    • Created
    • Published
    • Downloads 5
    • Score
      100M100P100Q40946F

    Package Exports

    • sdk-payway-ventasonline
    • sdk-payway-ventasonline/index.js

    This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (sdk-payway-ventasonline) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

    Readme

    Payway SDK NODEJS

    Modulo para conexión con gateway de pago Payway

    Introducción

    El flujo de una transacción a través de las sdks consta de dos pasos, la generación de un token de pago por parte del cliente y el procesamiento de pago por parte del comercio. Existen sdks específicas para realizar estas funciones en distintos lenguajes que se detallan a continuación:

    Alcance

    La sdk NODEJS provee soporte para su aplicación back-end, encargándose de la comunicación del comercio con la API Payway utilizando su API Key privada1 y el token de pago generado por el cliente.

    Para generar el token de pago, la aplicación cliente realizará con Payway a través de alguna de las siguentes sdks front-end:

    imagen de sdks

    Volver al inicio

    Diagrama de secuencia

    El flujo de una transacción a través de las sdks consta de dos pasos, a saber:

    sdk front-end: Se realiza una solicitud de token de pago con la Llave de Acceso pública (public API Key), enviando los datos sensibles de la tarjeta (PAN, mes y año de expiración, código de seguridad, titular, y tipo y número de documento) y obteniéndose como resultado un token que permitirá realizar la transacción posterior.

    sdk back-end: Se ejecuta el pago con la Llave de Acceso privada (private API Key), enviando el token generado en el Paso 1 más el identificador de la transacción a nivel comercio, el monto total, la moneda y la cantidad de cuotas.

    A continuación, se presenta un diagrama con el Flujo de un Pago.

    imagen de configuracion

    Volver al inicio

    Instalación

    Descargar la última versión del SDK desde el botón Download ZIP. Se debe incluirse la carpeta del SDK dentro del proyecto.

    Volver al inicio

    Versiones de NODEJS soportadas

    La versión implementada de la SDK, está testeada para las versiones 6.x de NODEJS.

    Volver al inicio

    Manual de Integración

    Se encuentra disponible la documentación Manual de Integración Payway para su consulta online, en este detalla el proceso de integración. En el mismo se explican los servicios y operaciones disponibles, con ejemplos de requerimientos y respuestas, aquí sólo se ejemplificará la forma de llamar a los distintos servicios utilizando la presente SDK.

    Ambientes

    El sdk NODEJS permite trabajar con los ambientes de Sandbox y Producción de Payway. El ambiente se debe definir al instanciar el SDK.

    var ambient = "developer";//valores posibles: "developer" o "production";
    var sdk = new sdkModulo.sdk(ambient, publicKey, privateKey);
    

    Volver al inicio

    Uso

    Inicializar la clase correspondiente al conector.

    El Sdk para NODEJS permite trabajar con los ambientes de desarrollo y de producción de Payway. El ambiente se debe instanciar como se indica a continuación. Instanciación de la clase Decidir\Connector La misma recibe como parámetros la public key o private key provisto por Payway para el comercio y el ambiente en que se trabajará.

    var publicKey = "b192e4cb99564b84bf5db5550112adea";
    var privateKey = "566f2c897b5e4bfaa0ec2452f5d67f13";
    var ambient = "developer";//valores posibles: "developer" o "production";
    
    var sdk = new sdkModulo.sdk(ambient, publicKey, privateKey);
    

    Nota: La sdk incluye un completo al cual se debe acceder desde el navegador y allí te permitirá configurar las distintas opciones.

    Volver a inicio

    Operatoria del Gateway

    Pagos Offline

    Para el caso de la operatoria de pago offline, la operación requiere en un principio de la solicitud de un token a partir de datos del usuario.

    Una vez generado y almacenado el token de Pago Offline, se deberá ejecutar la solicitud de pago utilizando el token previamente generado. Además del token de pago y los parámetros propios de la transacción, el comercio deberá identificar la compra con el site_transaction_id.

    Aclaracion: amount es un campo double el cual debería tener solo dos dígitos decimales.

    Pago Fácil

    imagen de sdks

    Campo Descripcion Oblig Restricciones Ejemplo
    site_transaction_id Identificador único para la operación SI 8 dígitos site_transaction_id: "170518_35"
    token Token generado en el primer paso SI 36 dígitos,variable token: "03508514-1578-4140-ba02-6bdd65e2af95"
    payment_method_id id del tipo de metodo de Pago Offline SI Dos dígitos payment_method_id: "26"
    amount Monto de la operación. 6 números enteros y 2 decimales SI 8 dígitos,variable amount: "11.00"
    currency Son los días que existen entre el 1er y 2do vencimiento SI 3 letras currency: "ARS"
    payment_type Tipo de pago SI Letras payment_type: "single"
    email email del usuario que esta haciendo uso del sitio Condicional Sin validacion email: "user@mail.com",
    invoice_expiration Fecha en que vence el cupón SI Formato AAMMDD invoice_expiration: "191123"
    cod_p3 Son los dias que existen entre el 1º y 2º vencimiento de la factura. SI 2,fijo ("00" si la factura tiene no tiene 2° vencimientos) invoice_expiration: "191123"
    cod_p4 Días después del 1º vencimiento y hasta que el cliente pueda abonar SI 3,fijo cod_p4: "123"
    client Codigo Cliente SI 8,fijo client: "12345678"
    surcharge Recargo por vencimiento del plazo SI 7,variable (5 digitos enteros y 2 decimales) surcharge: "10.01"
    payment_mode Tipo de metodo de pago SI Strin "offline" payment_mode: "offline"
    Ejemplo
    data = {
      site_transaction_id : "230518_41",
      token: '92a95793-3321-447c-8795-8aeb8a8ac067',
      payment_method_id: 25,
      amount: 10.00,
      currency: 'ARS',
      payment_type: 'single',
      email: 'user@mail.com',
      invoice_expiration : 191123,
      cod_p3: 12,
      cod_p4: 134,
      client: 12345678,
      surcharge: 10.01,
      payment_mode: 'offline'
    };
    
    

    Volver a inicio

    Rapipago

    imagen de sdks

    Campo Descripcion Oblig Restricciones Ejemplo
    site_transaction_id Identificador único para la operación SI 8 dígitos site_transaction_id: "170518_35"
    token Token generado en el primer paso SI 36 dígitos,variable token: "03508514-1578-4140-ba02-6bdd65e2af95"
    payment_method_id id del tipo de metodo de Pago Offline SI Dos dígitos payment_method_id: "26"
    amount Monto de la operación. 6 números enteros y 2 decimales SI 8 dígitos,variable amount: "11.00"
    currency Son los días que existen entre el 1er y 2do vencimiento SI 3 letras currency: "ARS"
    payment_type Tipo de pago SI Letras payment_type: "single"
    email email del usuario que esta haciendo uso del sitio Condicional Sin validacion email: "user@mail.com",
    invoice_expiration Fecha en que vence el cupón SI Formato AAMMDD invoice_expiration: "191123"
    cod_p3 Son los dias que existen entre el 1º y 2º vencimiento de la factura. SI 2,fijo ("00" si la factura tiene no tiene 2° vencimientos) invoice_expiration: "191123"
    cod_p4 Días después del 1º vencimiento y hasta que el cliente pueda abonar SI 3,fijo cod_p4: "123"
    client Codigo Cliente SI 8,fijo client: "12345678"
    surcharge Recargo por vencimiento del plazo SI 7,variable (5 digitos enteros y 2 decimales) surcharge: "10.01"
    payment_mode Tipo de metodo de pago SI Strin "offline" payment_mode: "offline"
    Ejemplo
    const data = {
      site_transaction_id: "230518_38",
      token: "8e190c82-6a63-467e-8a09-9e8fa2ab6215",
      payment_method_id: 26,
      amount: 10.00,
      currency: "ARS",
      payment_type: "single",
      email: "user@mail.com",
      invoice_expiration: "191123",
      cod_p3: "12",
      cod_p4: "134",
      client: "12345678",
      surcharge: 10.01,
      payment_mode: "offline"
    };
    

    Pago mis Cuentas

    imagen de sdks

    Campo Descripcion Oblig Restricciones Ejemplo
    site_transaction_id Identificador único para la operación SI 8 dígitos site_transaction_id: "170518_35"
    token Token generado en el primer paso SI 36 dígitos,variable token: "03508514-1578-4140-ba02-6bdd65e2af95"
    payment_method_id id del tipo de metodo de Pago Offline SI Dos dígitos payment_method_id: "26"
    amount Monto de la operación. 6 números enteros y 2 decimales SI 8 dígitos,variable amount: "11.00"
    currency Son los días que existen entre el 1er y 2do vencimiento SI 3 letras currency: "ARS"
    payment_type Tipo de pago SI Letras payment_type: "single"
    email email del usuario que esta haciendo uso del sitio Condicional Sin validacion email: "user@mail.com",
    invoice_expiration Fecha en que vence el cupón SI Formato AAMMDD invoice_expiration: "191123"
    bank_id Id de banco de la operacion SI String "offline" bank_id: 1 (refencia)
    Ejemplo
    const data = {
      site_transaction_id : "220518_39",
      token : "9ae1d130-8c89-4c3b-a267-0e97b88fedd0",
      payment_method_id : 41,
      amount : 10.00,
      currency : "ARS",
      payment_type : "single",
      email : "user@mail.com",
      bank_id : 1,
      sub_payments : 100,
      invoice_expiration : "191123"
    }

    Volver a inicio

    Cobro Express

    Campo Descripcion Oblig Restricciones Ejemplo
    site_transaction_id Identificador único para la operación SI 8 dígitos site_transaction_id: "170518_35"
    token Token generado en el primer paso SI 36 dígitos,variable token: "03508514-1578-4140-ba02-6bdd65e2af95"
    payment_method_id id del tipo de metodo de Pago Offline SI Dos dígitos payment_method_id: "26"
    amount Monto de la operación. 6 números enteros y 2 decimales SI 8 dígitos,variable amount: "11.00"
    currency Son los días que existen entre el 1er y 2do vencimiento SI 3 letras currency: "ARS"
    payment_type Tipo de pago SI Letras payment_type: "single"
    email email del usuario que esta haciendo uso del sitio Condicional Sin validacion email: "user@mail.com",
    invoice_expiration Fecha en que vence el cupón SI Formato AAMMDD invoice_expiration: "191123"
    second_invoice_expiration Segunda fecha de vencimiento del cupón SI Formato AAMMDD second_invoice_expiration: "191123"
    cod_p3 Son los dias que existen entre el 1º y 2º vencimiento de la factura. SI 2,fijo ("00" si la factura tiene no tiene 2° vencimientos) invoice_expiration: "191123"
    client Codigo Cliente SI 8,fijo client: "12345678"
    surcharge Recargo por vencimiento del plazo SI 7,variable (5 digitos enteros y 2 decimales) surcharge: "10.01"
    payment_mode Tipo de metodo de pago SI Strin "offline" payment_mode: "offline"
    Ejemplo
    const data = {
      site_transaction_id : "160518_42",
      token : "3df26771-67ab-4a8e-91e2-f1e0b0c559f7",
      payment_method_id : 51,
      amount : 10.00,
      currency : "ARS",
      payment_type : "single",
      email : "user@mail.com",
      invoice_expiration : "191123",
      second_invoice_expiration : "191123",
      cod_p3 : "1",
      cod_p4 : "134",
      client : "12345678",
      surcharge : 10.01,
      payment_mode : "offline"
    };
    

    Volver a inicio

    Cobro Express

    Campo Descripcion Oblig Restricciones Ejemplo
    site_transaction_id Identificador único para la operación SI 8 dígitos site_transaction_id: "170518_35"
    token Token generado en el primer paso SI 36 dígitos,variable token: "03508514-1578-4140-ba02-6bdd65e2af95"
    payment_method_id id del tipo de metodo de Pago Offline SI Dos dígitos payment_method_id: "26"
    amount Monto de la operación. 6 números enteros y 2 decimales SI 8 dígitos,variable amount: "11.00"
    currency Son los días que existen entre el 1er y 2do vencimiento SI 3 letras currency: "ARS"
    payment_type Tipo de pago SI Letras payment_type: "single"
    email email del usuario que esta haciendo uso del sitio Condicional Sin validacion email: "user@mail.com",
    invoice_expiration Fecha en que vence el cupón SI Formato AAMMDD invoice_expiration: "191123"
    second_invoice_expiration Segunda fecha de vencimiento del cupón SI Formato AAMMDD second_invoice_expiration: "191123"
    cod_p3 Son los dias que existen entre el 1º y 2º vencimiento de la factura. SI 2,fijo ("00" si la factura tiene no tiene 2° vencimientos) invoice_expiration: "191123"
    cod_p4 Días después del 1º vencimiento y hasta que el cliente pueda abonar SI 3,fijo cod_p4: "123"
    client Codigo Cliente SI 8,fijo client: "12345678"
    surcharge Recargo por vencimiento del plazo SI 7,variable (5 digitos enteros y 2 decimales) surcharge: "10.01"
    payment_mode Tipo de metodo de pago SI Strin "offline" payment_mode: "offline"
    Ejemplo
    const data = {
      site_transaction_id: "160518_42",
      token: "3df26771-67ab-4a8e-91e2-f1e0b0c559f7",
      payment_method_id: 51,
      amount: 10.00,
      currency: "ARS",
      payment_type: "single",
      email: "user@mail.com",
      invoice_expiration: "191123",
      second_invoice_expiration: "191123",
      cod_p3: "1",
      cod_p4: "134",
      client: "12345678",
      surcharge: 10.01,
      payment_mode: "offline"
    }
    

    Health Check

    Este recurso permite conocer el estado actual de la API RESTful de Payway.

    const sdk = new sdkModulo.sdk(ambient, publicKey, privateKey);
    
    sdk.healthcheck(args, function(result, err) {
        console.log("-----------------------------------------");
        console.log("healthcheck result:");
        console.log(result);
        console.log("-----------------------------------------");
        console.log("healthcheck error:");
        console.log(err);
        console.log("-------------------***-------------------");
    });
    

    Volver a inicio

    Ejecución del Pago

    Una vez generado y almacenado el token de pago, se deberá ejecutar la solicitud de pago más el token previamente generado. Además del token de pago y los parámetros propios de la transacción, el comercio deberá identificar la compra con el site_transaction_id.

    Aclaracion : amount es un campo double el cual debería tener solo dos dígitos.

    const sdk = new sdkModulo.sdk(ambient, publicKey, privateKey);
    
    args = {
        site_transaction_id: "id_" + date,
        token: token,
        user_id: 'juanpepito',
        payment_method_id: 1,
        bin: "450799",
        amount: 25.50,
        currency: "ARS",
        installments: 1,
        description: "Description of product",
        payment_type: "single",
        sub_payments: [],
        apiKey: "566f2c897b5e4bfaa0ec2452f5d67f13",
        'Content-Type': "application/json"
    };
    
    sdk.payment(args, function(result, err) {
    
    resolve(result);
    console.log("")
    console.log("Se realiza una petición de pago enviando el payload y el token de pago ")
    console.log("generado anteriormente")
    console.log("             PAYMENT REQUEST             ");
    console.log("sendPaymentRequest result:");
    console.log(result);
    console.log("sendPaymentRequest error:");
    console.log(err);
    });
    

    Pago con 3DS Auth

    La autenticación 3D Secure (3DS) es un protocólo de seguridad que ofrece un mayor nivel de confianza en las transacciones digitales. Cuando el parámetro cardholder_auth_required está establecido en true en la solicitud de pago, significa que se requiere la autenticación del titular de la tarjeta, en este caso el comercio deberá presentar un desafío de autenticación.

    Para realizar un pago con 3DS, se deben seguir estos pasos adicionales:

    • Asegurarse de que el parámetro cardholder_auth_required esté establecido en true. Proporcionar los datos de autenticación 3DS del titular de la tarjeta en el campo auth_3ds_data que son atributos y valores que se utilizan para identificar y caracterizar la solicitud de autenticación 3DS.

    auth_3ds_data:

    Atributo Descripción Tipo de dato
    device_type Indica el tipo de dispositivo desde el cual se realiza la solicitud. String
    accept_header Indica el tipo de contenido que el cliente puede recibir. String
    user_agent Proporciona información sobre el agente del usuario del navegador. String
    ip Representa la dirección IP desde la cual se realiza la solicitud. String
    java_enabled Indica si Java está habilitado en el navegador del cliente. Boolean
    language Representa el idioma del cliente que realiza la solicitud. String
    color_depth Indica la profundidad de color del dispositivo del cliente. String
    screen_height Representa la altura de la pantalla del dispositivo del cliente. Integer
    screen_width Representa el ancho de la pantalla del dispositivo del cliente. Integer
    time_zone_offset Indica el desplazamiento de la zona horaria del cliente. Integer

    A continuación, se muestra cómo se podría realizar un pago con 3DS:

    const sdk = new sdkModulo.sdk(ambient, publicKey, privateKey);
    
    // Datos del pago con autenticación 3DS
    var paymentData = {
      site_transaction_id: "id_" + date,
      token: token,
      user_id: 'juan',
      payment_method_id: 1,
      bin: "450799",
      amount: 2550,
      currency: "ARS",
      installments: 1,
      description: "Description of product",
      payment_type: "single",
      sub_payments: [],
      cardholder_auth_required: true,
      auth_3ds_data: {
         "device_type": "BROWSER",
            "accept_header": "application/json",
            "user_agent": {{$randomUserAgent}},
            "ip": {{$randomIP}},
            "java_enabled": true,
            "language": {{$randomLocale}},
            "color_depth": "32",
            "screen_height": {{$randomInt}},
            "screen_width": {{$randomInt}},
            "time_zone_offset": {{$randomInt}}
      }
    };
    
    // Realizar el pago con autenticación 3DS
    var response = sdk.payment({
      get: function () { return 'STATUS_PAYMENT_WITH_CHALLENGEABLE'; },
      body: paymentData
    }
    

    La respuesta del pago que usaremos para luego realizar el challenge será la siguiente:

    {
        "id": "44628507",
        "status": "CHALLENGE PENDING",
        "timeout": 600,
        "target": {
            "element": "IFRAME",
            "visible": true,
            "width": 308,
            "height": 128
        },
        "http": {
            "method": "POST",
            "url": "https://bdx-acs-test.payzen.eu/acs/v2/creq",
            "body": "{\"creq\":\"eyJ0aHJlZURTU2VydmVyVHJhbnNJRCI6IjM5NzU0YWQ5LThlYTctNGUxOS1hMTcwLWQzY2Y4NzRmOWE1OCIsIm1lc3NhZ2VFeHRlbnNpb24iOlThlYTctNGUxOS1hMTcwLWQzY2Y4NzRmOWE1OC9WSVNBIiwicHVyY2hhc2VBbW91bnQiOiIxMjAwIiwicHVyY2hhc2VDdXJyZW5jeSI6IjAzMiIsInB1cmNoYXNlRXhwb25lbnQiOiIyIiwicHVyY2hhc2VEYXRlIjoiMjAyMzA4MDExNTExMDEiLCJ0cmFuc1R5cGUiOiIwMSJ9fSwiaWQiOiJTSU1VTEFUSU9OLUFSRVEiLCJuYW1lIjoiU0lNVUxBVElPTi1BUkVRIn1dLCJtZXNzYWdlVHlwZSI6IkNSZXEiLCJtZXNzYWdlVmVyc2lvbiI6IjIuMi4wIiwiYWNzVHJhbnNJRCI6ImFlZmU0YjAzLTkwMTctNDM4OS04YjkzLWIyNDQ2MDE5OTE2YiIsImNoYWxsZW5nZVdpbmRvd1NpemUiOiIwNSJ9\",\"threeDSSessionData\":\"H4sIAAAAAAAAADVQ27KiMBD8Ik-Fq_IoaI5hCcg9yYvFTUnAC8IehK9fLM8-dE1N90z19FSTLRixQZayB5UhYCHSUWuaseSecUuhz80ORsjXy3LoD5J9sCg1q-MFoPVFXy1JlBImLyKpyq48pQiXCGTbfw_RTTeiAgAA\"}"
        }
    }
    

    Tipo de Autenticación Challenge 3DS (Autenticación del Titular de la Tarjeta)

    La función threeDSinstruction se utiliza específicamente para presentar el desafío de autenticación 3DS al titular de la tarjeta. A continuación, se explica cómo utilizarlo:

    • Configuración Inicial: Primero, asegúrate de haber configurado el SDK con las claves de acceso proporcionadas por el PSP, tal como se mencionó anteriormente en este README.

    • Presentar el Desafío de Autenticación 3DS: Para presentar el desafío de autenticación 3DS, utiliza la función threeDSinstruction del SDK. Esta función recibe dos parámetros: sdk, que es la instancia del SDK previamente configurada, y args, que son los argumentos necesarios para la instrucción 3DS.

    Advertencia

    Antes de hacer la solicitud, es necesario agregar el header X-Consumer-Username a la llamada HTTP. El valor del header debe ser tu número de site seguido de "_private". Por ejemplo, si tu número de site es "00099991", entonces el valor del header será "00099991_private".

    Los argumentos requeridos para el tipo de Autenticación Challenge 3DS, deben ser como el siguiente ejemplo:

    {
        "id": "44630157",
        "instruction_value": "eyJjZXJ0aWZpY2F0ZSI6IlBBU1NfMS41OS4wX0pXVCIsInR5cCI6IkpXVCIsImFsZyI6IlJTMjU2In0.eyJwYXNzQ2xhaW0iOiJ7XCJwcm90b2NvbFwiOntcIm5hbWVcIjpcIlRIUkVFRFNcIixcInZlcnNpb25cIjpcIjIuMi4wXCIsXCJuZXR3b3JrXCI6XCJWSVNBXCIsXCJjaGFsbGVuZ2VQcmVmZXJlbmNlXCI6XCJOT19QUkVGRVJFTkNFXCIsXCJzaW11bGF0aW9uXCI6dHJ1ZX0sXCJhdXRoZW50aWNhdGlvblJlc3VsdFwiOntcInJlc3BvbnNlVHlwZVwiOlwiUkVTVUxUXCIsXCJ0eXBlXCI6XCJDSEFMTEVOR0VcIixcImF1dGhlbnRpY2F0aW9uSWRcIjp7XCJ0eXBlXCI6XCJkc1RyYW5zSWRcIixcInZhbHVlXCI6XCI1N2E2MTZlNC1lMDgzLTQwNTEtOTg3OC1iZTYyNjg2NTQzNTdcIn0sXCJhdXRoZW50aWNhdGlvblZhbHVlXCI6e1widHlwZVwiOlwiQ0FWVlwiLFwidmFsdWVcIjpcIkRSVWxOVWV2aXZaeW93MUYrVHBMeFR2bnEwOD1cIn0sXCJzdGF0dXNcIjpcIlNVQ0NFU1NcIixcImNvbW1lcmNlSW5kaWNhdG9yXCI6XCIwNVwiLFwiZXh0ZW5zaW9uXCI6e1widHlwZVwiOlwiVEhSRUVEU19WMlwiLFwidGhyZWVEU1NlcnZlclRyYW5zSURcIjpcIjBmMjkzZmIxLTRmZGEtNDkzNC05YjA2LTEyZWVhNGU5YmFmNVwiLFwiZHNUcmFuc0lEXCI6XCI1N2E2MTZlNC1lMDgzLTQwNTEtOTg3OC1iZTYyNjg2NTQzNTdcIixcImFjc1RyYW5zSURcIjpcIjk0YTZhOWUzLWIwODUtNGUxZi1hZmQ5LTgwZDQzMGJmZDMwOVwiLFwidHJhbnNTdGF0dXNcIjpcIlNVQ0NFU1NGVUxcIixcInN0YW5kSW5UeXBlXCI6XCJOT05FXCJ9LFwicmVhc29uXCI6e319LFwiZXZlbnRzXCI6W10sXCJpZFwiOlwiMGYyOTNmYjEtNGZkYS00OTM0LTliMDYtMTJlZWE0ZTliYWY1XCIsXCJzZXNzaW9uRGF0YVwiOntcImtcIjpcIjNEUzJcIixcInNcIjp0cnVlLFwicFwiOlwiTk9fUFJFRkVSRU5DRVwiLFwidFwiOlwiMGYyOTNmYjEtNGZkYS00OTM0LTliMDYtMTJlZWE0ZTliYWY1XCIsXCJuXCI6XCJWSVNBXCIsXCJ2XCI6XCIyLjIuMFwiLFwiZFwiOlwiMDJcIn19IiwiaXNzIjoiUEFTUyIsImV4cCI6MTY5MDkxMjkwNn0.Q2IXWF8bsrZhmsaXtDcTaXmwczvU9cO0OhCN0fKXul5dHSq-79KEAZ73Db1hyREufNPyQHhAdbjb88ymJfC72N7qdHOoVonqFY_4MoqtSXmtDBaaklQU3orCaOTno1v4gyOM2T9T7ByNKWNhWAXm_p5CvJEZnaElVaoZhKHpFQLPQyODkL0GMlLWP8zZefDvKJallw8En87_kn5JVdjPwlupXFrQYNSjWs4qFUyEaiNtqys6GeiqL-_GEtS7QDqBnnfFrxCdBi4UNb8LMm_kGi3nJ8PwHLcJApPWCGry1Z-CM1WdophCAdGqcRCadlgzX-JutbWJMmXRISDlsBtcjg"
    }

    Donde detallamos:

    Campo Descripción Oblig Ejemplo
    id Identificador único para la operación, corresponde al campo "id" de la respuesta de payment con 3ds. SI id: "44628507"
    instruction_value Contiene el objeto "http" recuperado de la respuesta de payment con 3ds, codificado como JWT. SI instruction_value: "eyJjZXJ0aWZpY2F0ZSI6IlBBU1NfMS41OS4wX0pXVCIsIgSDS"

    Ejemplo de Respuesta del Desafío de Autenticación 3DS:

    A continuación, se muestra cómo se podría presentar la respuesta del desafío de autenticación cuando aprueba un pago, podemos notar que en el objeto auth_3ds_response el campo status viene como approved:

    {
        "id": 44628507,
        "site_transaction_id": "TX3DSC1690902660",
        "payment_method_id": 1,
        "card_brand": "Visa",
        "amount": 1200,
        "currency": "ars",
        "*status*": "approved",
        "status_details": {
            "ticket": "764",
            "card_authorization_code": "B22619",
            "address_validation_code": null,
            "error": null
        },
        "date": "2023-08-01T12:11Z",
        "payment_mode": null,
        "customer": null,
        "bin": "450799",
        "installments": 1,
        "first_installment_expiration_date": null,
        "payment_type": "single",
        "sub_payments": [],
        "site_id": "00097001",
        "fraud_detection": null,
        "aggregate_data": null,
        "establishment_name": null,
        "spv": null,
        "confirmed": null,
        "pan": null,
        "customer_token": null,
        "card_data": "/tokens/44628507",
        "token": "0632bdb2-a843-48ff-8001-d8073c9658d0",
        "auth_3ds_response": {
            "id": "44628507",
            "status": "CHALLENGE SUCCESS",
            "authentication_value": "97VVSWEQZumP5L490zrsyFimZkY=",
            "commerce_indicator": "05",
            "protocol_version": "2.2.0",
            "directory_server_transaction_id": "577d6521-2fc0-4724-b6a7-381bd1412d55"
        }
    }

    Operación en dos pasos

    Una vez generado y almacenado el token de pago, se deberá ejecutar la solicitud de pago más el token previamente generado. Si el pago es preaprobado Status.PRE_APPROVED, se procederá a realizar la confirmación del pago enviando ID de pago, monto y usario aprobador. A continuación se muestra un ejemplo con una transacción simple sin Cybersource.

    const sdk = new sdkModulo.sdk(ambient, publicKey, privateKey);
    
    args = {
        amount: 25.50,
    };
    
    sdk.confirmPayment(args, function(result, err) {
    
    resolve(result);
    console.log("")
    console.log("Se realiza una petición de confirmación de pago enviando el payload y el token de pago ")
    console.log("generado anteriormente")
    console.log("             CONFIRM PAYMENT REQUEST             ");
    console.log("sendPaymentRequest result:");
    console.log(result);
    console.log("sendPaymentRequest error:");
    console.log(err);
    });

    Volver a inicio

    Comercios agregadores

    Campos agregador para American Express

    El set de datos a enviar a la sdk son otros:

    let args = {
        "customer": {
            "id": "{{user}}",
            "email": "{{email}}",
        "ip_address": "{{ip_address}}"
        },
        "site_transaction_id": "AGREGADOR_{{$timestamp}}",
        "token": "{{token}}",
        "payment_method_id": 65,
        "bin": "{{bin}}",
        "amount": 2000,
        "currency": "ARS",
        "installments": 1,
        "description": "",
        "payment_type": "single",
        "sub_payments": [],
        "aggregate_data": {
            "indicator": "1",
            "identification_number": "30598910045",
            "bill_to_pay": "Payway_Test",
            "bill_to_refund": "Payway_Test",
            "merchant_name": "Payway",
            "street": "Lavarden",
            "number": "247",
            "postal_code": "C1437FBE",
            "category": "05044",
            "channel": "005",
            "geographic_code": "C1437",
            "city": "Ciudad de Buenos Aires",
            "merchant_id": "Payway_Agregador",
            "province": "Buenos Aires",
            "country": "Argentina",
            "merchant_email": "merchant@mail.com[13]",
            "merchant_phone": "+541135211111"
        }
    }
    
    
    

    Respuesta al pago:

    La respuesta de ante cualquier pago exitoso es:

    {
        "id": 971344,
        "site_transaction_id": "AGREGADOR_1527712473",
        "payment_method_id": 65,
        "card_brand": "Amex MT",
        "amount": 2000,
        "currency": "ars",
        "status": "approved",
        "status_details": {
            "ticket": "4",
            "card_authorization_code": "203430",
            "address_validation_code": "VTE0011",
            "error": null
        },
        "date": "2018-05-30T17:34Z",
        "customer": {
            "id": "juan",
            "email": "jmejia@prismamp.com",
        "ip_address": "192.168.0.1"
        },
        "bin": "373953",
        "installments": 1,
        "first_installment_expiration_date": null,
        "payment_type": "single",
        "sub_payments": [],
        "site_id": "00020220",
        "fraud_detection": {
            "status": null
        },
        "aggregate_data": {
            "indicator": "1",
            "identification_number": "30598910045",
            "bill_to_pay": "Payway_Test",
            "bill_to_refund": "Payway_Test",
            "merchant_name": "Payway",
            "street": "Lavarden",
            "number": "247",
            "postal_code": "C1437FBE",
            "category": "05044",
            "channel": "005",
            "geographic_code": "C1437",
            "city": "Ciudad de Buenos Aires",
            "merchant_id": "Payway_Agregador",
            "province": "Buenos Aires",
            "country": "Argentina",
            "merchant_email": "merchant@mail.com",
            "merchant_phone": "+541135211111"
        },
        "establishment_name": null,
        "spv": null,
        "confirmed": null,
        "pan": null,
        "customer_token": "13e550af28e73b3b00af465d5d64c15ee1f34826744a4ddf68dc6b469dc604f5",
        "card_data": "/tokens/971344"
    }

    Volver a inicio

    Listado de Pagos

    Mediante este recurso, se genera una solicitud de listado de pagos. Este recurso admite la posibilidad de agregar los filtros adicionales:

    • (opcional) offset: desplazamiento en los resultados devueltos. Valor por defecto = 0.
    • (opcional) pageSize: cantidad máxima de resultados retornados. Valor por defecto = 50.
    • (opcional) siteOperationId: ID único de la transacción a nivel comercio (equivalente al site_transaction_id).
    • (opcional) merchantId: ID Site del comercio.
    var sdk = new sdkModulo.sdk(ambient, publicKey, privateKey);
    
    var args = {
        data: {
    
        },
        headers: {
            "apikey": "566f2c897b5e4bfaa0ec2452f5d67f13",
            "Content-Type": "application/json",
            "Cache-Control": "no-cache"
        }
    };
    
    offset = '10';
    pageSize = '20';
    siteOperationId = '450799';
    merchantId = 'Id001';
    
    sdk.getAllPayments(args, offset, pageSize, merchantId, merchantId, function(result, err) {
        console.log("infoPayments:");
        console.log(result);
        console.log("infoPayments error:");
        console.log(err);
    });
    

    Volver a inicio

    Información de un Pago

    Mediante este recurso, se genera una solicitud de información de un pago previamente realizado, pasando como parámetro el id del pago.

    const sdk = new sdkModulo.sdk(ambient, publicKey, privateKey);
    
    id = result.id;
    const args = {
        data: {
    
        },
        headers: {
            "apikey": "566f2c897b5e4bfaa0ec2452f5d67f13",
            "Content-Type": "application/json",
            "Cache-Control": "no-cache"
        }
    };
    
    sdk.paymentInfo(args, id, function(result, err) {
    console.log("");
    console.log("información de pago previamente realizado");
    console.log("");
    console.log(result);
    console.log("-----------------------------------------");
    console.log("error:");
    console.log(err);
    });
    

    Volver a inicio

    Anulación / Devolución Total de Pago

    Mediante este recurso, se genera una solicitud de anulación / devolución total de un pago puntual, pasando como parámetro el id del pago.

    const sdk = new sdkModulo.sdk(ambient, publicKey, privateKey);
    
    id = result.id;
    const args = {
        data: {
    
        },
        headers: {
            "apikey": "566f2c897b5e4bfaa0ec2452f5d67f13",
            "Content-Type": "application/json",
            "Cache-Control": ""
        }
    };
    sdk.refund(args, id, function(result, err) {
    console.log("Reintegro monto total de la transacción")
    console.log("                  REFUND                 ");
    console.log("refund result:");
    console.log(result);
    console.log("refund error:");
    console.log(err);
    });
    

    Volver a inicio

    Anulación de Devolución Total

    Mediante este recurso, se genera una solicitud de anulación de devolución total de un pago puntual, pasando como parámetro el id del pago y el id de la devolución.

    const sdk = new sdkModulo.sdk(ambient, publicKey, privateKey);
    
    paymentId = result.id;
    const args = {
        data: {
    
        },
        headers: {
            "apikey": "566f2c897b5e4bfaa0ec2452f5d67f13",
            "Content-Type": "application/json",
            "Cache-Control": ""
        }
    };
    sdk.deleteRefund(args, paymentId, refund_id, function(result, err) {
    console.log("")
    console.log("Reintegro monto total de la transacción")
    console.log("                  REFUND                 ");
    console.log(result);
    console.log("refund error:");
    console.log(err);
    });
    

    Volver a inicio

    Devolución Parcial de un Pago

    Mediante este recurso, se genera una solicitud de devolución parcial de un pago puntual, pasando como parámetro el id del pago y el monto de la devolución.

    const sdk = new sdkModulo.sdk(ambient, publicKey, privateKey);
    
    paymentId = result.id;
    amount = 10.50;
    const args = {
        data: {
            "amount": amount
        },
        headers: {
            "apikey": "566f2c897b5e4bfaa0ec2452f5d67f13",
            "Content-Type": "application/json",
            "Cache-Control": ""
        }
    };
    sdk.partialRefund(args, paymentId, function(result, err) {
    console.log("")
    console.log("Reintegro monto parcial de la transacción ")
    console.log("")
    console.log("              PARTIAL REFUND             ");
    console.log("partial refund result:");
    console.log(result);
    console.log("partial refund error:");
    console.log(err);
    });
    

    Volver a inicio

    Anulación de Devolución Parcial

    Mediante este recurso, se genera una solicitud de anulación de devolución parcial de un pago puntual, pasando como parámetro el id del pago y el id de la devolución.

    const sdk = new sdkModulo.sdk(ambient, publicKey, privateKey);
    
    paymentId = result.id;
    amount = 10.50;
    const args = {
        data: {
            "amount": amount
        },
        headers: {
            "apikey": "566f2c897b5e4bfaa0ec2452f5d67f13",
            "Content-Type": "application/json",
            "Cache-Control": ""
        }
    };
    sdk.deletePartialRefund(args, paymentId, function(result, err) {
    console.log("")
    console.log("Reintegro monto parcial de la transacción ")
    console.log("")
    console.log("              PARTIAL REFUND             ");
    console.log("partial refund result:");
    console.log(result);
    console.log("partial refund error:");
    console.log(err);
    });
    
    

    Formulario de pago

    Este servicio permite integrar en el comercio un formulario de pago. Utiliza el recurso "validate" para obtener un hash a partir de los datos de la operacion, luego este hash sera utilizado al momento de llamar al recurso "form" el cual devolvera el formulario renderizado propio para cada comercio listo para ser utilizado y completar el flujo de pago.

    Caso2

    Campo Descripcion Oblig Restricciones Ejemplo
    site.id Merchant Condicional Numérico de 20 digitos id: "12365436"
    site.template.id Id de formulario de pago, el id es unico para cada comercio y es generado previamente por Payway SI Numérico de 20 digitos
    site.transaction_id Numero de operación SI Alfanumérico de 40 digitos
    customer.id d que identifica al usuario NO Alfanumérico de 40 digitos
    customer.email Email del cliente. Se envía información del pago Es requerido si se desea realizar el envío de mails Alfanumérico de 40 digitos email:"user@mail.com"
    payment.amount Monto de la compra SI Numérico
    payment.currency Tipo de moneda NO Letras
    payment.payment_method_id Id del medio de pago SI Númerico
    payment.bin Primeros 6 dígitos de la tarjeta NO Númerico
    payment.installments Cantidad de cuotas SI Númerico
    payment.payment_type Indica si es simple o distribuida SI Valores posibles: "single", "distributed"
    payment.sub_payments Se utiliza para pagos distribuidos. Informa los subpayments Es requerido si el
    pago es distribuido por monto, ya que si es por porcentaje toma los configurados desde Adm Sites (SAC) NA
    success_url Url a donde se rediccionará una vez que el usuario finalice la operación desde la página de feedback SI Númerico
    cancel_url Url donde se rediccionará si el cliente quiere cancelar el formulario SI NA
    redirect_url Url en la cual se enviaran los datos de la operación una vez finalizada la misma para que el comercio pueda capturarlos y mostrarlos como lo desee Es requerido en los casos donde no informe el campo "success_url" NA

    Ejemplo

                var date = new Date().getTime();
                
                args = {
                    site_transaction_id: "id_" + date,
            site_template_id: <id template>
                    user_id: 'juanpepito',
                    payment_method_id: 1,
                    bin: "450799",
                    amount: 25.50,
                    currency: "ARS",
                    installments: 1,
                    description: "Description of product",
                    payment_type: "single",
                    sub_payments: [],
                    apiKey: "5cde7e72ea1e430db94d436543523744",
                    formSite: '0002031',
                    'Content-Type': "application/json",
                    success_url: "https://shop.swatch.com/es_ar/", //si no se informa el "redirect_url" es requerido
                    cancel_url: "https://swatch.com/api/result",
                    redirect_url: "", //si no se informa el success_url es requerido
                    fraud_detection: [], //si no esta activado cybersource no enviar este atributo
                    success_ur": "https://shop.swatch.com/es_ar/", //si no se informa el "redirect_url" es requerido
                    cancel_url: "https://swatch.com/api/result",
                    redirect_url: "", //si no se informa el "success_url" es requerido
                    fraud_detection: array() //si no esta activado cybersource no enviar este atributo
    
                };
    
    
          
    
            var customer = {
                id: "juanpepito",
                email: "juan.pepito@hotmail.com"
            };
                var validateData = new validateMod.validate(args);
    
                // send_to_cs = TRUE O FALSE PARA ENVIAR PARAMETROS CS
    
                //Se envian sdk y parametros al modulos de payment que realizará el pago
                var instPayment = new validateMod.validate(sdk, args).then(function(result) {
                    console.log("-----------------------------------------")
                    console.log("Validate")
                    console.log("-------------------***-------------------");
                })
        })
    

    Tokenizacion de tarjetas de crédito

    Esta funcionalidad permite que luego de realizar una compra con una tarjeta, se genere un token alfanumerico unico en el backend de Payway, esto permite que a la hora de comprar nuevamente con esta tarjeta solo requerira el codigo de seguridad. Como primer paso se debe realizar una un pago normal, el token generado estara en el campo "token" de la respuesta.

    Listado de tarjetas tokenizadas

    Este metodo permite conocer el listado de tarjetas tokenizadas que posee un usuario determinado. Para esto es necesario el nombre de usuario a la instancia de token

    const sdk = new sdkModulo.sdk(ambient, publicKey, privateKey);
    
    user_id = result.user_id;
    const args = {
        data: {
    
        },
        headers: {
            "apikey": "566f2c897b5e4bfaa0ec2452f5d67f13",
            "Content-Type": "application/json",
            "Cache-Control": "no-cache"
        }
    };
    setTimeout(function() {
    sdk.cardTokens(args, user_id, function(result, err) {
    resolve(result);
    console.log("");
    console.log("");
    console.log("Luego de realizar un primer pago se genera automaticamente un token único");
    console.log("para la tarjeta");
    console.log("");
    console.log("cardTokens result:");
    console.log(result);
    console.log("cardTokens error:");
    console.log(err);
    })
    }

    Volver a inicio

    Solicitud de token de pago

    Al cargar el formulario de pago este mostrara las tarjetas tokenizadas que posee el usuario.

    Volver a inicio

    Ejecucion de pago tokenizado

    Una vez que se obtiene el token a partir de la tarjeta tokenizada, se deberá ejecutar la solicitud de pago. Además del token de pago y los parámetros propios de la transacción, el comercio deberá identificar la compra con el "site_transaction_id" y "user_id".

    const sdk = new sdkModulo.sdk(ambient, publicKey, privateKey);
    
    args = {
        site_transaction_id: "id_" + date,
        token: token,
        user_id: 'juanpepito',
        payment_method_id: 1,
        bin: "450799",
        amount: 2000,
        currency: "ARS",
        installments: 1,
        description: "Description of product",
        payment_type: "single",
        sub_payments: [],
        apiKey: "566f2c897b5e4bfaa0ec2452f5d67f13",
        'Content-Type': "application/json"
    };
    
    sdk.payment(args, function(result, err) {
        resolve(result.user_id);
        console.log("")
        console.log("")
        console.log("Se realiza una petición de pago enviando el payload y el token de pago ")
        console.log("de la tarjeta tokenizada")
        console.log("")
        console.log("")
        console.log("             PAYMENT REQUEST             ");
        console.log("-----------------------------------------");
        console.log("sendPaymentRequest result:");
        console.log(result);
        console.log("-----------------------------------------");
        console.log("sendPaymentRequest error:");
        console.log(err);
        console.log("-------------------***-------------------");
    });
    

    Volver a inicio

    Eliminacion de tarjeta tokenizada

    El servicio da la posibilidad de eliminar un token de tarjeta generadas, esto se logra instanciando token y utilizando el metodo tokenDelete(). Funciona enviando el token de la tarjeta tokenizada.

    var sdk = new sdkModulo.sdk(ambient, publicKey, privateKey);
    
    
    args = {
        data: {
    
        },
        headers: {
            apiKey: "566f2c897b5e4bfaa0ec2452f5d67f13",
            'Content-Type': "application/json",
            'Cache-Control': "no-cache"
        }
    }
    sdk.deleteCardToken(args, '4507990000004905', function(result, err) {
        console.log("------------   -----------------------------");
        console.log("deleteCardToken result:");
        console.log(result);
        console.log("-----------------------------------------");
        console.log("deleteCardToken error:");
        console.log(err);
        console.log("-------------------***-------------------");
    });
    

    Volver a inicio

    Integración con Cybersource

    Para utilizar el Servicio de Control de Fraude Cybersource, en la operación SendAuthorizeRequest, deben enviarse datos adicionales sobre la operación de compra que se quiere realizar. Se han definido cinco verticales de negocio que requieren parámetros específicos, así como también parámetros comunes a todas las verticales.

    Volver al inicio

    Parámetros Comunes

    Los parámetros comunes a todas las verticales deben enviarse junto con los datos específicos de cada uno. A continuación, describiremos los párametros comúnes que se deberan agregar a los datos de cada vertical al momento de instanciar la clase correspondiente.

    var sdk = new sdkModulo.sdk(ambient, publicKey, privateKey);
    
    var datos_cs = {
        send_to_cs : 'true',
        channel : 'Web/Mobile/Telefonica' //una de las tres opciones son validas
        city : 'Villa General Belgrano', //Ciudad de facturación, MANDATORIO.
        country : 'AR', //País de facturación. MANDATORIO. Código ISO. (http://apps.cybersource.com/library/documentation/sbc/quickref/countries_alpha_list.pdf)
        customerid : '453458', //Identificador del usuario al que se le emite la factura. MANDATORIO. No puede contener un correo electrónico.
        email : 'Payway@hotmail.com', //Mail del usuario al que se le emite la factura. MANDATORIO.
        firstname : 'Juan' ,//Nombre del usuario al que se le emite la factura. MANDATORIO.
        lastname : 'Perez', //Apellido del usuario al que se le emite la factura. MANDATORIO.
        phone_number' : '541160913988', //Teléfono del usuario al que se le emite la factura. No utilizar guiones, puntos o espacios. Incluir código de país. MANDATORIO.
        postalcode' : ' C1010AAP', //Código Postal de la dirección de facturación. MANDATORIO.
        state : 'B', //Provincia de la dirección de facturación. MANDATORIO. Ver tabla anexa de provincias.
        street1 : 'Cerrito 740', //Domicilio de facturación (calle y nro). MANDATORIO.
        street2 : 'Piso 8', //Complemento del domicilio. (piso, departamento). NO MANDATORIO.
        currency : 'ARS', //Moneda. MANDATORIO.
        dispatch_method: 'storepickup', //Retiro del producto
        amount : '5.00', //Con decimales opcional usando el puntos como separador de decimales. No se permiten comas, ni como separador de miles ni como separador de decimales. MANDATORIO. (Ejemplos:$125,38-> 125.38 $12-> 12 o 12.00)
    };
    

    Volver al inicio

    Retail

    Los siguientes parámetros se deben enviar específicamente para la vertical Retail. Además se deben enviar datos específicos de cada producto involucrado en la transacción.

    var datos_cs = {
        device_unique_id : "devicefingerprintid",
        days_to_delivery: "55",
        tax_voucher_required: true,
        customer_loyality_number: "123232",
        coupon_code: "cupon22",
    };
    
    

    Para incorporar estos datos en el requerimiento inicial, se debe instanciar un objeto de la clase Retail de la siguiente manera.

    
    var date = new Date().getTime();
    
    args = {
        site_transaction_id: "id_" + date,
        token: token,
        user_id: 'juanpepito',
        payment_method_id: 1,
        bin: "450799",
        amount: 25.50,
        currency: "ARS",
        installments: 1,
        description: "Description of product",
        payment_type: "single",
        sub_payments: [],
        apiKey: "566f2c897b5e4bfaa0ec2452f5d67f13",
        'Content-Type': "application/json"
    };
    var paymentData = new PaymentDataModulo.paymentData(args);
    
    var datos_cs = array(
      device_unique_id : "devicefingerprintid",
      days_to_delivery: "55",
      dispatch_method: "storepickup",
      tax_voucher_required: true,
      customer_loyality_number: "123232",
      coupon_code: "cupon22",
    }
    
    var retail = new retailModulo.retailData(datos_cs);
    
    args.data.fraud_detection = retail;
    sdk.payment(args, function(result, err) {
    
    resolve(result);
    
    console.log("")
    console.log("")
    console.log("Se realiza una petición de pago enviando el payload y el token de pago ")
    console.log("generado anteriormente")
    console.log("")
    console.log("")
    console.log("             PAYMENT REQUEST             ");
    console.log("-----------------------------------------");
    console.log("sendPaymentRequest result:");
    console.log(result);
    console.log("-----------------------------------------");
    console.log("sendPaymentRequest error:");
    console.log(err);
    console.log("-------------------***-------------------");
    });
    

    Volver al inicio

    Ticketing

    Los siguientes parámetros se deben enviar específicamente para la vertical Ticketing. Además se deben enviar datos específicos de cada producto involucrado en la transacción.

    const datos_cs = {
    days_to_event: 55, //Número de días en los que se desarrollara el evento. MANDATORIO
    delivery_type:'Pick up', //Tipo de envío. MANDATORIO. Valores posibles: Pick up, Email, Smartphone, Other
    };
    
      //Datos de productos, un array con los diferentes productos involucrados.
    const cs_productos = [
        {  // Producto 1
          productcode:'electronic_good', //Código de producto. MANDATORIO. Valores posibles(adult_content;coupon;default;electronic_good;electronic_software;gift_certificate;handling_only;service;shipping_and_handling;shipping_only;subscription)
          productdescription:'NOTEBOOK L845 SP4304LA DF TOSHIBA', //Descripción del producto. MANDATORIO.
          productname:'NOTEBOOK L845 SP4304LA DF TOSHIBA', //Nombre del producto. MANDATORIO.
          productsku:'LEVJNSL36GN', //Código identificador del producto. MANDATORIO.
          totalamount:'1254.40', //CSITTOTALAMOUNT=CSITUNITPRICE*CSITQUANTITY "999999[.CC]" Con decimales opcional usando el puntos como separador de decimales. No se permiten comas, ni como separador de miles ni como separador de decimales. MANDATORIO.
          quantity:'1', //Cantidad del producto. MANDATORIO.
          unitprice:'1254.40', //Formato Idem CSITTOTALAMOUNT. MANDATORIO    
        },
        {  // Producto 2
          productcode: 'default', //Código de producto. MANDATORIO. Valores posibles(adult_content;coupon;default;electronic_good;electronic_software;gift_certificate;handling_only;service;shipping_and_handling;shipping_only;subscription)
          productdescription:'PENDRIVE 2GB KINGSTON', //Descripción del producto. MANDATORIO.
          productname: 'PENDRIVE 2GB', //Nombre del producto. MANDATORIO.
          productsku: 'KSPDRV2g', //Código identificador del producto. MANDATORIO.
          totalamount: '248.40', //CSITTOTALAMOUNT=CSITUNITPRICE*CSITQUANTITY "999999[.CC]" Con decimales opcional usando el puntos como separador de decimales. No se permiten comas, ni como separador de miles ni como separador de decimales. MANDATORIO.
          quantity: '1', //Cantidad del producto. MANDATORIO.
          unitprice: '248.40', //Formato Idem CSITTOTALAMOUNT. MANDATORIO     
        },
        // Otros productos
        ];
        

    Para incorporar estos datos en el requerimiento inicial, se debe instanciar un objeto de la clase Ticketing de la siguiente manera.

    var date = new Date().getTime();
    
    args = {
        site_transaction_id: "id_" + date,
        token: token,
        user_id: 'juanpepito',
        payment_method_id: 1,
        bin: "450799",
        amount: 25.50,
        currency: "ARS",
        installments: 1,
        description: "Description of product",
        payment_type: "single",
        sub_payments: [],
        apiKey: "566f2c897b5e4bfaa0ec2452f5d67f13",
        'Content-Type': "application/json"
    };
    const paymentData = new PaymentDataModulo.paymentData(args);
    
    const datos_cs = {
      device_unique_id : "devicefingerprintid",
      days_to_delivery: "55",
      dispatch_method: "storepickup",
      tax_voucher_required: true,
      customer_loyality_number: "123232",
      coupon_code: "cupon22",
    }
    
    var ticketing = new ticketingModulo.ticketingData(datos_cs);
    
    args.data.fraud_detection = ticketing;
    sdk.payment(args, function(result, err) {
        resolve(result);
        console.log("")
        console.log("")
        console.log("Se realiza una petición de pago enviando el payload y el token de pago ")
        console.log("generado anteriormente")
        console.log("")
        console.log("")
        console.log("             PAYMENT REQUEST             ");
        console.log("-----------------------------------------");
        console.log("sendPaymentRequest result:");
        console.log(result);
        console.log("-----------------------------------------");
        console.log("sendPaymentRequest error:");
        console.log(err);
        console.log("-------------------***-------------------");
    });
    

    Volver al inicio

    Digital Goods

    Los siguientes parámetros se deben enviar específicamente para la vertical Digital Goods. Además se deben enviar datos específicos de cada producto involucrado en la transacción.

    const datos_digitalgoods = {
      device_unique_id: 'devicefingerprintid',
      digital_goods_transaction_data: {
            delivery_type: 'Pick up',
        }
    };
    
    //Datos de productos, un array con los diferentes productos involucrados.
    const cs_productos = [
      {  // Producto 1
        productcode : 'electronic_good', //Código de producto. MANDATORIO. Valores posibles(adult_content;coupon;default;electronic_good;electronic_software;gift_certificate;handling_only;service;shipping_and_handling;shipping_only;subscription)
        productdescription : 'NOTEBOOK L845 SP4304LA DF TOSHIBA', //Descripción del producto. MANDATORIO.
        productname : 'NOTEBOOK L845 SP4304LA DF TOSHIBA', //Nombre del producto. MANDATORIO.
        productsku : 'LEVJNSL36GN', //Código identificador del producto. MANDATORIO.
        totalamount : '1254.40', //CSITTOTALAMOUNT=CSITUNITPRICE*CSITQUANTITY "999999[.CC]" Con decimales opcional usando el puntos como separador de decimales. No se permiten comas, ni como separador de miles ni como separador de decimales. MANDATORIO.
        quantity : '1', //Cantidad del producto. MANDATORIO.
        unitprice : '1254.40', //Formato Idem CSITTOTALAMOUNT. MANDATORIO    
      },
      {  // Producto 2
        productcode: 'default', //Código de producto. MANDATORIO. Valores posibles(adult_content;coupon;default;electronic_good;electronic_software;gift_certificate;handling_only;service;shipping_and_handling;shipping_only;subscription)
        productdescription: 'PENDRIVE 2GB KINGSTON', //Descripción del producto. MANDATORIO.
        productname: 'PENDRIVE 2GB', //Nombre del producto. MANDATORIO.
        productsku: 'KSPDRV2g', //Código identificador del producto. MANDATORIO.
        totalamount: '248.40', //CSITTOTALAMOUNT=CSITUNITPRICE*CSITQUANTITY "999999[.CC]" Con decimales opcional usando el puntos como separador de decimales. No se permiten comas, ni como separador de miles ni como separador de decimales. MANDATORIO.
        quantity: '1', //Cantidad del producto. MANDATORIO.
        unitprice: '248.40', //Formato Idem CSITTOTALAMOUNT. MANDATORIO     
      },
        // Otros productos
    ];  
    
    

    Services

    Los siguientes parámetros se deben enviar específicamente para la vertical Services. Además se deben enviar datos específicos de cada producto involucrado en la transacción.

    const datos_services = {
      services_transaction_data: {
            service_type: 'tiposervicio',
            reference_payment_service1: "reference1",
            reference_payment_service2: "reference2",
            reference_payment_service3: "reference3"     
        }
    };
    
    //Datos de productos, un array con los diferentes productos involucrados.
    const cs_productos = [
      {  // Producto 1
        productcode : 'electronic_good', //Código de producto. MANDATORIO. Valores posibles(adult_content;coupon;default;electronic_good;electronic_software;gift_certificate;handling_only;service;shipping_and_handling;shipping_only;subscription)
        productdescription : 'NOTEBOOK L845 SP4304LA DF TOSHIBA', //Descripción del producto. MANDATORIO.
        productname : 'NOTEBOOK L845 SP4304LA DF TOSHIBA', //Nombre del producto. MANDATORIO.
        productsku : 'LEVJNSL36GN', //Código identificador del producto. MANDATORIO.
        totalamount : '1254.40', //CSITTOTALAMOUNT=CSITUNITPRICE*CSITQUANTITY "999999[.CC]" Con decimales opcional usando el puntos como separador de decimales. No se permiten comas, ni como separador de miles ni como separador de decimales. MANDATORIO.
        quantity : '1', //Cantidad del producto. MANDATORIO.
        unitprice : '1254.40', //Formato Idem CSITTOTALAMOUNT. MANDATORIO    
      },
      {  // Producto 2
        productcode: 'default', //Código de producto. MANDATORIO. Valores posibles(adult_content;coupon;default;electronic_good;electronic_software;gift_certificate;handling_only;service;shipping_and_handling;shipping_only;subscription)
        productdescription: 'PENDRIVE 2GB KINGSTON', //Descripción del producto. MANDATORIO.
        productname: 'PENDRIVE 2GB', //Nombre del producto. MANDATORIO.
        productsku: 'KSPDRV2g', //Código identificador del producto. MANDATORIO.
        totalamount: '248.40', //CSITTOTALAMOUNT=CSITUNITPRICE*CSITQUANTITY "999999[.CC]" Con decimales opcional usando el puntos como separador de decimales. No se permiten comas, ni como separador de miles ni como separador de decimales. MANDATORIO.
        quantity: '1', //Cantidad del producto. MANDATORIO.
        unitprice: '248.40', //Formato Idem CSITTOTALAMOUNT. MANDATORIO     
      },
        // Otros productos
    ];  
    
    

    Para incorporar estos datos en el requerimiento inicial, se debe instanciar un objeto de la clase services de la siguiente manera.

    var date = new Date().getTime();
    
    args = {
        site_transaction_id: "id_" + date,
        token: token,
        user_id: 'juanpepito',
        payment_method_id: 1,
        bin: "450799",
        amount: 25.50,
        currency: "ARS",
        installments: 1,
        description: "Description of product",
        payment_type: "single",
        sub_payments: [],
        apiKey: "566f2c897b5e4bfaa0ec2452f5d67f13",
        'Content-Type': "application/json"
    };
    var paymentData = new PaymentDataModulo.paymentData(args);
    
    var datos_cs = {
      device_unique_id : "devicefingerprintid",
      days_to_delivery: "55",
      dispatch_method: "storepickup",
      tax_voucher_required: true,
      customer_loyality_number: "123232",
      coupon_code: "cupon22",
    }
    
    var services = new services.servicesData(datos_cs);
    
    args.data.fraud_detection = services;
    sdk.payment(args, function(result, err) {
    
        resolve(result);
    
        console.log("")
        console.log("")
        console.log("Se realiza una petición de pago enviando el payload y el token de pago ")
        console.log("generado anteriormente")
        console.log("")
        console.log("")
        console.log("             PAYMENT REQUEST             ");
        console.log("-----------------------------------------");
        console.log("sendPaymentRequest result:");
        console.log(result);
        console.log("-----------------------------------------");
        console.log("sendPaymentRequest error:");
        console.log(err);
        console.log("-------------------***-------------------");
    });
    

    Volver al inicio

    Travel

    Los siguientes parámetros se deben enviar específicamente para la vertical Travel.

    const datos_travel = {
          device_unique_id: "devicefingerprintid",
          travel_transaction_data: {
            reservation_code: "GJH784",
            third_party_booking: false,
            departure_city: "EZE",
            final_destination_city: "HND",
            international_flight: true,
            frequent_flier_number: "00000123",
            class_of_service: "class",
            day_of_week_of_flight: 2,
            week_of_year_of_flight: 5,
            airline_code: "AA",
            code_share: "SKYTEAM",
            decision_manager_travel: {
                complete_route: "EZE-LAX:LAX-HND",
                journey_type: "one way",
                departure_date: {
                    departure_time: "2017-05-30T09:00Z",
                    departure_zone: "GMT-0300"
                }
            },
            passengers: {
                email: "juan@mail.com",
                first_name: "Juan",
                last_name: "Perez",
                passport_id: "412314851231",
                phone: "541134356768",
                passenger_status: "gold",
                passenger_type: "ADT"
                }
             ,
             airline_number_of_passengers: 1
    
    }
    

    Para incorporar estos datos en el requerimiento inicial, se debe instanciar un objeto de la clase travel de la siguiente manera.

    var date = new Date().getTime();
    
    args = {
        site_transaction_id: "id_" + date,
        token: token,
        user_id: 'juanpepito',
        payment_method_id: 1,
        bin: "450799",
        amount: 25.50,
        currency: "ARS",
        installments: 1,
        description: "Description of product",
        payment_type: "single",
        sub_payments: [],
        apiKey: "566f2c897b5e4bfaa0ec2452f5d67f13",
        'Content-Type': "application/json"
    };
    var paymentData = new PaymentDataModulo.paymentData(args);
    
    var datos_cs = {
          device_unique_id: "devicefingerprintid",
          travel_transaction_dat: {
            reservation_code: "GJH784",
            third_party_booking: false,
            departure_city: "EZE",
            final_destination_city: "HND",
            international_flight: true,
            frequent_flier_number: "00000123",
            class_of_service: "class",
            day_of_week_of_flight: 2,
            week_of_year_of_flight: 5,
            airline_code: "AA",
            code_share: "SKYTEAM",
            decision_manager_travel: {
                complete_route: "EZE-LAX:LAX-HND",
                journey_type: "one way",
                departure_date: {
                    departure_time: "2017-05-30T09:00Z",
                    departure_zone: "GMT-0300"
                }
            },
            passengers: {
                email: "juan@mail.com",
                first_name: "Juan",
                last_name: "Perez",
                passport_id: "412314851231",
                phone: "541134356768",
                passenger_status: "gold",
                passenger_type: "ADT"
                }
             ,
             airline_number_of_passengers: 1
    
    }
    
    var travel = new travel.travel(datos_cs);
    
    args.data.fraud_detection = travel;
    sdk.payment(args, function(result, err) {
    
        resolve(result);
    
        console.log("")
        console.log("")
        console.log("Se realiza una petición de pago enviando el payload y el token de pago ")
        console.log("generado anteriormente")
        console.log("")
        console.log("")
        console.log("             PAYMENT REQUEST             ");
        console.log("-----------------------------------------");
        console.log("sendPaymentRequest result:");
        console.log(result);
        console.log("-----------------------------------------");
        console.log("sendPaymentRequest error:");
        console.log(err);
        console.log("-------------------***-------------------");
    });
    

    Volver al inicio

    Tablas de Referencia

    Códigos de Medios de pago

    https://decidirv2.api-docs.io/1.0/tablas-de-referencia-e-informacion-para-el-implementador/medios-de-pago-disponibles

    1. Visa Debito no acepta devoluciones parciales en ecommerce.

    Volver al inicio

    Divisas Aceptadas

    Divisa Descripción Código API
    AR$ Pesos Argentinos ARS
    U$S Dólares Americanos USD

    NOTA Si bien la API RESTful de Payway admite compras en Dólares Americanos, la legislación argentina sólo permite transacciones en Pesos Argentinos. Es por esto que Payway recomienda que todas las transacciones se cursen en dicha moneda.

    Volver al inicio

    Provincias

    Provincia Código
    CABA C
    Buenos Aires B
    Catamarca K
    Chaco H
    Chubut U
    Córdoba X
    Corrientes W
    Entre Ríos R
    Formosa P
    Jujuy Y
    La Pampa L
    La Rioja F
    Mendoza M
    Misiones N
    Neuquén Q
    Río Negro R
    Salta A
    San Juan J
    San Luis D
    Santa Cruz Z
    Santa Fe S
    Santiago del Estero G
    Tierra del Fuego V
    Tucumán T

    Volver al inicio