1.0.6 • Published 4 months ago

sdk-node-payway v1.0.6

Weekly downloads
-
License
ISC
Repository
github
Last release
4 months ago

Decidir SDK NODEJS

Modulo para conexión con gateway de pago DECIDIR2

Índice

Introducción

🚀 Flujo de una Transacción con las SDKs

El flujo de una transacción a través de las SDKs consta de dos pasos clave:

  1. Generación de un Token de Pago (por parte del cliente)
  2. Procesamiento del Pago (por parte del comercio)

🌟 Funcionalidades Principales

Nuestras SDKs no solo facilitan la integración del proceso de pago, sino que también ofrecen un conjunto completo de herramientas para:

  • 🔗 Crear links de pago para ventas fáciles y rápidas.
  • 🔒 Implementar 3D Secure (3DS) para una autenticación más robusta.
  • 💳 Realizar pagos con tarjetas tokenizadas evitando almacenar datos sensibles.
  • 🔁 Procesar devoluciones de forma segura y eficiente.
  • 🛡️ Aprovechar Cybersource para garantizar la máxima seguridad en cada transacción.

📚 SDKs Disponibles

Ofrecemos SDKs específicas para diversos lenguajes de programación, permitiendo una integración sencilla y adaptable según tus necesidades.



🎯 Alcance

La SDKs de Node está diseñada para integrarse en aplicaciones móviles y web, permitiendo a los comercios:

  • Realizar cobros mediante múltiples métodos de pago, incluyendo tarjetas de crédito y débito, con soporte para transacciones en distintas monedas, como ARS y USD.
  • Automatizar devoluciones y cancelaciones de transacciones.
  • Generar y gestionar links de pago para ventas sin necesidad de integrar formularios complejos.
  • Soportar autenticación reforzada mediante 3D Secure (3DS).
  • Implementar pagos con tarjetas tokenizadas, protegiendo los datos sensibles de los clientes.

Este alcance cubre tanto soluciones para comercios que desean un proceso de pago simple como para aquellos que requieren flujos personalizados y mayor control sobre cada transacción.

Volver al inicio

📈 Diagrama de Secuencia

El flujo de una transacción a través de las SDKs involucra dos pasos esenciales:

  1. Generar Token de Pago: Se realiza una solicitud utilizando la Llave de Acceso pública (public API Key), enviando los datos sensibles de la tarjeta — como el PAN, mes y año de expiración, código de seguridad, titular, y tipo y número de documento —. A cambio, se recibe un token de pago que permitirá ejecutar la transacción.

  2. Pagar usando el Token de Pago: Con la Llave de Acceso privada (private API Key), se procesa el pago enviando el token generado en el Paso 1, junto con 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 que ilustra el Flujo de un Pago.

imagen de configuracion

Volver al inicio

Instalación del SDK

Opción 1: Descarga directa

  1. Descargar la última versión del SDK
    Haz clic en el botón Download ZIP para obtener el SDK.

  2. Incluir en el proyecto
    Descomprime el archivo descargado e incluye la carpeta del SDK en tu proyecto.

Opción 2: Instalación mediante npm (Recomendada)

La instalación a través de npm es el método que recomendamos y hemos testeado exhaustivamente, asegurando una integración rápida y segura:

npm install sdk-node-payway

Asegúrate de que las dependencias estén definidas en tu archivo package.json, utilizando la versión más actual disponible:

"dependencies": {
  "sdk-node-payway": "^1.0.0"
}

⚠️ Requisitos del entorno

⚠️ El SDK solo es compatible con Node.js versión 18 o superior. ⚠️

Volver al inicio

Versiones de NODEJS soportadas

La versión implementada del SDK está probada y es compatible con Node.js a partir de la versión 18.0.0 inclusive.

Volver al inicio

Manual de Integración

Se encuentra disponible la documentación Manual de Integración Decidir2 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 Decidir. El ambiente se debe definir al instanciar el SDK.

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

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 Decidir. El ambiente se debe instanciar como se indica a continuación. Instanciación de la clase sdk

La misma recibe como parámetros la public key o private key provisto por Decidir para el comercio y el ambiente en que se trabajará.

var publicKey = "b192e4cb99564b84bf5db5550112adea";
var privateKey = "566f2c897b5e4bfaa0ec2452f5d67f13";
var company = "Tienda-Margarita";
var user = "Cristian Arellano";
var ambient = "developer";//valores posibles: "developer" o "production";

const sdk = new sdkModulo.sdk(ambient, publicKey, privateKey, company, user);

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

