Todo Pago - módulo SDK-NodeJS para conexión con gateway de pago

Instalación

Se debe descargar la última versión desde del botón Download ZIP o desde https://github.com/TodoPago/sdk-nodejs/archive/master.zip. Una vez descargado y descomprimido, debe incluirse el archivo todo-pago.js como modulo del proyecto.

Instalar con npm:

  npm install todo-pago

[Volver a inicio](#inicio)

Versiones de node soportadas

La versión implementada de la SDK, esta testeada para versiones desde Node 10.x en adelante.
Volver a inicio

Generalidades

Esta versión soporta únicamente pago en moneda nacional argentina (CURRENCYCODE = 32).
Volver a inicio

Uso

Inicializar la clase correspondiente al conector (todo-pago.js)

  • Importar el modulo:
    var sdk = require('../lib/todo-pago');
    
  • crear dos objetos (uno de configuración y el otro con los parametros)
  • La configuración debe contar con el ApiKey provisto por Todo Pago
var parameters = {
};

var options = {
	endpoint : "developers", // "developers" o "production"	
	Authorization:'PRISMA f3d8b72c94ab4a06be2ef7c95490f7d3'
};
  • Los datos como Authorization , merchantId y ApiKey se pueden obtener mediante el metodo getCredentials Obtener Credenciales

[Volver a inicio](#inicio)

Solicitud de autorización

  • En este caso hay que llamar a sendAuthorizeRequest(), el resultado se obtendra mediante la funcion callback:
var parameters = {
		'Session': 'ABCDEF-1234-12221-FDE1-00000200',
		'Security':'f3d8b72c94ab4a06be2ef7c95490f7d3',
		'EncodingMethod':'XML',
		'Merchant':2153,
		'URL_OK':'http,//someurl.com/ok/',
		'URL_ERROR':'http,//someurl.com/fail/'	
	};


var payload = {
		//operation:
		'MERCHANT': "2153",
		'OPERATIONID':"8000",
		'CURRENCYCODE': 032,
		'AMOUNT':"1.00",
	};

var callback = function(result, err){
	console.log(result);
	console.log(err);
}
sdk.sendAutorizeRequest(options, parameters, payload, callback);		

datos propios del comercio
Volver a inicio

Confirmación de transacción

  • En este caso hay que llamar a getAuthorizeAnswer(), enviando como parámetro un objeto como se describe a continuación.
var parameters = {
		'Security'   : 'f3d8b72c94ab4a06be2ef7c95490f7d3', 
		'Merchant' 	 : '2153',
		'RequestKey' : '710268a7-7688-c8bf-68c9-430107e6b9da',
		'AnswerKey'  : '693ca9cc-c940-06a4-8d96-1ab0d66f3ee6'
	};
	
sdk.getAutorizeAnswer(options, parameters, function(result, err){
		console.log("getAutorizeAnswer");
		console.log(result);
		console.log(err);
		console.log("-------------------");
	});


*Importante:El campo AnswerKey se adiciona en la redireccion que se realiza a alguna de las direcciones ( URL ) epecificadas en el servicio SendAurhorizationRequest, esto sucede cuando la transaccion ya fue resuelta y es necesario regresar al Site para finalizar la transaccion de pago, tambien se adiciona el campo Order, el cual tendra el contenido enviado en el campo OPERATIONID. para nuestro ejemplo: http://susitio.com/paydtodopago/ok?Order=27398173292187&Answer=1111-2222-3333-4444-5555-6666-7777

Este método devuelve el resumen de los datos de la transacción.
Volver a inicio

Ejemplo


[Volver a inicio](#inicio)

Modo test

  • Para utlilizar el modo test se debe pasar un end point de prueba (provisto por TODO PAGO).
var options = {
	endpoint : "developers",	
	Authorization:'PRISMA f3d8b72c94ab4a06be2ef7c95490f7d3'
}; // End Point = "developers" para test	

[Volver a inicio](#inicio)

Datos adicionales para prevención de fraude

Parámetros Adicionales en el post inicial:
var payload = {		
'CSBTCITY':'Villa General Belgrano', //Ciudad de facturación, OBLIGATORIO.		
'CSBTCOUNTRY':'AR', //País de facturación. OBLIGATORIO. Código ISO. (http://apps.cybersource.com/library/documentation/sbc/quickref/countries_alpha_list.pdf)		
'CSBTCUSTOMERID':'453458', //Identificador del usuario al que se le emite la factura. OBLIGATORIO. No puede contener un correo electrónico.		
'CSBTIPADDRESS':'192.0.0.4', //IP de la PC del comprador. OBLIGATORIO.		
'CSBTEMAIL':'some@someurl.com', //Mail del usuario al que se le emite la factura. OBLIGATORIO.		
'CSBTFIRSTNAME':'Juan' ,//Nombre del usuario al que se le emite la factura. OBLIGATORIO.		
'CSBTLASTNAME':'Perez', //Apellido del usuario al que se le emite la factura. OBLIGATORIO.		
'CSBTPHONENUMBER':'541160913988', //Teléfono del usuario al que se le emite la factura. No utilizar guiones, puntos o espacios. Incluir código de país. OBLIGATORIO.		
'CSBTPOSTALCODE':'1010', //Código Postal de la dirección de facturación. OBLIGATORIO.		
'CSBTSTATE':'B', //Provincia de la dirección de facturación. OBLIGATORIO. Ver tabla anexa de provincias.		
'CSBTSTREET1':'Some Street 2153', //Domicilio de facturación (calle y nro). OBLIGATORIO.		
'CSBTSTREET2':'Piso 8', //Complemento del domicilio. (piso, departamento). NO OBLIGATORIO.		
'CSPTCURRENCY':'ARS', //Moneda. OBLIGATORIO.		
'CSPTGRANDTOTALAMOUNT':'125.38', //Con decimales opcional usando el puntos como separador de decimales. No se permiten comas, ni como separador de miles ni como separador de decimales. OBLIGATORIO. (Ejemplos:$125,38-> 125.38 $12-> 12 o 12.00)		
'CSMDD7':'', // Fecha registro comprador(num Dias). NO OBLIGATORIO.		
'CSMDD8':'', //Usuario Guest? (Y/N). En caso de ser Y, el campo CSMDD9 no deberá enviarse. NO OBLIGATORIO.		
'CSMDD9':'', //Customer password Hash: criptograma asociado al password del comprador final. NO OBLIGATORIO.		
'CSMDD10':'', //Histórica de compras del comprador (Num transacciones). NO OBLIGATORIO.		
'CSMDD11':'', //Customer Cell Phone. NO OBLIGATORIO.	

//Retail
'CSSTCITY':'Villa General Belgrano', //Ciudad de enví­o de la orden. OBLIGATORIO.		
'CSSTCOUNTRY':'', //País de envío de la orden. OBLIGATORIO.		
'CSSTEMAIL':'some@someurl.com', //Mail del destinatario, OBLIGATORIO.		
'CSSTFIRSTNAME':'Jose', //Nombre del destinatario. OBLIGATORIO.		
'CSSTLASTNAME':'Perez', //Apellido del destinatario. OBLIGATORIO.		
'CSSTPHONENUMBER':'541155893737', //Número de teléfono del destinatario. OBLIGATORIO.		
'CSSTPOSTALCODE':'1010', //Código postal del domicilio de envío. OBLIGATORIO.		
'CSSTSTATE':'B', //Provincia de envío. OBLIGATORIO. Son de 1 caracter		
'CSSTSTREET1':'Some Street 2153', //Domicilio de envío. OBLIGATORIO.		
'CSMDD12':'',//Shipping DeadLine (Num Dias). NO MADATORIO.		
'CSMDD13':'',//Método de Despacho. NO OBLIGATORIO.		
'CSMDD14':'',//Customer requires Tax Bill ? (Y/N). NO OBLIGATORIO.		
'CSMDD15':'',//Customer Loyality Number. NO OBLIGATORIO. 		
'CSMDD16':'',//Promotional / Coupon Code. NO OBLIGATORIO. 		
//Datos a enviar por cada producto, los valores deben estar separado con #:		
'CSITPRODUCTCODE':'electronic_good', //Código de producto. CONDICIONAL. Valores posibles(adult_content;coupon;default;electronic_good;electronic_software;gift_certificate;handling_only;service;shipping_and_handling;shipping_only;subscription)		
'CSITPRODUCTDESCRIPTION':'Test Prd Description', //Descripción del producto. CONDICIONAL.		
'CSITPRODUCTNAME':'TestPrd', //Nombre del producto. CONDICIONAL.		
'CSITPRODUCTSKU':'SKU1234', //Código identificador del producto. CONDICIONAL.		
'CSITTOTALAMOUNT':'10.01', //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. CONDICIONAL.		
'CSITQUANTITY':'1', //Cantidad del producto. CONDICIONAL.		
'CSITUNITPRICE':'10.01', //Formato Idem CSITTOTALAMOUNT. CONDICIONAL.			
	...........................................................		

Volver a inicio

Características

Status de la operación

  • La SDK cuenta con un método para consultar el status de la transacción desde la misma SDK. El método se utiliza de la siguiente manera:
sdk.getStatus(options, merchant, operationId, callback);// Merchant es el id site y operationId es el id operación que se envió en el objeto a través del método sendAuthorizeRequest() 
  • Dicho método retornara el status actual de la transacción en Todopago.

[Volver a inicio](#inicio)

Consulta de operaciones por rango de tiempo

En este caso hay que llamar a getByRangeDateTime() y devolvera todas las operaciones realizadas en el rango de fechas dado


	var parameters = {
		'MERCHANT': '2153',
		'STARTDATE': '2015-01-01T17:34:42.903',
		'ENDDATE': '2015-12-10T17:34:42.903'
	};
	
	sdk.getByRangeDateTime(options, parameters, function(result, err){
		console.log("-------------------***-------------------");
		console.log("GetByRangeDateTime");
		console.log(result);
		console.log(err);
		console.log("-------------------***-------------------");
	});
	


[Volver a inicio](#inicio)

Devoluciones

La SDK dispone de métodos para realizar la devolución online, total o parcial, de una transacción realziada a traves de TodoPago.

  • Devolución Total
  • Se debe llamar al método voidRequest de la siguiente manera:

	var parameters = {
		'Security': '108fc2b7c8a640f2bdd3ed505817ffde',
		'Merchant': '2669',
		'RequestKey': '0d801e1c-e6b1-672c-b717-5ddbe5ab97d6',
		'AMOUNT': 1.00
	};
	
	sdk.voidRequest(options, parameters, function(result, err){
		console.log("-------------------***-------------------");
		console.log("VoidRequest");
		console.log(result);
		console.log(err);
		console.log("-------------------***-------------------");
	});
  • También se puede llamar al método voidRequest de la esta otra manera:

	var parameters = {
		'Security': '108fc2b7c8a640f2bdd3ed505817ffde',
		'Merchant': '2669',
		'AuthorizationKey': '0d801e1c-e6b1-672c-b717-5ddbe5ab97d6',
		'AMOUNT': 1.00
	};
	
	sdk.voidRequest(options, parameters, function(result, err){
		console.log("-------------------***-------------------");
		console.log("VoidRequest");
		console.log(result);
		console.log(err);
		console.log("-------------------***-------------------");
	});

</br>
[<sub>Volver a inicio</sub>](#inicio)	

<a name="devolucionparcial"></a>		
#### Devolucion parcial		
Se debe llamar al método ```returnRequest``` de la siguiente manera:
```nodejs

	var parameters = {
		'Security': '108fc2b7c8a640f2bdd3ed505817ffde',
		'Merchant': '2669',
		'RequestKey': '0d801e1c-e6b1-672c-b717-5ddbe5ab97d6',
		'AMOUNT': 1.00
	};
	
	sdk.returnRequest(options, parameters, function(result, err){
		console.log("-------------------***-------------------");
		console.log("ReturnRequest");
		console.log(result);
		console.log(err);
		console.log("-------------------***-------------------");
	});

También se puede llamar al método returnRequest de la esta otra manera:


	var parameters = {
		'Security': '108fc2b7c8a640f2bdd3ed505817ffde',
		'Merchant': '2669',
		'AuthorizationKey': '0d801e1c-e6b1-672c-b717-5ddbe5ab97d6',
		'AMOUNT': 1.00
	};
	
	sdk.returnRequest(options, parameters, function(result, err){
		console.log("-------------------***-------------------");
		console.log("ReturnRequest");
		console.log(result);
		console.log(err);
		console.log("-------------------***-------------------");
	});

[Volver a inicio](#inicio)

Formulario hibrido

Conceptos basicos
El formulario hibrido, es una alternativa al medio de pago actual por redirección al formulario externo de TodoPago.
Con el mismo, se busca que el comercio pueda adecuar el look and feel del formulario a su propio diseño.

Libreria
El formulario requiere incluir en la pagina una libreria Javascript de TodoPago.
El endpoint depende del entorno:

Restricciones y libertades en la implementación

  • Ninguno de los campos del formulario podrá contar con el atributo name.
  • Se deberá proveer de manera obligatoria un botón para gestionar el pago con Billetera Todo Pago.
  • Todos los elementos de tipo son completados por la API de Todo Pago.
  • Los campos tienen un id por defecto. Si se prefiere utilizar otros ids se deberán especificar los mismos cuando se inicialice el script de Todo Pago.
  • Pueden aplicarse todos los detalles visuales que se crean necesarios, la API de Todo Pago no altera los atributos class y style.
  • Puede utilizarse la API para setear los atributos placeholder del formulario, para ello deberá especificar dichos placeholders en la inicialización del formulario "window.TPFORMAPI.hybridForm.setItem". En caso de que no se especifiquen los placeholders se usarán los valores por defecto de la API.

HTML del formulario

El formulario implementado debe contar al menos con los siguientes campos.

<body>
	<select id="formaDePagoCbx"></select>
	<select id="bancoCbx"></select>
	<select id="promosCbx"></select>
	<label id="labelPromotionTextId"></label>
	<input id="numeroTarjetaTxt"/>
	<input id="mesTxt"/>
	<input id="anioTxt"/>
	<input id="codigoSeguridadTxt"/>
	<label id="labelCodSegTextId"></label>
	<input id="apynTxt"/>
	<select id="tipoDocCbx"></select>
	<input id="nroDocTxt"/>
	<input id="emailTxt"/><br/>
	<button id="MY_btnConfirmarPago"/>
</body>

Inizialización y parametros requeridos
Para inicializar el formulario se usa window.TPFORMAPI.hybridForm.initForm. El cual permite setear los elementos y ids requeridos.

Para inicializar un ítem de pago, es necesario llamar a window.TPFORMAPI.hybridForm.setItem. Este requiere obligatoriamente el parametro publicKey que corresponde al PublicRequestKey (entregado por el SAR). Se sugiere agregar los parametros usuario, e-mail, tipo de documento y numero.

Javascript

window.TPFORMAPI.hybridForm.initForm({
    callbackValidationErrorFunction: 'validationCollector',
	callbackCustomSuccessFunction: 'customPaymentSuccessResponse',
	callbackCustomErrorFunction: 'customPaymentErrorResponse',
	botonPagarId: 'MY_btnConfirmarPago',
	modalCssClass: 'modal-class',
	modalContentCssClass: 'modal-content',
	beforeRequest: 'initLoading',
	afterRequest: 'stopLoading'
});

window.TPFORMAPI.hybridForm.setItem({
    publicKey: 'taf08222e-7b32-63d4-d0a6-5cabedrb5782', //obligatorio
    defaultNombreApellido: 'Usuario',
    defaultNumeroDoc: 20234211,
    defaultMail: 'todopago@mail.com',
    defaultTipoDoc: 'DNI'
});

//callbacks de respuesta del pago
function validationCollector(parametros) {
}
function customPaymentSuccessResponse(response) {
}
function customPaymentErrorResponse(response) {
}
function initLoading() {
}
function stopLoading() {
}

Callbacks
El formulario define callbacks javascript, que son llamados según el estado y la informacion del pago realizado:

  • customPaymentSuccessResponse: Devuelve response si el pago se realizo correctamente.
  • customPaymentErrorResponse: Si hubo algun error durante el proceso de pago, este devuelve el response con el codigo y mensaje correspondiente.

Ejemplo de Implementación: Formulario hibrido

Volver a inicio

Obtener Credenciales

  • Los datos como Authorization , merchantId y ApiKey se pueden obtener mediante el metodo getCredentials del objeto User llamada desde el sdk.

  • se debe pasar por parametro los datos de ingreso de todoPago (mail y password) en caso de no tener una cuenta podes registrarte en http://www.todopago.com.ar/registrate y generar tus credenciales en herramientas -> comercios:integración

  • un ejemplo esta en ejemplo/ejemplo.js

	var email = 'sebastian.macias@gmail.com';
	var pass = 'Password01';

	sdk.getCredentials(email, pass, options ,  function(result, err){
		console.log("-------------------***-------------------");
		console.log("getCredentials:");
		console.log(result);
		console.log('err: ');
		console.log(err);
		console.log("-------------------***-------------------");
	});



[Volver a inicio](#inicio)

Diagrama de secuencia

imagen de configuracion
Volver a inicio

Tablas de referencia

######Códigos de Estado ######Provincias

Codigos de Estado

IdEstadoDescripción
1Ingresada
2A procesar
3Procesada
4Autorizada
5Rechazada
6Acreditada
7Anulada
8Anulación Confirmada
9Devuelta
10Devolución Confirmada
11Pre autorizada
12Vencida
13Acreditación no cerrada
14Autorizada *
15A reversar
16A registar en Visa
17Validación iniciada en Visa
18Enviada a validar en Visa
19Validada OK en Visa
20Recibido desde Visa
21Validada no OK en Visa
22Factura generada
23Factura no generada
24Rechazada no autenticada
25Rechazada datos inválidos
28A registrar en IdValidador
29Enviada a IdValidador
32Rechazada no validada
38Timeout de compra
50Ingresada Distribuida
51Rechazada por grupo
52Anulada por grupo

Provincias

Solo utilizado para incluir los datos de control de fraude

ProvinciaCódigo
CABAC
Buenos AiresB
CatamarcaK
ChacoH
ChubutU
CórdobaX
CorrientesW
Entre RíosE
FormosaP
JujuyY
La PampaL
La RiojaF
MendozaM
MisionesN
NeuquénQ
Río NegroR
SaltaA
San JuanJ
San LuisD
Santa CruzZ
Santa FeS
Santiago del EsteroG
Tierra del FuegoV
TucumánT

[Volver a inicio](#inicio)

Tabla de errores

Id mensajeMensaje
-1Aprobada.
1081Tu saldo es insuficiente para realizar la transacción.
1100El monto ingresado es menor al mínimo permitido
1101El monto ingresado supera el máximo permitido.
1102La tarjeta ingresada no corresponde al Banco indicado. Revisalo.
1104El precio ingresado supera al máximo permitido.
1105El precio ingresado es menor al mínimo permitido.
2010En este momento la operación no pudo ser realizada. Por favor intentá más tarde. Volver a Resumen.
2031En este momento la validación no pudo ser realizada, por favor intentá más tarde.
2050Lo sentimos, el botón de pago ya no está disponible. Comunicate con tu vendedor.
2051La operación no pudo ser procesada. Por favor, comunicate con tu vendedor.
2052La operación no pudo ser procesada. Por favor, comunicate con tu vendedor.
2053La operación no pudo ser procesada. Por favor, intentá más tarde. Si el problema persiste comunicate con tu vendedor
2054Lo sentimos, el producto que querés comprar se encuentra agotado por el momento. Por favor contactate con tu vendedor.
2056La operación no pudo ser procesada. Por favor intentá más tarde.
2057La operación no pudo ser procesada. Por favor intentá más tarde.
2059La operación no pudo ser procesada. Por favor intentá más tarde.
90000La cuenta destino de los fondos es inválida. Verificá la información ingresada en Mi Perfil.
90001La cuenta ingresada no pertenece al CUIT/ CUIL registrado.
90002No pudimos validar tu CUIT/CUIL. Comunicate con nosotros acá para más información.
99900El pago fue realizado exitosamente
99901No hemos encontrado tarjetas vinculadas a tu Billetera. Podés adherir medios de pago desde www.todopago.com.ar
99902No se encontro el medio de pago seleccionado
99903Lo sentimos, hubo un error al procesar la operación. Por favor reintentá más tarde.
99970Lo sentimos, no pudimos procesar la operación. Por favor reintentá más tarde.
99971Lo sentimos, no pudimos procesar la operación. Por favor reintentá más tarde.
99977Lo sentimos, no pudimos procesar la operación. Por favor reintentá más tarde.
99978Lo sentimos, no pudimos procesar la operación. Por favor reintentá más tarde.
99979Lo sentimos, el pago no pudo ser procesado.
99980Ya realizaste un pago en este sitio por el mismo importe. Si querés realizarlo nuevamente esperá 5 minutos.
99982En este momento la operación no puede ser realizada. Por favor intentá más tarde.
99983Lo sentimos, el medio de pago no permite la cantidad de cuotas ingresadas. Por favor intentá más tarde.
99984Lo sentimos, el medio de pago seleccionado no opera en cuotas.
99985Lo sentimos, el pago no pudo ser procesado.
99986Lo sentimos, en este momento la operación no puede ser realizada. Por favor intentá más tarde.
99987Lo sentimos, en este momento la operación no puede ser realizada. Por favor intentá más tarde.
99988Lo sentimos, momentaneamente el medio de pago no se encuentra disponible. Por favor intentá más tarde.
99989La tarjeta ingresada no está habilitada. Comunicate con la entidad emisora de la tarjeta para verificar el incoveniente.
99990La tarjeta ingresada está vencida. Por favor seleccioná otra tarjeta o actualizá los datos.
99991Los datos informados son incorrectos. Por favor ingresalos nuevamente.
99992La fecha de vencimiento es incorrecta. Por favor seleccioná otro medio de pago o actualizá los datos.
99993La tarjeta ingresada no está vigente. Por favor seleccioná otra tarjeta o actualizá los datos.
99994El saldo de tu tarjeta no te permite realizar esta operacion.
99995La tarjeta ingresada es invalida. Seleccioná otra tarjeta para realizar el pago.
99996La operación fué rechazada por el medio de pago porque el monto ingresado es inválido.
99997Lo sentimos, en este momento la operación no puede ser realizada. Por favor intentá más tarde.
99998Lo sentimos, la operación fue rechazada. Comunicate con la entidad emisora de la tarjeta para verificar el incoveniente o seleccioná otro medio de pago.
99999Lo sentimos, la operación no pudo completarse. Comunicate con la entidad emisora de la tarjeta para verificar el incoveniente o seleccioná otro medio de pago.

Volver a inicio