CampoDescripcionObligRestriccionesEjemplo
site_transaction_idIdentificador único para la operaciónSI8 dígitossite_transaction_id: "170518_35"
tokenToken generado en el primer pasoSI36 dígitos,variabletoken: "03508514-1578-4140-ba02-6bdd65e2af95"
payment_method_idid del tipo de metodo de Pago OfflineSIDos dígitospayment_method_id: "26"
amountMonto de la operación. 6 números enteros y 2 decimalesSI8 dígitos,variableamount: "11.00"
currencySon los días que existen entre el 1er y 2do vencimientoSI3 letrascurrency: "ARS"
payment_typeTipo de pagoSILetraspayment_type: "single"
emailemail del usuario que esta haciendo uso del sitioCondicionalSin validacionemail: "user@mail.com",
invoice_expirationFecha en que vence el cupónSIFormato AAMMDDinvoice_expiration: "191123"
cod_p3Son los dias que existen entre el 1º y 2º vencimiento de la factura.SI2,fijo ("00" si la factura tiene no tiene 2° vencimientos)invoice_expiration: "191123"
cod_p4Días después del 1º vencimiento y hasta que el cliente pueda abonarSI3,fijocod_p4: "123"
clientCodigo ClienteSI8,fijoclient: "12345678"
surchargeRecargo por vencimiento del plazoSI7,variable (5 digitos enteros y 2 decimales)surcharge: "10.01"
payment_modeTipo de metodo de pagoSIStrin "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

CampoDescripcionObligRestriccionesEjemplo
site_transaction_idIdentificador único para la operaciónSI8 dígitossite_transaction_id: "170518_35"
tokenToken generado en el primer pasoSI36 dígitos,variabletoken: "03508514-1578-4140-ba02-6bdd65e2af95"
payment_method_idid del tipo de metodo de Pago OfflineSIDos dígitospayment_method_id: "26"
amountMonto de la operación. 6 números enteros y 2 decimalesSI8 dígitos,variableamount: "11.00"
currencySon los días que existen entre el 1er y 2do vencimientoSI3 letrascurrency: "ARS" o "USD"
payment_typeTipo de pagoSILetraspayment_type: "single"
emailemail del usuario que esta haciendo uso del sitioCondicionalSin validacionemail: "user@mail.com",
invoice_expirationFecha en que vence el cupónSIFormato AAMMDDinvoice_expiration: "191123"
cod_p3Son los dias que existen entre el 1º y 2º vencimiento de la factura.SI2,fijo ("00" si la factura tiene no tiene 2° vencimientos)invoice_expiration: "191123"
cod_p4Días después del 1º vencimiento y hasta que el cliente pueda abonarSI3,fijocod_p4: "123"
clientCodigo ClienteSI8,fijoclient: "12345678"
surchargeRecargo por vencimiento del plazoSI7,variable (5 digitos enteros y 2 decimales)surcharge: "10.01"
payment_modeTipo de metodo de pagoSIStrin "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

CampoDescripcionObligRestriccionesEjemplo
site_transaction_idIdentificador único para la operaciónSI8 dígitossite_transaction_id: "170518_35"
tokenToken generado en el primer pasoSI36 dígitos,variabletoken: "03508514-1578-4140-ba02-6bdd65e2af95"
payment_method_idid del tipo de metodo de Pago OfflineSIDos dígitospayment_method_id: "26"
amountMonto de la operación. 6 números enteros y 2 decimalesSI8 dígitos,variableamount: "11.00"
currencySon los días que existen entre el 1er y 2do vencimientoSI3 letrascurrency: "ARS" o "USD"
payment_typeTipo de pagoSILetraspayment_type: "single"
emailemail del usuario que esta haciendo uso del sitioCondicionalSin validacionemail: "user@mail.com",
invoice_expirationFecha en que vence el cupónSIFormato AAMMDDinvoice_expiration: "191123"
bank_idId de banco de la operacionSIString "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

CampoDescripcionObligRestriccionesEjemplo
site_transaction_idIdentificador único para la operaciónSI8 dígitossite_transaction_id: "170518_35"
tokenToken generado en el primer pasoSI36 dígitos,variabletoken: "03508514-1578-4140-ba02-6bdd65e2af95"
payment_method_idid del tipo de metodo de Pago OfflineSIDos dígitospayment_method_id: "26"
amountMonto de la operación. 6 números enteros y 2 decimalesSI8 dígitos,variableamount: "11.00"
currencySon los días que existen entre el 1er y 2do vencimientoSI3 letrascurrency: "ARS" o "USD"
payment_typeTipo de pagoSILetraspayment_type: "single"
emailemail del usuario que esta haciendo uso del sitioCondicionalSin validacionemail: "user@mail.com",
invoice_expirationFecha en que vence el cupónSIFormato AAMMDDinvoice_expiration: "191123"
second_invoice_expirationSegunda fecha de vencimiento del cupónSIFormato AAMMDDsecond_invoice_expiration: "191123"
cod_p3Son los dias que existen entre el 1º y 2º vencimiento de la factura.SI2,fijo ("00" si la factura tiene no tiene 2° vencimientos)invoice_expiration: "191123"
clientCodigo ClienteSI8,fijoclient: "12345678"
surchargeRecargo por vencimiento del plazoSI7,variable (5 digitos enteros y 2 decimales)surcharge: "10.01"
payment_modeTipo de metodo de pagoSIStrin "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

CampoDescripcionObligRestriccionesEjemplo
site_transaction_idIdentificador único para la operaciónSI8 dígitossite_transaction_id: "170518_35"
tokenToken generado en el primer pasoSI36 dígitos,variabletoken: "03508514-1578-4140-ba02-6bdd65e2af95"
payment_method_idid del tipo de metodo de Pago OfflineSIDos dígitospayment_method_id: "26"
amountMonto de la operación. 6 números enteros y 2 decimalesSI8 dígitos,variableamount: "11.00"
currencySon los días que existen entre el 1er y 2do vencimientoSI3 letrascurrency: "ARS" o "USD"
payment_typeTipo de pagoSILetraspayment_type: "single"
emailemail del usuario que esta haciendo uso del sitioCondicionalSin validacionemail: "user@mail.com",
invoice_expirationFecha en que vence el cupónSIFormato AAMMDDinvoice_expiration: "191123"
second_invoice_expirationSegunda fecha de vencimiento del cupónSIFormato AAMMDDsecond_invoice_expiration: "191123"
cod_p3Son los dias que existen entre el 1º y 2º vencimiento de la factura.SI2,fijo ("00" si la factura tiene no tiene 2° vencimientos)invoice_expiration: "191123"
cod_p4Días después del 1º vencimiento y hasta que el cliente pueda abonarSI3,fijocod_p4: "123"
clientCodigo ClienteSI8,fijoclient: "12345678"
surchargeRecargo por vencimiento del plazoSI7,variable (5 digitos enteros y 2 decimales)surcharge: "10.01"
payment_modeTipo de metodo de pagoSIStrin "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 DECIDIR.

const sdk = new sdkModulo.sdk(ambient, publicKey, privateKey, company, user);

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, company, user);

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);
});

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, company, user);

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": "Decidir_Test",
        "bill_to_refund": "Decidir_Test",
        "merchant_name": "DECIDIR",
        "street": "Lavarden",
        "number": "247",
        "postal_code": "C1437FBE",
        "category": "05044",
        "channel": "005",
        "geographic_code": "C1437",
        "city": "Ciudad de Buenos Aires",
        "merchant_id": "decidir_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": "Decidir_Test",
        "bill_to_refund": "Decidir_Test",
        "merchant_name": "DECIDIR",
        "street": "Lavarden",
        "number": "247",
        "postal_code": "C1437FBE",
        "category": "05044",
        "channel": "005",
        "geographic_code": "C1437",
        "city": "Ciudad de Buenos Aires",
        "merchant_id": "decidir_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.
const sdk = new sdkModulo.sdk(ambient, publicKey, privateKey, company, user);

var args = {
    data: {

    },
    headers: {
        "apikey": "566f2c897b5e4bfaa0ec2452f5d67f13",
        "Content-Type": "application/json",
        "Cache-Control": "no-cache"
    }
};

offset = '10';
pageSize = '20';
siteOperationId = '450799';
merchantId = 'Id001';

sdk.getAllPayments(offset, pageSize, siteOperationId, 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, company, user);

id = result.id;
const args = {
    data: {

    },
    headers: {
        "apikey": "566f2c897b5e4bfaa0ec2452f5d67f13",
        "Content-Type": "application/json",
        "Cache-Control": "no-cache"
    }
};

sdk.paymentInfo(paymentId, 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, company, user);

id = result.id;
const args = {
    data: {

    },
    headers: {
        "apikey": "566f2c897b5e4bfaa0ec2452f5d67f13",
        "Content-Type": "application/json",
        "Cache-Control": ""
    }
};
sdk.refund(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, company, user);

paymentId = result.id;
const args = {
    data: {

    },
    headers: {
        "apikey": "566f2c897b5e4bfaa0ec2452f5d67f13",
        "Content-Type": "application/json",
        "Cache-Control": ""
    }
};
sdk.deleteRefund(args, paymentId, refundId, 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, company, user);

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, company, user);

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 un formulario de pago en el comercio. Primero, utiliza el recurso checkoutHash para generar un hash basado en los datos de la operación. Luego, este hash se emplea al invocar el recurso payments/link, el cual devuelve un enlace personalizado para el formulario de pago del comercio, listo para ser utilizado y completar el flujo de pago.

CampoDescripciónObligatorioRestriccionesEjemplo
origin_platformPlataforma de origen desde la cual se realiza la operaciónAlfanumérico"SDK-Node"
payment_descriptionDescripción del pagoNoAlfanumérico"TEST"
currencyTipo de monedaLetras"ARS" / "USD"
productsDetalle de los productos incluidos en la operaciónNoArray de objetos con id, value, description y quantity{"id": 4444, "value": 19.99, "description": "Remera", "quantity": 2}
total_pricePrecio total de la operaciónNumérico39.98
siteIdentificador único del comercioNumérico"00097002"
success_urlURL a la que se redirige cuando se completa la operación con éxitoURL válida"https://www.lanacion.com/"
redirect_urlURL a la que se redirige con los datos de la operación finalizadaNoURL válida"https://www.infobae.com/"
cancel_urlURL a la que se redirige si el cliente cancela el formularioURL válida"https://www.clarin.com/"
notifications_urlURL donde se enviarán notificaciones relacionadas con la operaciónURL válida"https://twitter.com/"
template_idIdentificador de la plantilla del formulario de pagoNumérico1
installmentsCantidad de cuotas posiblesArray de números1
id_payment_methodIdentificador del método de pago a utilizar (opcional; por defecto incluye todos los métodos)NoNumérico31
plan_gobiernoIndica si se utiliza un plan gubernamentalValores posibles: true, falsefalse
public_apikeyClave pública de autenticaciónAlfanumérico"YKcWXjI2aoSnp60urwLd6TbLYNuybcWC"
auth_3dsIndica si se requiere autenticación 3DSValores posibles: true, falsefalse
life_timeTiempo de vida en segundos del formularioNumérico999999999

Ejemplo

            args = {
                "origin_platform": "SDK-Node",
                "payment_description": "Compra de productos electrónicos",
                "currency": "ARS",
                "products": [
                    {
                    "id": 1001,
                    "value": 1500.50,
                    "description": "Auriculares Bluetooth",
                    "quantity": 1
                    },
                    {
                    "id": 1002,
                    "value": 999.99,
                    "description": "Teclado Mecánico",
                    "quantity": 1
                    }
                ],
                "total_price": 2500.49,
                "site": "12345678",
                "success_url": "https://www.mitienda.com/compra-exitosa",
                "redirect_url": "https://www.mitienda.com/datos-operacion",
                "cancel_url": "https://www.mitienda.com/cancelacion",
                "notifications_url": "https://www.mitienda.com/notificaciones",
                "template_id": 1,
                "installments": [3],
                "id_payment_method": 10,
                "plan_gobierno": true,
                "public_apikey": "abcd1234efgh5678ijkl9012mnop3456",
                "auth_3ds": true,
                "life_time": 3600
            };

            const sdk = new sdkModulo.sdk(ambient, publicKey, privateKey, company, user);

            var checkout = new sdk.checkoutHash(sdk, args).then(function(result) {
                console.log("-----------------------------------------")
                console.log("Link Hash")
                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 Decidir, 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, company, user);

user_id = result.user_id;
const args = {
    data: {

    },
    headers: {
        "apikey": "566f2c897b5e4bfaa0ec2452f5d67f13",
        "Content-Type": "application/json",
        "Cache-Control": "no-cache"
    }
};
setTimeout(function() {
sdk.cardTokens(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, company, user);

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

Solicitud de token de pago con tokenización interna

Estructura de solicitud de token

La estructura TokenRequest representa una solicitud para generar un token asociado a una transacción con tarjeta. Contiene los siguientes campos:

card_data (obligatorio): un objeto que contiene la información de la tarjeta.

card_number (obligatorio): una cadena que representa el número de tarjeta. Longitud máxima: 19 Longitud mínima: 15 Patrón: el número de tarjeta no debe comenzar con un 0 y debe constar únicamente de dígitos numéricos. expiration_date (obligatorio): una cadena que representa la fecha de vencimiento de la tarjeta. Longitud mínima: 1 Patrón: la fecha de vencimiento debe ser una cadena de cuatro dígitos numéricos. card_holder (obligatorio): una cadena que representa el nombre del titular de la tarjeta. Longitud mínima: 1 security_code (obligatorio): una cadena que representa el código de seguridad de la tarjeta (CVV/CVC). Longitud mínima: 1 Patrón: el código de seguridad debe ser una cadena de tres dígitos numéricos. número_cuenta (obligatorio): una cadena que representa el número de cuenta asociado con la tarjeta. Longitud mínima: 1 email_holder (obligatorio): una cadena que representa la dirección de correo electrónico del titular de la tarjeta. Longitud mínima: 1 establecimiento_número (obligatorio): una cadena que representa el número de establecimiento asociado con la transacción.

Longitud mínima: 1 Uso Para usar la estructura TokenRequest, cree una instancia con los campos obligatorios (card_data y establecimiento_number) y complete los detalles de la tarjeta dentro del objeto card_data. Asegúrese de que todos los campos obligatorios tengan valores válidos de acuerdo con las restricciones especificadas.

Validación

Cuando utilice la estructura TokenRequest, asegúrese de que los datos proporcionados cumplan con las restricciones especificadas. Valide los campos antes de usarlos para evitar problemas durante el procesamiento.

Verifique que card_number siga el patrón especificado y los requisitos de longitud. Asegúrese de que expiration_date sea una cadena de cuatro dígitos numéricos. Valide que card_holder no esté vacío o sea nulo. Compruebe que el código_seguridad es una cadena de tres dígitos numéricos. Valide que el número_cuenta no esté vacío o sea nulo. Verifique que email_holder no esté vacío o sea nulo. Asegúrese de que el número_establecimiento no esté vacío ni sea nulo.

Ejemplo de uso

const sdk = new sdkModulo.sdk(ambient, publicKey, privateKey, company, user);

args = {
    card_data: {
        card_number: "4507990000004905",
        expiration_date: "1250",
        card_holder: "Jorge Jorgelin",
        security_code: "123",
        account_number: "12345678901234567890",
        email_holder: "asd@medina.com"
    },
    establishment_number: "11223344"
} 

sdk.internaltokens(args, function(result, err) {
    resolve(result.user_id);
    console.log("")
    console.log("")
    console.log("Se realiza una petición de token enviando el payload ")
    console.log("de la tarjeta tokenizada")
    console.log("")
    console.log("")
    console.log("             PAYMENT REQUEST             ");
    console.log("-----------------------------------------");
    console.log("sendTokenRequest result:");
    console.log(result);
    console.log("-----------------------------------------");
    console.log("sendTokenRequest error:");
    console.log(err);
    console.log("-------------------***-------------------");
});

Volver a inicio

Ejecución de pago con tokenización interna

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 "merchant_id" y "merchant_transaction_id".

La estructura TransactionData representa los datos asociados con una transacción. Contiene los siguientes campos

id_transacción_comerciante (obligatorio): una cadena que representa el identificador único de la transacción del comerciante.

Longitud mínima: 1 original_transaction_id (opcional): una cadena que representa el identificador único de la transacción original.

Longitud máxima: 15 Longitud mínima: 15 id_método_pago (obligatorio): un número entero que representa el identificador del método de pago.

Tipo de datos: entero (32 bits) cantidad (obligatorio): una cadena que representa la cantidad de la transacción.

Longitud máxima: 13 Longitud mínima: 1 Patrón: la cantidad debe ser un número entero positivo sin ceros a la izquierda. moneda (obligatorio): una cadena que representa la moneda utilizada para la transacción.

Longitud mínima: 1 cuotas (opcional): Una cadena que representa el número de cuotas para la transacción.

Patrón: Las cuotas deben ser un número entero positivo. datos_agregados (opcional): un objeto que contiene datos agregados asociados con la transacción.

indicador (opcional): Una cadena que representa un indicador para los datos agregados. número_identificación (opcional): una cadena que representa el número de identificación asociado con los datos agregados. bill_to_pay (opcional): una cadena que representa la factura a pagar por los datos agregados. bill_to_refund (opcional): una cadena que representa la factura a reembolsar para los datos agregados. nombre_comerciante (opcional): una cadena que representa el nombre del comerciante para los datos agregados. street (opcional): una cadena que representa la dirección de la calle para los datos agregados. número (opcional): una cadena que representa el número de casa para los datos agregados. postal_code (opcional): una cadena que representa el código postal para los datos agregados. categoría (opcional): una cadena que representa la categoría de los datos agregados. canal (opcional): una cadena que representa el canal para los datos agregados. código_geográfico (opcional): una cadena que representa el código geográfico para los datos agregados. ciudad (opcional): una cadena que representa la ciudad para los datos agregados. id_comerciante (opcional): una cadena que representa la identificación del comerciante para los datos agregados. provincia (opcional): una cadena que representa la provincia para los datos agregados. país (opcional): una cadena que representa el país para los datos agregados. mercant_email (opcional): una cadena que representa el correo electrónico del comerciante para los datos agregados. mercantil_phone (opcional): una cadena que representa el número de teléfono del comerciante para los datos agregados. tipo_pago (obligatorio): una cadena que representa el tipo de pago.

Longitud mínima: 1 Patrón: el tipo de pago debe ser uno de los siguientes: "único", "dividido" o "recurrente". sub_pagos (obligatorio): una matriz de objetos de subpago que representan pagos individuales dentro de la transacción.

Cada objeto de subpago tiene los siguientes campos: site_id (obligatorio): una cadena que representa el ID del sitio para el subpago. Longitud mínima: 1 cuotas (obligatorio): un número entero que representa el número de cuotas para el subpago. Tipo de datos: entero (32 bits) cantidad (obligatorio): una cadena que representa la cantidad del subpago. Longitud máxima: 13 Longitud mínima: 1

Patrón: la cantidad debe ser un número entero positivo sin ceros a la izquierda.

ticket (opcional): una cadena que representa el ticket asociado con el subpago. card_authorization_code (opcional): una cadena que representa el código de autorización de la tarjeta para el subpago. sub_payment_id (opcional): un número entero que representa el ID del subpago. Tipo de datos: entero (32 bits) estado (opcional): una cadena que representa el estado del subpago. descripción (obligatorio): una cadena que representa la descripción de la transacción.

Longitud mínima: 1 factura (opcional): un objeto que contiene datos de factura asociados con la transacción.

número (obligatorio): una cadena que representa el número de factura. Longitud máxima: 12 Longitud mínima: 1 Patrón: el número de factura debe ser un número entero positivo sin ceros a la izquierda. fecha (obligatorio): una cadena que representa la fecha de la factura. Longitud mínima: 1 Patrón: la fecha debe tener el formato MMDD. store_credential (opcional): un indicador booleano que indica si se deben almacenar los tokens para CIT (transacciones iniciadas por el titular de la tarjeta) y MIT (transacciones iniciadas por el comerciante).

Ejemplo de uso

const sdk = new sdkModulo.sdk(ambient, publicKey, privateKey, company, user);

args = {
    merchant_id: "11223344",
    transaction_data: {
        merchant_transaction_id: "TokenInt{{$randomInt}}",
        payment_method_id: "1",
        amount: "100",
        currency: "ARS",
        installments: "1",
        payment_type: "single",
        sub_payments: [],
        description: "tx-tokenizada"
    },
    customer_data: {
        token_id: "{{token4Crypto}}",
        identification_type: "dni",
        identification_number: "12312312"
    }
}

sdk.cryptogramPayment(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.

const sdk = new sdkModulo.sdk(ambient, publicKey, privateKey, company, user);


args = {
    data: {

    },
    headers: {
        apiKey: "566f2c897b5e4bfaa0ec2452f5d67f13",
        'Content-Type': "application/json",
        'Cache-Control': "no-cache"
    }
}
sdk.deleteCardToken(args, tokenizedCard, 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.

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.

const sdk = new sdkModulo.sdk(ambient, publicKey, privateKey, company, user);

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",
};

Definición y mapeo de los campos de la vertical

A continuación se detallan los campos REST utilizados en la detección de fraudes, junto con su definición, si son requeridos, su formato y longitud.

Nombre del campo en RESTDefiniciónRequerido (SI/NO)FormatoLongitud
fraud_detection.retail_transaction_data.ship_to.cityCiudad de envío de la ordenNO (ver condiciones)String50
fraud_detection.retail_transaction_data.ship_to.countryPaís de envío de la orden. Código ISOFormato mayúsculas, string2
fraud_detection.retail_transaction_data.ship_to.emailCorreo electrónico del compradorFormato mail, string100
fraud_detection.retail_transaction_data.ship_to.first_nameNombre de la persona que recibe el productoString60
fraud_detection.retail_transaction_data.ship_to.last_nameApellido de la persona que recibe el productoString60
fraud_detection.retail_transaction_data.ship_to.postal_codeCódigo postal del domicilio de envíoString10
fraud_detection.retail_transaction_data.ship_to.stateProvincia de envíoString2
fraud_detection.retail_transaction_data.ship_to.street1Domicilio de envíoString100
fraud_detection.retail_transaction_data.ship_to.phone_numberNúmero de teléfono del destinatarioNOString15
fraud_detection.retail_transaction_data.ship_to.street2Localidad de envíoNOString100
fraud_detection.retail_transaction_data.days_to_deliveryNúmero de días que tiene el comercio para hacer la entregaNOString255
fraud_detection.retail_transaction_data.dispatch_methodValores ejemplo: (domicilio, click and collect, carrier)NOString255
fraud_detection.retail_transaction_data.tax_voucher_requiredValor booleano para identificar si el cliente requiere un comprobante fiscal o noNOValores posibles: S/N1
fraud_detection.retail_transaction_data.customer_loyality_numberIncluir numero de cliente frecuenteNOString255
fraud_detection.retail_transaction_data.coupon_codeIncluir numero de cupón de descuentoNOString255
fraud_detection.retail_transaction_data.items.codeCantidad productos del mismo tipo agregados al carritoNOString255
fraud_detection.retail_transaction_data.items.descriptionDescripción general del productoNOString255
fraud_detection.retail_transaction_data.items.nameNombre en catalogo del productoNOString255
fraud_detection.retail_transaction_data.items.skuSKU en catalogoNOString255
fraud_detection.retail_transaction_data.items.total_amountCantidad productos del mismo tipo agregados al carritoNOString10
fraud_detection.retail_transaction_data.items.quantityCantidad del productoNOInteger10
fraud_detection.retail_transaction_data.items.unit_pricePrecio Unitario del productoSIString15

Para incorporar estos datos en el requerimiento inicial, es necesario instanciar un objeto diseñado para realizar pagos en la vertical retail de la siguiente manera, utilizando el método de pago tradicional:

const paymentWithRetailArgs = {
  send_to_cs: true,
  channel: 'web',
  bill_to: {
    city: 'Buenos Aires',
    country: 'AR',
    customer_id: '12345',
    email: 'cliente@correo.com',
    first_name: 'Juan',
    last_name: 'Pérez',
    phone_number: '1112345678',
    postal_code: 'C1001',
    state: 'CABA',
    street1: 'Calle Falsa 123',
    street2: 'Piso 1',
  },
  purchase_totals: {
    currency: 'ARS',
    amount: 2500.50,
  },
  customer_in_site: {
    days_in_site: 120,
    is_guest: false,
    num_of_transactions: 5,
  },
  retail_transaction_data: {
    dispatch_method: 'homeDelivery',
    days_to_delivery: 3,
    items: [
      {
        id: 'PROD001',
        value: 1500.50,
        description: 'Auriculares Bluetooth',
        quantity: 1,
      },
      {
        id: 'PROD002',
        value: 1000.00,
        description: 'Teclado Mecánico',
        quantity: 1,
      },
    ],
  },
};

sdk.payment(paymentWithRetailArgs, 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.

Definición y mapeo de los campos de la vertical

A continuación se detallan los campos REST utilizados en la detección de fraudes para transacciones de ticketing, junto con su definición, si son requeridos, su formato y longitud.

Nombre del campo en RESTDefiniciónRequerido (SI/NO)FormatoLongitud
fraud_detection.ticketing_transaction_data.days_to_eventIncluir número de días en los que se desarrollará el eventoSIString255
fraud_detection.ticketing_transaction_data.delivery_typeValores ejemplo: (Pick up / Email / Smartphone / Other)SIString255
fraud_detection.ticketing_transaction_data.items.codeCódigo del productoSIString255
fraud_detection.ticketing_transaction_data.items.descriptionDescripción general del productoSIString255
fraud_detection.ticketing_transaction_data.items.nameNombre en catálogo del productoSIString255
fraud_detection.ticketing_transaction_data.items.skuSKU en catálogoSIString255
fraud_detection.ticketing_transaction_data.items.total_amountPrecio totalSIString10
fraud_detection.ticketing_transaction_data.items.quantityCantidad de productos del mismo tipo agregados al carrito---
fraud_detection.ticketing_transaction_data.items.unit_pricePrecio unitario del productoSIInteger15

Para incorporar estos datos en el requerimiento inicial, es necesario instanciar un objeto diseñado para realizar pagos en la vertical ticketing de la siguiente manera, utilizando el método de pago tradicional:

const paymentWithTicketingArgs = {
  send_to_cs: true,
  channel: 'web',
  bill_to: {
    city: 'Buenos Aires',
    country: 'AR',
    customer_id: '12345',
    email: 'cliente@correo.com',
    first_name: 'Juan',
    last_name: 'Pérez',
    phone_number: '1112345678',
    postal_code: 'C1001',
    state: 'CABA',
    street1: 'Calle Falsa 123',
    street2: 'Piso 1',
    },
  purchase_totals: {
    currency: 'ARS',
    amount: 2500.50,
    },
  customer_in_site: {
    days_in_site: 120,
    is_guest: false,
    num_of_transactions: 5,
    },
  ticketing_transaction_data: {
    days_to_event: 55,
    delivery_type: "Pick up",
   items: [
            {
                    code: "popblacksabbat2016",
                    description: "Popular Black Sabbath 2016",
                    name: "popblacksabbat2016ss",
                    sku: "1234",
                    total_amount: "242424",
                    quantity: 2,
                    unit_price: 121212
            },
            {
                    code: "popblacksdssabbat2016",
                    description: "Popular Blasdsck Sabbath 2016",
                    name: "Popular Black Sabbath 2018",
                    sku: "12345",
                    total_amount: "111212",
                    quantity: 1,
                    unit_price: 111212
            }
        ]
    }
};

sdk.payment(paymentWithTicketingArgs, 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.

Definición y mapeo de los campos de la vertical

A continuación se detallan los campos REST utilizados en la detección de fraudes para transacciones de bienes digitales, junto con su definición, si son requeridos, su formato y longitud.

Nombre del campo en RESTDefiniciónRequerido (SI/NO)FormatoLongitud
fraud_detection.digital_goods_transaction_data.delivery_typeValores ejemplo: (Pick up / Email / Smartphone / Other)SIString255
fraud_detection.digital_goods_transaction_data.items.codeValores posibles: electronic_good, electronic_softwareSIString255
fraud_detection.digital_goods_transaction_data.items.descriptionDescripción general del productoSIString255
fraud_detection.digital_goods_transaction_data.items.nameNombre en catálogo del productoSIString255
fraud_detection.digital_goods_transaction_data.items.skuSKU en catálogoSIString255
fraud_detection.digital_goods_transaction_data.items.total_amountPrecio totalSIString10
fraud_detection.digital_goods_transaction_data.items.quantityCantidad de productos del mismo tipo agregados al carritoSI--
fraud_detection.digital_goods_transaction_data.items.unit_pricePrecio unitario del productoSIInteger15

Para incorporar estos datos en el requerimiento inicial, es necesario instanciar un objeto diseñado para realizar pagos en la vertical Digital Goods de la siguiente manera, utilizando el método de pago tradicional:

const paymentWithDigitalGoodsArgs = {
  send_to_cs: true,
  channel: 'web',
  bill_to: {
    city: 'Buenos Aires',
    country: 'AR',
    customer_id: '12345',
    email: 'cliente@correo.com',
    first_name: 'Juan',
    last_name: 'Pérez',
    phone_number: '1112345678',
    postal_code: 'C1001',
    state: 'CABA',
    street1: 'Calle Falsa 123',
    street2: 'Piso 1',
    },
  purchase_totals: {
    currency: 'ARS',
    amount: 2500.50,
    },
  customer_in_site: {
    days_in_site: 120,
    is_guest: false,
    num_of_transactions: 5,
    },
  digital_goods_transaction_data: {
   delivery_type: "Pick up",
   items: [
            {
                    code: "popblacksabbat2016",
                    description: "Popular Black Sabbath 2016",
                    name: "popblacksabbat2016ss",
                    sku: "1234",
                    total_amount: "242424",
                    quantity: 2,
                    unit_price: 121212
            },
            {
                    code: "popblacksdssabbat2016",
                    description: "Popular Blasdsck Sabbath 2016",
                    name: "Popular Black Sabbath 2018",
                    sku: "12345",
                    total_amount: "111212",
                    quantity: 1,
                    unit_price: 111212
            }
        ]
    }
};

sdk.payment(paymentWithDigitalGoodsArgs, function(result, err) {
  resolve(result);

  console.log("");
  console.log("");
  console.log("Se realiza una petición de pago enviando el payload y
1.0.6

4 months ago

1.0.5

4 months ago

1.0.4

5 months ago

1.0.3

5 months ago

1.0.2

5 months ago

1.0.1

5 months ago

1.0.0

5 months ago