Skip to content

pjmr1306/SDK-Java

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

Instalación

Se debe descargar la última versión del SDK desde el botón Download ZIP del branch master.

En caso de utilizar Maven, se puede agregar el jar TodoPago.jar al repositorio local de Maven utilizando la siguinte linea de comando:

mvn install:install-file -Dfile=<path-to-file> -DpomFile=<path-to-pomfile>

Una vez hecho esto se puede agregar la dependencia a este paquete desde el pom.xml

<dependency>
	<groupId>com.ar.todopago</groupId>
	<artifactId>sdk-java</artifactId>
	<version>1.5.0</version>
</dependency>

De ser necesario agregar la siguiente dependencia requerida por TodoPago desde el pom.xml

<dependency>
   <groupId>org.json</groupId>
   <artifactId>json</artifactId>
    <version>20090211</version>
 </dependency>

Una vez descargado se deben hacer los siguientes imports.

import ar.com.todopago.api.ElementNames;
import ar.com.todopago.api.TodoPagoConector;
import ar.com.todopago.api.model.*;
import ar.com.todopago.api.exceptions.*;

El Ejemplo es un proyecto hecho en maven, con un pom.xml que incluye la configuracion para importar y exportar las librerias requeridas.

Para agregar el proyecto de ejemplo a Eclipse, una vez descargado, por consola ir hasta su carpeta y ejecutar las siguientes lineas:

mvn clean install -Dwtpversion=2.0
mvn eclipse:clean eclipse:eclipse -Dwtpversion=2.0

Luego, importar el proyecto normalmente en Eclipse.

1. Versiones de Java soportadas

La versión implementada de la SDK, esta testeada para versiones desde Java 5 en adelante con JAX-WS.

2. Generalidades

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

Volver a inicio

Uso

Inicializar la clase correspondiente al conector (TodoPago\Sdk).

Si se cuenta con los http header suministrados por Todo Pago

  • Crear un Map con dichos http header
Map<String, List<String>> auth = new HashMap<String, List<String>>();
auth.put(ElementNames.Authorization, Collections.singletonList("PRISMA f3d8b72c94ab4a06be2ef7c95490f7d3"));
  • Crear una instancia de la clase TodoPago
TodoPagoConector tpc = new TodoPagoConector(TodoPagoConector.developerEndpoint, auth);//End Point developer y http_header provisto por TODO PAGO	

Si se cuenta el con User y Password del login en TodoPago

  • Crear una instancia de la clase TodoPago
TodoPagoConector tpc = new TodoPagoConector(TodoPagoConector.developerEndpoint);//End Point developer
  • Obtener las credenciales a traves del método getCredentials de TodoPago. Ver Obtener Credenciales

### Operatoria Agrupador

Mediante una única y simple adhesión, los vendedores acceden a todos los medios de pago que el Botón de pago ofrezca sin necesidad de contar con ningún tipo de contrato adicional con cada medio de pago. La funcionalidad “agrupador” de TodoPago, se ocupa de gestionar los acuerdos necesarios con todos los medios de pago a efectos de disponibilizarlos en el Botón.

Para acceder al servicio, los vendedores podrán adherirse en el sitio exclusivo de TodoPago o a través de su ejecutivo comercial. En estos procesos se generará el usuario y clave para este servicio.

Una vez adheridos se creará automáticamente una cuenta virtual, en la cual se acreditarán los fondos provenientes de los cobros realizados con la presente modalidad de pago.


## Diagrama de secuencia

imagen de configuracion


#### Solicitud de autorización En este caso hay que llamar a sendAuthorizeRequest().
Map<String, Object> a = tpc.sendAuthorizeRequest(parameters, getFraudControlParameters());		

Datos propios del comercio El primer atributo parameters, debe ser un Map<String, String> con la siguiente estructura:

Campo Requerido Descripción Tipo de Dato Valores posibles / Ejemplo
Security API Keys sin PRISMA o TODOPAGO y sin espacio. Alfanumérico hasta 32 caracteres 912EC803B2CE49E4A541068D495AB570
Merchant Nro. de Comercio (Merchant ID) provisto por TodoPago Numérico 12345678
URL_OK No URL a la que el comprador será dirigido cuando la compra resulte exitosa Alfanumérico hasta 256 caracteres http://susitio.com/payment/Ok
URL_Error No URL a la que el comprador será dirigido cuando la compra no resulte exitosa Alfanumérico hasta 256 caracteres http://susitio.com/payment/Error
OPERATIONID Identificación de la transacción para el Comercio. Debe ser distinto para cada operación. Alfanumérico de 1 a 40 caracteres 10000012
CURRENCYCODE Tipo de moneda de la operación. Sólo válido pesos argentinos (32) Numérico de dos posiciones 32
AMOUNT Importe en Pesos de la transacción. Numérico con 9 dígitos con hasta 2 decimales 999999[.CC] Usando el punto como separador de decimales. No se permiten comas, ni como separador de miles ni como separador de decimales. $125,38 -> 125.38
EMAILCLIENTE Si El comercio deberá enviar a TodoPago el email del cliente. Esta dirección se utilizará para enviar el mail de confirmación de la compra al cliente Alfanumérico de hasta 80 caracteres. cliente@mail.com
Map<String, String> parameters = new HashMap<String, String>();
	parameters.put(ElementNames.Session, "ABCDEF-1234-12221-FDE1-00000200");
	parameters.put(ElementNames.Security, "1234567890ABCDEF1234567890ABCDEF");
	parameters.put(ElementNames.EncodingAlfanumérico de 1 a 8 caracteres.Method, "XML");
	parameters.put(ElementNames.Merchant, "12345678"); //dato fijo (número identificador del comercio)
	parameters.put(ElementNames.OperationID, "8000"); //número único que identifica la operación, generado por el comercio.
	parameters.put(ElementNames.CurrencyCode, "032"); //por el momento es el único tipo de moneda aceptada
	parameters.put(ElementNames.Amount, "1.00");
	parameters.put(ElementNames.UrlOK, "http,//someurl.com/ok/");
	parameters.put(ElementNames.UrlError, "http,//someurl/fail/");
	parameters.put(ElementNames.EMAILCLIENTE, "some@someurl.com");

Datos prevención de fraude: El segundo atributo getFraudControlParameter().

Ver Datos adicionales para prevención de fraude

Respuesta

CampoRequeridoDescripciónTipo de DatoValores posibles / Ejemplo
**StatusCode**Código de estado o valor de retorno del ServicioNumérico de 5 posiciones
  • -1 -> OK
  • otro ->Error
**StatusMessage**Descripción del códgo de retorno o estado del servicioAlfanumérico hasta 256Ejemplo: Solicitud de Autorización Registrada
**URL_Request**Url del formulario de pagoURLhttps://forms.todopago.com.ar/formulario/commands?command=formulario&m=t7d3938c9-f7b1-4ee9-e76b-9cc84f73fe81
**RequestKey**NoIdentificador Privado del Requerimiento obtenido en la respuesta de la operación SendAuthorizeRequest. Nunca debe ser expuesto hacia el Web Browser. Solo será utilizado entre el ecommerce y TodoPagoAlfanumérico hasta 48 caracteres8496472a-8c87-e35b-dcf2-94d5e31eb12f
**PublicRequestKey**NoIdentificador Público del Requerimiento obenido en la respuesta de la operación SendAuthorizeRequestAlfanumérico de hasta 48 caracterest7d3938c9-f7b1-4ee9-e76b-9cc84f73fe81
Map<String, Object> 	
	{ StatusCode = -1,
	  PublicRequestKey = te0b9bba5-cff9-173a-20da-b9bc8a389ac7, 
	  URL_Request = https://developers.todopago.com.ar/formulario/commands?command=formulario&m=te0b9bba5-cff9-173a-20da-b9bc8a389ac7, 
	  StatusMessage = Solicitud de Autorizacion Registrada, 
	  RequestKey = ff0f6434-a2ab-e87f-3ece-37f7081e671a }

La URL_Request es donde está hosteado el formulario de pago y donde hay que redireccionar al usuario, una vez realizado el pago según el éxito o fracaso del mismo, el formulario redireccionará a una de las 2 URLs seteadas en parameters (URL_OK, en caso de éxito o [URL_ERROR](Alfanumérico de 1 a 8 caracteres.#url_error), en caso de que por algún motivo el formulario rechace el pago)

Si, por ejemplo, se pasa mal el MerchantID se obtendrá la siguiente respuesta:

Map<String, Object> 
	{ StatusCode = 702,
	  StatusMessage = ERROR: Cuenta Inexistente,
	  PublicRequestKey = null, 
	  URL_Request = null, 
	  RequestKey = null }

Confirmación de transacción.

En este caso hay que llamar a getAuthorizeAnswer(), enviando como parámetro un Map<String, String> como se describe a continuación.

Campo Requerido Descripción Tipo de Dato Valores posibles / Ejemplo
Security No Token de Seguridad Generado en el Portal de TodoPago Alfanumérico hasta 32 caracteres 1234567890ABCDEF1234567890ABCDEF
Merchant Si Nro. de Comercio (Merchant ID) provisto por TodoPago Alfanumérico de 8 caracteres 12345678
RequestKey Si Identificador Privado del Requerimiento obtenido en la respuesta de la operación SendAuthorizeRequest . Nunca debe ser expuesto hacia el Web Browser. Solo será utilizado entre el ecommerce y TodoPago Alfanumérico hasta 48 caracteres 8496472a-8c87-e35b-dcf2-94d5e31eb12f
AnswerKey Identificador Público de la Respuesta. Recibido según el formulario utilizado, en la url de redirección hacia el ecommerce, o como propiedad retornada en el callback del formulario híbrido. Alfanumérico hasta 48 caracteres 8496472a-8c87-e35b-dcf2-94d5e31eb12f
Map<String, String> parameters = new HashMap<String, String>();		
	parameters.put(ElementNames.Security, "1234567890ABCDEF1234567890ABCDEF"); // Token de seguridad, provisto por TODO PAGO. MANDATORIO.
	parameters.put(ElementNames.Merchant, "12345678");
	parameters.put(ElementNames.RequestKey, "0123-1234-2345-3456-4567-5678-6789");
	parameters.put(ElementNames.AnswerKey, "1111-2222-3333-4444-5555-6666-7777"); // *Importante

Map<String, Object> b = tpc.getAuthorizeAnswer(parameters);	

Se deben guardar y recuperar los valores de los campos RequestKey y AnswerKey.

El parámetro RequestKey es siempre distinto y debe ser persistido de alguna forma cuando el comprador es redirigido al formulario de pagos.

Importante El campo AnswerKey se adiciona en la redirección que se realiza a alguna de las direcciones ( URL ) epecificadas en el servicio SendAurhorizationRequest, esto sucede cuando la transacción ya fue resuelta y es necesario regresar al site para finalizar la transacción de pago, también se adiciona el campo Order, el cual tendrá 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

CampoRequeridoDescripciónTipo de DatoValores posibles / Ejemplo
**StatusCode** SiCódigo de estado o valor de retorno del ServicioNumèrico de 5 posiciones -1 -> OK
0 a 99999 o vacío -> error
**StatusMessage**SiDescripción del código de retorno o estado del servicioAlfanumérico hasta 256Ejemplo: "APROBADA"
**AuthorizationKey**NoIdentificador Privado de la RespuestaAlfanumérico hasta 256 caracteresEjemplo: "9c2f0109-e585-0776-d3d0-f934ed50ccd4"
**EncodingMethod**NoEspecifica el tipo codificación que se usa para los datos de la transacciones de pagosAlfanumérico hasta 16 caracteresXML
**Payload**NoDocumento codificado en el formato especificado en el campo EncodingMethod el cual contiene los datos de la transacción ejecutadaAlfanumérico hasta 2048 caracteres-
.

El campo o elemento Payload es utilizado para retornar los datos de la respuesta de la transacción. En la siguiente Tabla se muestran los valores enviados en el campo Answer de dicho elemento. (El otro campo presente, de nombre Request contiene información enviada en el requerimiento del GetAuthorizeAnswer)

CampoRequeridoDescripciónTipo de DatoValores posibles / Ejemplo
**DATETIME**SiFecha y Hora de la TransacciónFecha y Hora. aaaammddTHHMMSSZ La hora se expresa en formato 24 hs.Ejemplo: "2017-07-28T15:54:14Z"
**RESULTCODE**SiCódigo de estado o valor de retorno del ServicioNumérico de 5 posiciones -1 -> OK
0 a 99999 o vacío -> error
**RESULTMESSAGE**SiDescripción del código de retorno o estado del servicioAlfanumérico hasta 256Ejemplo: "APROBADA"
**CURRENCYNAME**NoNombre de la MonedaAlfanuméricoEjemplo: "Peso Argentino"
**PAYMENTMETHODNAME**Medio de pago usado para la operaciónAlfanuméricoEjemplo: "VISA"
**TICKETNUMBER** NoNúmero de Ticket o VoucherNumérico de Hasta 4 dígitosEjemplo: 7057
**CARDNUMBERVISIBLE**NoNúmero de Tarjeta, enmascarado según normativas nacionales, regionales o globalesEjemplo: "450799XXXXXX0010"
**AUTHORIZATIONCODE**NoCódigo de AutorizaciónAlfanumérico de hasta 8 caracteresEjemplo: "014158"
**INSTALLMENTPAYMENTS**NoCantidad de cuotas elegidas para la operaciónNumérico Ejemplo: 03
**AMOUNTBUYER**SiMonto final (incluyendo Costo Financiero) pagado por el compradorDecimal Ejemplo: 129.68
**CFT**SiCFT de la promoción aplicada.Decimal Ejemplo: 0.00
**TEA**SiTEA de la promoción aplicada.Decimal Ejemplo: 22.00
Map<String, Object>		
	{ StatusCode = -1, 		
      StatusMessage = APROBADA,		
	  AuthorizationKey = 1294-329E-F2FD-1AD8-3614-1218-2693-1378,		
      EncodingMethod = XML,		
      Payload = { Answer = { DATETIME = 2014/08/11 15:24:38,		
						     RESULTCODE = -1,		
							 RESULTMESSAGE = APROBADA,		
							 CURRENCYNAME = Pesos,		
							 PAYMENTMETHODNAME = VISA,		
							 TICKETNUMBER = 12,		
							 CARDNUMBERVISIBLE = 450799******4905,		
							 AUTHORIZATIONCODE = TEST38,
							 INSTALLMENTPAYMENTS = 6,
							 TEA = 22.00,
							 CFT = 0.00
							 }, 
				{ Request = { MERCHANT = 12345678,
						      OPERATIONID = ABCDEF-1234-12221-FDE1-00000012,
							  AMOUNT = 1.00,
							  CURRENCYCODE = 032}
				}
	}
	  

Este método devuelve el resumen de los datos de la transacción

Si se pasa mal el AnswerKey o el RequestKey se verá el siguiente rechazo:

Map<String, Object> 
	{ StatusCode = 404,
	  StatusMessage = ERROR: Transaccion Inexistente,
          AuthorizationKey = null,
          EncodingMethod = null }

Ejemplo

Existe un ejemplo ejecutable en https://github.com/TodoPago/SDK-Java/blob/master/Ejemplo/src/main/java/com/ar/todopago/ejemplo/SampleUI.java que muestra los resultados de los métodos principales del SDK y su correcta implementacion.

Existe un ejemplo en la carpeta https://github.com/TodoPago/sdk-java/tree/master/src/test que muestra los resultados de los métodos principales del SDK.

Modo Test

El SDK-JAVA permite trabajar con los ambiente de desarrollo y de produccion de Todo Pago.
El ambiente se debe instanciar como se indica a continuacion.

TodoPagoConector tpc = new TodoPagoConector(TodoPagoConector.developerEndpoint, getAuthorization());

private static Map<String, List<String>> getAuthorization() {
	Map<String, List<String>> parameters = new HashMap<String, List<String>>();
	parameters.put(ElementNames.Authorization, Collections.singletonList("PRISMA f3d8b72c94ab4a06be2ef7c95490f7d3"));
	return parameters;
}

Volver a inicio

Datos adicionales para control de fraude

Los datos adicionales para control de fraude son obligatorios, de lo contrario baja el score de la transacción.

Los campos marcados como condicionales afectan al score negativamente si no son enviados, pero no son mandatorios o bloqueantes.

private static Map<String, String> getFraudControlParameters() {

	Map<String, String> parameters = new HashMap<String, String>();		
	parameters.put("CSBTCITY", "Villa General Belgrano"); //Ciudad de facturación, MANDATORIO.		
	parameters.put("CSBTCOUNTRY", "AR");//País de facturación. MANDATORIO. Código ISO. (http://apps.cybersource.com/library/documentation/sbc/quickref/countries_alpha_list.pdf)	
	parameters.put("CSBTCUSTOMERID", "453458"); //Identificador del usuario al que se le emite la factura. MANDATORIO. No puede contener un correo electrónico.		
	parameters.put(CSBTIPADDRESS", "192.0.0.4"); //IP de la PC del comprador. MANDATORIO.		
	parameters.put(CSBTEMAIL", "some@someurl.com"); //Mail del usuario al que se le emite la factura. MANDATORIO.
	parameters.put(CSBTFIRSTNAME", "Juan");//Nombre del usuario al que se le emite la factura. MANDATORIO.		
	parameters.put(CSBTLASTNAME", "Perez");//Apellido del usuario al que se le emite la factura. MANDATORIO.
	parameters.put(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. MANDATORIO.		
	parameters.put(CSBTPOSTALCODE", "1010");//Código Postal de la dirección de facturación. MANDATORIO.	
	parameters.put(CSBTSTATE", "B");//Provincia de la dirección de facturación. MANDATORIO. Ver tabla anexa de provincias.	
	parameters.put(CSBTSTREET1", "Some Street 2153");//Domicilio de facturación (calle y nro). MANDATORIO.			
	parameters.put("CSBTSTREET2", "Piso 8");//Complemento del domicilio. (piso, departamento). NO MANDATORIO.
	parameters.put(CSPTCURRENCY", "ARS");//Moneda. MANDATORIO.		
	parameters.put(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. MANDATORIO.(Ejemplos:$125,38-> 125.38 $12-> 12 o 12.00)		
	parameters.put(CSMDD7", "");// Fecha registro comprador(num Dias). NO MANDATORIO.		
	parameters.put(CSMDD8", "Y"); //Usuario Guest? (Y/N). En caso de ser Y, el campo CSMDD9 no deberá enviarse. NO MANDATORIO.		
	parameters.put(CSMDD9", "");//Customer password Hash: criptograma asociado al password del comprador final. NO MANDATORIO.		
	parameters.put(CSMDD10", "");//Histórica de compras del comprador (Num transacciones). NO MANDATORIO.	
	parameters.put(CSMDD11", "");//Customer Cell Phone. NO MANDATORIO.		

	//Retail
	parameters.put("CSSTCITY", "Villa General Belgrano");//Ciudad de enví­o de la orden. MANDATORIO.	
	parameters.put("CSSTCOUNTRY", "AR");//País de envío de la orden. MANDATORIO.	
	parameters.put("CSSTEMAIL", "some@someurl.com");//Mail del destinatario, MANDATORIO.			
	parameters.put("CSSTFIRSTNAME", "Juan");//Nombre del destinatario. MANDATORIO.		
	parameters.put("CSSTLASTNAME", "Perez");//Apellido del destinatario. MANDATORIO.		
	parameters.put("CSSTPHONENUMBER", "541160913988");//Número de teléfono del destinatario. MANDATORIO.	
	parameters.put("CSSTPOSTALCODE", "1010");//Código postal del domicilio de envío. MANDATORIO.		
	parameters.put("CSSTSTATE", "B");//Provincia de envío. MANDATORIO. Son de 1 caracter			
	parameters.put("CSSTSTREET1", "Some Street 2153");//Domicilio de envío. MANDATORIO.		
	parameters.put("CSSTSTREET2", "Piso 8");//Complemento del domicilio. (piso, departamento). NO MANDATORIO.
	parameters.put("CSMDD12", "");//Shipping DeadLine (Num Dias). NO MADATORIO.		
	parameters.put("CSMDD13", "");//Método de Despacho. NO MANDATORIO.		
	parameters.put("CSMDD14", "");//Customer requires Tax Bill ? (Y/N). NO MANDATORIO.		
	parameters.put("CSMDD15", "");//Customer Loyality Number. NO MANDATORIO. 		
	parameters.put("CSMDD16", "");//Promotional / Coupon Code. NO MANDATORIO. 		
	
	//datos a enviar por cada producto, los valores deben estar separado con #:		
	parameters.put("CSITPRODUCTCODE", "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)	
	parameters.put("CSITPRODUCTDESCRIPTION", "Test Prd Description");//Descripción del producto. MANDATORIO.	
	parameters.put("CSITPRODUCTNAME", "TestPrd");//Nombre del producto. CONDICIONAL.	
	parameters.put("CSITPRODUCTSKU", "SKU1234");//Código identificador del producto. MANDATORIO.		
	parameters.put("CSITTOTALAMOUNT", "10.01");//CSITTOTALAMOUNT=CSITUNITPRICE*CSITQUANTITY "999999[.CC]" Con decimales opcional usando el punto como separador de decimales. No se permiten comas, ni como separador de miles ni como separador de decimales. MANDATORIO.		
	parameters.put("CSITQUANTITY", "1");//Cantidad del producto. CONDICIONAL.		
	parameters.put("CSITUNITPRICE", "10.01");//Formato Idem CSITTOTALAMOUNT. CONDICIONAL.	
}	

Datos de referencia

Nombre del campoRequired/OptionalData TypeMínimoComentarios
CSBTCITYRequiredString (60)6Ciudad / Acepta acentos comunes, puntos, guion medio y alto, letras con acentos invertidos, ñ / No acepta guion bajo.
CSBTCOUNTRYRequiredString (2)1Código ISO
CSBTCUSTOMERIDRequiredString (50)1Identificador del usuario unico logueado al portal (No puede ser una direccion de email)
CSBTEMAILRequiredString (100)1Correo electrónico del comprador con formato válido (solo letras (a-z,A-Z), números, puntos, guiones y sin espacios).
CSBTFIRSTNAMERequiredString (60)6Nombre del tarjeta habiente / Acepta acentos comunes, puntos, guion medio y alto, letras con acentos invertidos, ñ / No acepta guion bajo.
CSBTIPADDRESSRequiredString (15)1"End Customer´s IP address, such as 10.1.27.63, reported by your Web server via socket information."
CSBTLASTNAMERequiredString (60)6Apellido del tarjeta habiente / Acepta acentos comunes, puntos, guion medio y alto, letras con acentos invertidos, ñ / No acepta guion bajo.
CSBTPHONENUMBERRequiredString (30)6Número de telefono, acepta números, espacios y/o paréntesis. *Ejemplo *(011) 4567 8910
CSBTPOSTALCODERequiredString (10)1Codigo Postal
CSBTSTATERequiredString (2)1Estado (Si el country = US, el campo se valida para un estado valido en USA)
CSBTSTREET1RequiredString (60)6Calle Numero interior Numero Exterior / Acepta acentos comunes, puntos, guion medio y alto, letras con acentos invertidos, ñ / No acepta guion bajo.
CSBTSTREET2OptionalString (60)Barrio
CSITPRODUCTCODEConditionalString (255)
CSITPRODUCTDESCRIPTIONConditionalString (255)Descripción general del producto
CSITPRODUCTNAMEConditionalString (255)Nombre en catalogo del producto
CSITPRODUCTSKUConditionalString (255)SKU en catalogo
CSITQUANTITYConditionalInteger (10)Cantidad productos del mismo tipo agregados al carrito
CSITTOTALAMOUNTConditional"Precio total = Precio unitario * quantity / CSITTOTALAMOUNT = CSITUNITPRICE * CSITQUANTITY ""999999.CC"" Es mandatorio informar los decimales, usando el punto como separador de decimales. No se permiten comas, ni como separador de miles ni como separador de decimales."
CSITUNITPRICEConditionalString (15)"Precio Unitaro del producto / ""999999.CC"" Es mandatorio informar los decimales, usando el punto como separador de decimales. No se permiten comas, ni como separador de miles ni como separador de decimales."
CSPTCURRENCYRequiredString (5)1Currencies=>'032'(Peso Argentino)
CSPTGRANDTOTALAMOUNTRequiredDecimal (15)1"Cantidad total de la transaccion./""999999.CC"" Con decimales obligatorios, usando el puntos como separador de decimales. No se permiten comas, ni como separador de miles ni como separador de decimales."
CSSTCITYRequiredString (60)6Ciudad / Acepta acentos comunes, puntos, guion medio y alto, letras con acentos invertidos, ñ / No acepta guion bajo.
CSSTCOUNTRYRequiredString (2)1Código ISO
CSSTEMAILRequiredString (100)1Correo electrónico del comprador con formato válido (solo letras (a-z,A-Z), números, puntos, guiones y sin espacios).
CSSTFIRSTNAMERequiredString (60)6Nombre del tarjeta habiente / Acepta acentos comunes, puntos, guion medio y alto, letras con acentos invertidos, ñ / No acepta guion bajo.
CSSTLASTNAMERequiredString (60)6Apellido del tarjetahabiente / Acepta acentos comunes, puntos, guion medio y alto, letras con acentos invertidos, ñ / No acepta guion bajo.
CSSTPHONENUMBERRequiredString (30)6"Número de telefono. Cuidar el hecho que por default algunos comercios envían ""54"", contando entonces con 2 de los 6 caracteres requeridos. Acepta números, espacios y/o paréntesis. *Ejemplo *(011) 4567 8910"
CSSTPOSTALCODERequiredString (10)1Código Postal
CSSTSTATERequiredString (2)1Estado (Si el country = US, el campo se valida para un estado v lido en USA)
CSSTSTREET1RequiredString (60)6Calle Numero interior Numero Exterior / Para los casos que no son de envío a domicilio, jam s enviar la dirección propia del comercio o correo donde se retire la mercadería, en ese caso replicar los datos de facturación. Acepta acentos comunes, puntos, guion medio y alto, letras con acentos invertidos, ñ / No acepta guion bajo.
CSSTSTREET2OptionalString (60)Barrio
CSMDD1 RequiredString (255)1Incluir numero de comercio proveniente del campo NROCOMERCIO del API DECIDIR
CSMDD2RequiredString (255)1Incluir el nombre del comercio, Decidir puede obtener este dato del portal de configuracion de comercios
CSMDD3Required (Catalogo)String (255)1"Valores ejemplo: (retail, digital goods, services, travel, ticketing) Es recomendable que el API de decidir fije opciones seleccionables y no sean de captura libre para el comercio"
CSMDD4Optional (Catalogo)String (255)"Valores ejemplo: (Visa, Master Card, Tarjeta Shopping, Banelco...) Es recomendable que el API de decidir fije opciones seleccionables y no sean de captura libre para el comercio. Se tienen que incluir todos los medios de pago aceptados"
CSMDD5OptionalString (255)Valor numerico que detalle el numero de cuotas
CSMDD6Optional (Catalogo)String (255)"Valores ejemplo: (Web, Call Center, Mobile, Kiosko) Es recomendable que el API de decidir fije opciones seleccionables y no sean de captura libre para el comercio."
CSMDD7OptionalString (255)Numero de dias que tiene registrado un cliente en el portal del comercio.
CSMDD8OptionalString (255)Valor Boleano para indicar si el usuario esta comprando como invitado en la pagina del comercio. Valores posibles (S/N)
CSMDD9OptionalString (255)Valor del password del usuario registrado en el portal del comercio. Incluir el valor en hash
CSMDD10OptionalString (255)Conteo de transacciones realizadas por el mismo usuario registrado en el portal del comercio
CSMDD11OptionalString (255)Incluir numero de telefono adicional del comprador
CSMDD12OptionalString (255)Numero de dias que tiene el comercio para hacer la entrega
CSMDD13Optional (Catalogo)String (255)"Valores ejemplo: (domicilio, click and collect, carrier) Es recomendable que el API de decidir fije opciones seleccionables y no sean de captura libre para el comercio."
CSMDD14OptionalString (255)Valor booleano para identificar si el cliente requiere un comprobante fiscal o no S / N
CSMDD15OptionalString (255)Incluir numero de cliente frecuente
CSMDD16OptionalString (255)Incluir numero de cupon de descuento
CSMDD35Conditional (Transaccion con Visa)String (255)Tipo de documento solicitado por el comercio al cliente
CSMDD36Conditional (Transaccion con Visa)String (255)Numero de documento solicitado por el comercio al cliente
CSMDD37Conditional (Transaccion con Visa)String (255)Numero de puerta
CSMDD38onditional (Transaccion con Visa)String (255)Fecha de nacimiento del comprador, dato solicitado por el comercio. DECIDIR tiene el formato exacto de como se debe de capturar
CSMDD39Conditional (Transaccion con Visa)String (255)Valor numero correspondiente a la validacion de cada uno de los datos anteriores ejemplo: 1012
CSMDD40OptionalString(1)"Valor para identificar si la transaccion ha sido reportada como fraude por parte del emisor. Incluir el parametro con valor = S Este parametro lo genera decidir a partir de la respuesta del emisor. En caso de una transaccion aceptada por el emisor o con rechazo diferente a fraude, NO INCLUIR"
CSMDD41OptionalString(1)Datos proporcionado por DECIDIR en el form. De pago. Valores posibles S/N
CSMDD42OptionalString(1)Datos proporcionado por DECIDIR en el form. De pago. Valores posibles S/N
CSMDD80Required Integer (20)Número de cuenta del vendedor
CSMDD81Required String(255)Mail del vendedor en TP
CSMDD82Required Integer (6)Rubro asignado por el analista de riesgos de Back Office
CSMDD83Required Integer (2)Antigüedad de la cuenta vendedor
CSMDD84Required String (15)Consumidor Final / Profesional / Empresa
CSMDD85Required Integer(1)0 (No se le pidió) / 1 (Se le pidió y se validó) / 2 (Uso Futuro)
CSMDD86Requerido (para Billetera)Integer(20)Número de cuenta del comprador
CSMDD87Requerido (para Billetera)Integer (3)Antigüedad de la cuenta comprador (Meses)
CSMDD88Requerido (para Billetera)Integer (3)Cantidad de tarjetas Habilitadas de la Billetera
CSMDD89Requerido (para Billetera)Integer (2)Nivel de Riesgo asignado al Medio de Pago que Utiliza

Volver a inicio

Características

Estado de la operación

imagen de configuracion

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:

Campo Requerido Descripción Tipo de Dato Valores posibles / Ejemplo
MERCHANT Código de comercio o cuenta provisto por TodoPago Alfanumérico de 8 caracteres 12345678
OPERATIONID Identificación de la transacción para el Comercio. Debe ser distinto para cada operación. Alfanumérico de 1 a 40 caracteres. 141120084707
private static Map<String, String> getSParameters(){
	Map<String, String> parameters = new HashMap<String, String>();
	parameters.put("Merchant", "12345678");
	parameters.put("OperationID", "8000");
	return parameters;
}	

Map<String, Object> d = tpc.getStatus(getSParameters());// Merchant es el id site y OperationID es el id operación que se envió en el array a través del método sendAuthorizeRequest() 

El siguiente método retornará el status actual de la transacción en Todopago.

Campo Requerido Descripción Tipo de Dato Valores posibles / Ejemplo
RESULTCODE Número identificador del estado en el que se encuentra la transacción Numérico Ejemplo: -1
RESULTMESSAGE Describe el estado en el que se encuentra la transacción Alfanumérico Ejemplo: "APROBADA"
CUSTOMERID Identificación, provista por el sistema de comercio, del cliente que realizó la transacción. Alfanumérico de 1 a 8 caracteres. 42
DATETIME No 2015-05-13T14:11:38.287+00:00
OPERATIONID Identificación de la transacción para el Comercio. Debe ser distinto para cada operación. Alfanumérico de 1 a 40 caracteres. 141120084707
CURRENCYCODE Código de moneda utilizado en la transacción. Por el momento solo 32 (Pesos) Numérico 32
AMOUNT Importe original en Pesos de la transacción. Numérico con 9 dígitos con hasta 2 decimales 999999[.CC] Usando el punto como separador de decimales. No se permiten comas, ni como separador de miles ni como separador de decimales. $125,38 -> 125.38
$12 -> 12.00
AMOUNTBUYER Importe final en Pesos de la transacción. Numérico con 9 dígitos con hasta 2 decimales 999999[.CC] Usando el punto como separador de decimales. No se permiten comas, ni como separador de miles ni como separador de decimales. $125,38 -> 125.38
$12 -> 12.00
TYPE Tipo de Operación, en el caso del GetStatus siempre será *compra_online* Alfanumérico compra_online
INSTALLMENTPAYMENTS No Código de autorización generado por el medio de pago Decimal de hasta dos dígitos. 01, 02, 06, 12, etc.
CUSTOMEREMAIL Mail del usuario al que se le emite la factura Alfanumérico de 100 caracteres. Ejemplo: cosme@fulanito.com
IDENTIFICATIONTYPE No Tipo de documento DNI
CI
LE
LC
IDENTIFICATION No Número de documento Numérico Ejemplo: 1987234
CARDNUMBER No Número de Tarjeta, enmascarado según normativas nacionales alfanumérico de 20 caracteres Ejemplo: "450799XXXXXX0010"
CARDHOLDERNAME No Nombre del titular de la tarjeta. Alfanumérico Ejemplo: "Juan Pérez"
TICKETNUMBER No Número de Ticket o Voucher Numérico de Hasta 4 dígitos Ejemplo: 7509
AUTHORIZATIONCODE Si Código de autorización Numérico Ejemplo: 109345
CFT Si CFT de la promoción aplicada Decimal Ejemplo: 0.00
TEA Si TEA de la promoción aplicada Decimal Ejemplo: 22.00
FEEAMOUNT Si Comisión por la transacción Decimal Ejemplo: 22.00
TAXAMOUNT Si Retenciones de impuestos Decimal Ejemplo: 22.00
SERVICECHAGEAMOUNT Si Costo del servicio Decimal Ejemplo: 22.00
CREDITEDAMOUNT Si Monto neto acreditado Decimal Ejemplo: 22.00
FEEAMOUNT Si Comisión por la transacción Decimal Ejemplo: 22.00
RELEASESTATUS Si Estado de la transacción Alfanumérico Ejemplo: TX_APROBADA
RELEASEDATETIME Si Fecha de disponibilización de la transacción Datetime Ejemplo: 2017-11-28T11:24:11
PHONENUMBER Si Número de teléfono de facturación Alfanumérico Ejemplo: 541152528100
ADDRESS Si Dirección de facturación Alfanumérico Ejemplo: Callao 78
POSTALCODE Si Código postal de facturación Alfanumérico Ejemplo: C1430DRW
REFUNDS Si Listado de devoluciones realizadas sobre la transacción Array -
ITEMS Si Listado de items de la compra Array <code>Camisetas</code> <description>Fashion lleva diseando colecciones increbles desde</description> <name>Camiseta efecto desteido de manga corta</name> <price>19.98</price> <quantity>1</quantity> <sku>demo1</sku> <totalAmount>19.98</totalAmount>

Ejemplo de Respuesta

Map<String, Object>
	{ OperationsColections = {
			Operations = {
				RESULTCODE = 999 ,
				RESULTMESSAGE = RECHAZADA,
				DATETIME = 2015-05-13T14:11:38.287+00:00,
				OPERATIONID = 01,
				CURRENCYCODE = 32,
				AMOUNT = 54,
				TYPE = compra_online,
				INSTALLMENTPAYMENTS = 4,
				CUSTOMEREMAIL = jose@perez.com,
				IDENTIFICATIONTYPE = DNI,
				IDENTIFICATION = 1212121212,
				CARDNUMBER = 12121212XXXXXX1212,
				CARDHOLDERNAME = Jose Perez,
				TICKETNUMBER = 0,
				AUTHORIZATIONCODE = null,
				BARCODE = null,
				COUPONEXPDATE = null,
				COUPONSECEXPDATE = null,
     			        COUPONSUBSCRIBER = null,
				BANKID = 11,
				PAYMENTMETHODTYPE = Crédito,
				PAYMENTMETHODCODE = 42,
				PROMOTIONID = 2706,
                                AMOUNTBUYER = 10.00,
                                PAYMENTMETHODNAME = VISA,
				TEA = 22.00,
				CFT = 0.00,
				RELEASESTATUS : TX_APROBADA,
				RELEASEDATETIME : 2017-11-28T11:24:11,
				PHONENUMBER: 541141231234,
				ADDRESS: Uspallata 123,
				POSTALCODE: A1430AAA,
				CUSTOMERID: 10,
				REFUNDED = null, 
				REFUNDS = { REFUND0 = { ID = 50163419,
										DATETIME = 2016-03-18T16:03:54.987-03:00,
										AMOUNT = 10.00 },
							REFUND1 = { ID = 50163416,
										DATETIME = 2016-03-18T15:52:07.877-03:00,
										AMOUNT = 2.00 },		
    					    REFUND2 = { ID = 50163414,
										DATETIME = 2016-03-18T15:51:17.447-03:00,
										AMOUNT = 2.00 }
							}
						}
				},
				ITEMS= {
					ITEM={
						code= Cameras,
						description= Engineered with,
						name= Nikon D300,
						price= 80.00,
						quantity= 3,
						sku= 31,
						totalAmount= 240.00
					}, {
						code= Desktops,
						description= HTC Touch  in,
						name= HTC Touch HD,
						price= 100.00,
						quantity= 3,
						sku=28,
						totalAmount= 300.00
					}
				}
				PUSHNOTIFYENDPOINT = null,
				PUSHNOTIFYMETHOD = null,
				PUSHNOTIFYSTATES = null,
	}					

Además, se puede conocer el estado de las transacciones a través del portal www.todopago.com.ar. Desde el portal se verán los estados "Aprobada" y "Rechazada". Si el método de pago elegido por el comprador fue Pago Fácil o RapiPago, se podrán ver en estado "Pendiente" hasta que el mismo sea pagado.

Consulta de operaciones por rango de tiempo

imagen de configuracion

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

Campo Requerido Descripción Tipo de Dato Valores posibles / Ejemplo
MERCHANT Nro identificador del comercio numérico 12305
STARTDATE Fecha y hora desde date "2017-03-03T16:15:00"
ENDDATE Fecha y hora hasta date "2017-08-07T22:34:00"
PAGENUMBER Número de página a la que se desea acceder* entero 2
private static Map<String, String> getBRYParameters() {
		Map<String, String> parameters = new HashMap<String, String>();
		parameters.put(ElementNames.Merchant, "12345678");
		parameters.put(ElementNames.STARTDATE, "2016-01-01");
		parameters.put(ElementNames.ENDDATE, "2016-03-03");
		parameters.put(ElementNames.PAGENUMBER, "1");	
		return parameters;
}
	
Map<String, Object> j = tpc.getByRangeDateTime(getBRYParameters());

####Descubrimiento de medios de pago

imagen de configuracion

La SDK cuenta con un método para obtener todos los medios de pago habilitados en TodoPago.

	
Map<String, Object> discoverPaymentMethods=tpc.discoverPaymentMethods();

Descubrimiento de Medios de Pago

La SDK cuenta con un método para obtener todos los medios de pago habilitados en TodoPago.

Map<String, Object> g = tpc.discoverPaymentMethods();

Devolución

imagen de configuracion

La SDK dispone de métodos para realizar la devolución, de una transacción realizada a traves de TodoPago.

Se debe llamar al método voidRequest de la siguiente manera:

Campo Requerido Descripción Tipo de Dato Valores posibles / Ejemplo
Security API Key del comercio asignada por TodoPago alfanumérico 837BE68A892F06C17B944F344AEE8F5F
Merchant Nro de comercio asignado por TodoPago numérico 12345
RequestKey No* RequestKey devuelto como respuesta del servicio SendAutorizeRequest alfanumérico 6d2589f2-37e6-1334-7565-3dc19404480c
AuthorizationKey No* AuthorizationKey devuelto como respuesta del servicio GetAuthorizeAnswer alfanumérico 4a2569a2-38e6-4589-1564-4480c3dc1940
private static Map<String, String> getVRParameters() {
		Map<String, String> parameters = new HashMap<String, String>();
		parameters.put(ElementNames.Security, "1234567890ABCDEF1234567890ABCDEF"); // API Key del comercio asignada por TodoPago 
		parameters.put(ElementNames.Merchant, "12345678");// Merchant o Nro de comercio asignado por TodoPago
		parameters.put(ElementNames.RequestKey, "e31d340c-690c-afe6-c478-fc1bef3fc157");  // RequestKey devuelto como respuesta del servicio SendAutorizeRequest
		return parameters;
}
	
Map<String, Object> h = tpc.voidRequest(getVRParameters());

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

private static Map<String, String> getVRParameters() {
		Map<String, String> parameters = new HashMap<String, String>();
		parameters.put(ElementNames.Security, "1234567890ABCDEF1234567890ABCDEF"); // API Key del comercio asignada por TodoPago 
		parameters.put(ElementNames.Merchant, "12345678");// Merchant o Nro de comercio asignado por TodoPago
		parameters.put(ElementNames.AuthorizationKey, "6d2589f2-37e6-1334-7565-3dc19404480c"); // AuthorizationKey devuelto como respuesta del servicio GetAuthorizeAnswer
		return parameters;
}
	
Map<String, Object> h = tpc.voidRequest(getVRParameters());	

Respuesta del servicio:

Campo Requerido Descripción Tipo de Dato Valores posibles / Ejemplo
StatusCode Número de identificación del motivo del resultado Numérico 2011
StatusMessage Resultado de la devolución Alfanumérico Operación realizada correctamente

Si la operación fue realizada correctamente se informará con un código 2011 y un mensaje indicando el éxito de la operación.

Map<String, Object> 
	{ StatusCode = 2011,
	  StatusMessage = Operación realizada correctamente }

Devolución parcial

imagen de configuracion

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

Nota: Para el caso de promociones con costo financiero, se deberá enviar el monto a devolver en base al valor original de la transacción y no del monto finalmente cobrado. TodoPago se encargará de devolver el porcentaje del costo financiero correspondiente a la devolución parcial.

Se debe llamar al método returnRequest de la siguiente manera:

Campo Requerido Descripción Tipo de Dato Valores posibles / Ejemplo
Security API Key del comercio asignada por TodoPago alfanumérico 837BE68A892F06C17B944F344AEE8F5F
Merchant Nro de comercio asignado por TodoPago numérico 12345
RequestKey No* RequestKey devuelto como respuesta del servicio SendAutorizeRequest alfanumérico 6d2589f2-37e6-1334-7565-3dc19404480c
AuthorizationKey No* AuthorizationKey devuelto como respuesta del servicio GetAuthorizeAnswer alfanumérico 4a2569a2-38e6-4589-1564-4480c3dc1940
AMOUNT No Monto a devolver, si no se envía, se trata de una devolución total string usando . como separador decimal, incluyendo SIEMPRE 2 cifras decimales 23.50
private static Map<String, String> getRRParameters() {
		Map<String, String> parameters = new HashMap<String, String>();
		parameters.put(ElementNames.Security, "1234567890ABCDEF1234567890ABCDEF"); // API Key del comercio asignada por TodoPago 
		parameters.put(ElementNames.Merchant, "12345678"); // Merchant o Nro de comercio asignado por TodoPago
		parameters.put(ElementNames.RequestKey, "e31d340c-690c-afe6-c478-fc1bef3fc157");  // RequestKey devuelto como respuesta del servicio SendAutorizeRequest
		parameters.put(ElementNames.Amount, "10.5"); // Opcional. Monto a devolver, si no se envía, se trata de una devolución total
		return parameters;
}
Map<String, Object> i = tpc.returnRequest(getRRParameters());

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

private static Map<String, String> getRRParameters() {
		Map<String, String> parameters = new HashMap<String, String>();
		parameters.put(ElementNames.Security, "1234567890ABCDEF1234567890ABCDEF"); // API Key del comercio asignada por TodoPago 
		parameters.put(ElementNames.Merchant, "12345678"); // Merchant o Nro de comercio asignado por TodoPago
		parameters.put(ElementNames.AuthorizationKey, "6d2589f2-37e6-1334-7565-3dc19404480c");  // AuthorizationKey devuelto como respuesta del servicio GetAuthorizeAnswer
		parameters.put(ElementNames.Amount, "10.5"); // Opcional. Monto a devolver, si no se envía, se trata de una devolución total
		return parameters;
}
Map<String, Object> i = tpc.returnRequest(getRRParameters());	

Respuesta de servicio:

Campo Requerido Descripción Tipo de Dato Valores posibles / Ejemplo
StatusCode Número de identificación del motivo del resultado Numérico 2011
StatusMessage Resultado de la devolución Alfanumérico Operación realizada correctamente

Si la operación fue realizada correctamente se informará con un código 2011 y un mensaje indicando el éxito de la operación.

Map<String, Object> 
	{ StatusCode = 2011,
	  StatusMessage = Operación realizada correctamente }

Formulario híbrido

Conceptos básicos
El formulario híbrido, 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.

Librería El formulario requiere incluir en la página una librería Javascript de TodoPago.
El endpoint depende del entorno:

Restricciones y libertades en la implementación

  • Por ningún motivo podrá bajarse el javascript provisto ni realizar cambios en el mismo. Siempre deberá ser tomado de los servidores de TodoPago.
  • 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="formaPagoCbx"></select>
  <input id="numeroTarjetaTxt"/>
  <label id="numeroTarjetaLbl"></label>
  <select id="medioPagoCbx"></select>
  <select id="bancoCbx"></select>
  <select id="promosCbx"></select>
  <label id="promosLbl"></label>
  <label id="peiLbl"></label>
  <input id="peiCbx"/>
  <select id="mesCbx"></select>
  <select id="anioCbx"></select>
  <label id="fechaLbl"></label>
  <input id="codigoSeguridadTxt"/>
  <label id="codigoSeguridadLbl"></label>
  <input id="nombreTxt"/>
  <select id="tipoDocCbx"></select>
  <input id="nroDocTxt"/>
  <input id="emailTxt"/>
  <label id="tokenPeiLbl"></label>
  <input id="tokenPeiTxt"/>
  <button id="MY_btnConfirmarPago"/>
  <button id="MY_btnPagarConBilletera"/>
</body>

Inizialización y parámetros 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 parámetro publicKey que corresponde al PublicRequestKey (entregado por el SAR). Se sugiere agregar los parámetros usuario, e-mail, tipo de documento y numero.

Javascript

/************* CONFIGURACION DEL API ***********************/
window.TPFORMAPI.hybridForm.initForm({
callbackValidationErrorFunction: 'validationCollector',
callbackBilleteraFunction: 'billeteraPaymentResponse',
callbackCustomSuccessFunction: 'customPaymentSuccessResponse',
callbackCustomErrorFunction: 'customPaymentErrorResponse',
botonPagarId: 'MY_btnConfirmarPago',
botonPagarConBilleteraId: 'MY_btnPagarConBilletera',
modalCssClass: 'modal-class',
modalContentCssClass: 'modal-content',
beforeRequest: 'initLoading',
afterRequest: 'stopLoading'
});

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

/************* FUNCIONES CALLBACKS *************************/
function validationCollector(parametros) {
console.log("My validation collector callback");
console.log(parametros.field + " -> " + parametros.error);
}
function billeteraPaymentResponse(response) {
console.log("My billetera payment callback");
console.log(response.ResultCode + " -> " +response.ResultMessage);
}
function customPaymentSuccessResponse(response) {
console.log("My custom payment success callback");
console.log(response.ResultCode + " -> " +response.ResultMessage);
}
function customPaymentErrorResponse(response) {
console.log("My custom payment error callback");
console.log(response.ResultCode + " -> " +response.ResultMessage);
}
function initLoading() {
console.log('Loading...');
}
function stopLoading() {
console.log('Stop loading...');
}

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

  • billeteraPaymentResponse: Devuelve response si el pago con billetera se realizó correctamente.
  • customPaymentSuccessResponse: Devuelve response si el pago se realizo correctamente.
  • customPaymentErrorResponse: Si hubo algún error durante el proceso de pago, este devuelve el response con el código y mensaje correspondiente. Volver a inicio

Volver a inicio

Obtener credenciales

imagen de configuracion

El SDK permite obtener las credenciales "Authentification", "MerchandId" y "Security" de la cuenta de Todo Pago, ingresando el usuario y contraseña.
Esta funcionalidad es util para obtener los parametros de configuracion dentro de la implementacion.

  • Crear una instancia de la clase User:
public void getCredentials(TodoPagoConector tpc) {
		
		User user = new User("test@test.com", "test1234");// user y pass de TodoPago
		
		try {
			user = tpc.getCredentials(user);
			tpc.setAuthorize(getAuthorization(user));// set de la APIKey a TodoPagoConector 
			
		} catch (EmptyFieldException e) {//se debe realizar catch por campos en blanco
			logger.log(Level.WARNING, e.getMessage());						
		} catch (MalformedURLException e) {
			logger.log(Level.WARNING, e.getMessage());	
		} catch (ResponseException e) {
			logger.log(Level.WARNING, e.getMessage());
		} catch (ConnectionException e) {
			logger.log(Level.WARNING, e.getMessage());
		}
		System.out.println(user.toString());	
}
	
	private Map<String, List<String>> getAuthorization(User user) {
		Map<String, List<String>> parameters = new HashMap<String, List<String>>();
		parameters.put(ElementNames.Authorization,Collections.singletonList(user.getApiKey()));
		
		return parameters;
}

Volver a inicio

Estado del servicio

La SDK dispone de un método para verificar el estado de los servicios de TodoPago..
Se debe llamar al método healthCheck de la siguiente manera:

	Boolean check = tpc.healthCheck();	

Opciones adicionales

Dentro del primer parámetro pasado al método sendAuthorizeRequest() pueden enviarse opciones adicionales que habilitan características para esa transacción en particular. A continuación se describen las mismas.

Rango de Cuotas

Es posible setear el rango de cuotas a mostrar en el formulario entre un mínimo y un máximo, enviando los siguientes parametros adicionales

Campo Requerido Descripción Tipo de Dato Valores posibles / Ejemplo
MININSTALLMENTS No Mínimo de cuotas a mostrar en el formulario Numérico 3
MAXINSTALLMENTS No Máximo de cuotas a mostrar en el formulario Numérico 9
Ejemplo
Map<String, String> parameters = new HashMap<String, String>();
parameters.put(ElementNames.MAXINSTALLMENTS, "12");
parameters.put(ElementNames.MININSTALLMENTS, "1");	

Volver a inicio

Filtrado de Medios de Pago

Mediante esta funcionalidad es posible filtrar los medios de pago habilitados en el formulario de pago. Se debe pasar en la llamada al servicio SendAuthorizeRequest un parámetro adicional con los ids de los medio de pago que se desean habilitar, los cuales pueden consultarse mediante el método de Descubrimiento de Medios de Pago

Para hacer uso de esta funcionalidad debe agregarse en el Map<String, String> parameters del método sendAuthorizeRequest el campo AVAILABLEPAYMENTMETHODSIDS con el valor de los ids de los medios de pago habilitados, separados por #

Ejemplo
Map<String, String> parameters = new HashMap<String, String>();
parameters.put("AVAILABLEPAYMENTMETHODSIDS", "1#42#500");	

Volver a inicio

Tiempo de vida del formulario.

Mediante esta funcionalidad se permite setear el tiempo maximo en el que se puede realizar el pago en el formulario en milisegundos. Por defecto si no se envia, 1800000 (30 minutos). Valor minimo: 300000 (5 minutos) Valor maximo: 21600000 (6hs)

Para hacer uso de esta funcionalidad debe agregarse en el Map<String, String> parameters del método sendAuthorizeRequest el campo TIMEOUT con el valor en milisegundos

Ejemplo
Map<String, String> parameters = new HashMap<String, String>();
parameters.put(ElementNames.TIMEOUT, "350000");	

Volver a inicio

Tablas de Referencia

Los siguientes códigos son utilizados para control de fraude y para el cálculo de retenciones del Impuesto sobre los Ingresos Brutos.

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

Tabla de errores operativos

Id mensajeMensaje
-1Tu compra fue exitosa.
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.
99005Tu compra no pudo realizarse. Iniciala nuevamente.
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.
99904Tu compra no puede ser realizada. Comunicate con tu vendedor.
99953Tu compra no pudo realizarse. Iniciala nuevamente o utilizá otro medio de pago.
99960Esta compra requiere autorización de VISA. Comunicate al número que se encuentra al dorso de tu tarjeta.
99961Esta compra requiere autorización de AMEX. Comunicate al número que se encuentra al dorso de tu tarjeta.
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.
99982Tu compra no pudo ser procesada. Iniciala nuevamente utilizando otro medio de pago.
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 compra. Iniciala nuevamente utilizando otro medio de pago.
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

Tabla de errores de integración

**Id mensaje****Descripción**
98001 ERROR: El campo CSBTCITY es requerido
98002 ERROR: El campo CSBTCOUNTRY es requerido
98003 ERROR: El campo CSBTCUSTOMERID es requerido
98004 ERROR: El campo CSBTIPADDRESS es requerido
98005 ERROR: El campo CSBTEMAIL es requerido
98006 ERROR: El campo CSBTFIRSTNAME es requerido
98007 ERROR: El campo CSBTLASTNAME es requerido
98008 ERROR: El campo CSBTPHONENUMBER es requerido
98009 ERROR: El campo CSBTPOSTALCODE es requerido
98010 ERROR: El campo CSBTSTATE es requerido
98011 ERROR: El campo CSBTSTREET1 es requerido
98012 ERROR: El campo CSBTSTREET2 es requerido
98013 ERROR: El campo CSPTCURRENCY es requerido
98014 ERROR: El campo CSPTGRANDTOTALAMOUNT es requerido
98015 ERROR: El campo CSMDD7 es requerido
98016 ERROR: El campo CSMDD8 es requerido
98017 ERROR: El campo CSMDD9 es requerido
98018 ERROR: El campo CSMDD10 es requerido
98019 ERROR: El campo CSMDD11 es requerido
98020 ERROR: El campo CSSTCITY es requerido
98021 ERROR: El campo CSSTCOUNTRY es requerido
98022 ERROR: El campo CSSTEMAIL es requerido
98023 ERROR: El campo CSSTFIRSTNAME es requerido
98024 ERROR: El campo CSSTLASTNAME es requerido
98025 ERROR: El campo CSSTPHONENUMBER es requerido
98026 ERROR: El campo CSSTPOSTALCODE es requerido
98027 ERROR: El campo CSSTSTATE es requerido
98028 ERROR: El campo CSSTSTREET1 es requerido
98029 ERROR: El campo CSMDD12 es requerido
98030 ERROR: El campo CSMDD13 es requerido
98031 ERROR: El campo CSMDD14 es requerido
98032 ERROR: El campo CSMDD15 es requerido
98033 ERROR: El campo CSMDD16 es requerido
98034 ERROR: El campo CSITPRODUCTCODE es requerido
98035 ERROR: El campo CSITPRODUCTDESCRIPTION es requerido
98036 ERROR: El campo CSITPRODUCTNAME es requerido
98037 ERROR: El campo CSITPRODUCTSKU es requerido
98038 ERROR: El campo CSITTOTALAMOUNT es requerido
98039 ERROR: El campo CSITQUANTITY es requerido
98040 ERROR: El campo CSITUNITPRICE es requerido
98101 ERROR: El formato del campo CSBTCITY es incorrecto
98102 ERROR: El formato del campo CSBTCOUNTRY es incorrecto
98103 ERROR: El formato del campo CSBTCUSTOMERID es incorrecto
98104 ERROR: El formato del campo CSBTIPADDRESS es incorrecto
98105 ERROR: El formato del campo CSBTEMAIL es incorrecto
98106 ERROR: El formato del campo CSBTFIRSTNAME es incorrecto
98107 ERROR: El formato del campo CSBTLASTNAME es incorrecto
98108 ERROR: El formato del campo CSBTPHONENUMBER es incorrecto
98109 ERROR: El formato del campo CSBTPOSTALCODE es incorrecto
98110 ERROR: El formato del campo CSBTSTATE es incorrecto
98111 ERROR: El formato del campo CSBTSTREET1 es incorrecto
98112 ERROR: El formato del campo CSBTSTREET2 es incorrecto
98113 ERROR: El formato del campo CSPTCURRENCY es incorrecto
98114 ERROR: El formato del campo CSPTGRANDTOTALAMOUNT es incorrecto
98115 ERROR: El formato del campo CSMDD7 es incorrecto
98116 ERROR: El formato del campo CSMDD8 es incorrecto
98117 ERROR: El formato del campo CSMDD9 es incorrecto
98118 ERROR: El formato del campo CSMDD10 es incorrecto
98119 ERROR: El formato del campo CSMDD11 es incorrecto
98120 ERROR: El formato del campo CSSTCITY es incorrecto
98121 ERROR: El formato del campo CSSTCOUNTRY es incorrecto
98122 ERROR: El formato del campo CSSTEMAIL es incorrecto
98123 ERROR: El formato del campo CSSTFIRSTNAME es incorrecto
98124 ERROR: El formato del campo CSSTLASTNAME es incorrecto
98125 ERROR: El formato del campo CSSTPHONENUMBER es incorrecto
98126 ERROR: El formato del campo CSSTPOSTALCODE es incorrecto
98127 ERROR: El formato del campo CSSTSTATE es incorrecto
98128 ERROR: El formato del campo CSSTSTREET1 es incorrecto
98129 ERROR: El formato del campo CSMDD12 es incorrecto
98130 ERROR: El formato del campo CSMDD13 es incorrecto
98131 ERROR: El formato del campo CSMDD14 es incorrecto
98132 ERROR: El formato del campo CSMDD15 es incorrecto
98133 ERROR: El formato del campo CSMDD16 es incorrecto
98134 ERROR: El formato del campo CSITPRODUCTCODE es incorrecto
98135 ERROR: El formato del campo CSITPRODUCTDESCRIPTION es incorrecto
98136 ERROR: El formato del campo CSITPRODUCTNAME es incorrecto
98137 ERROR: El formato del campo CSITPRODUCTSKU es incorrecto
98138 ERROR: El formato del campo CSITTOTALAMOUNT es incorrecto
98139 ERROR: El formato del campo CSITQUANTITY es incorrecto
98140 ERROR: El formato del campo CSITUNITPRICE es incorrecto
98201 ERROR: Existen errores en la información de los productos
98202 ERROR: Existen errores en la información de CSITPRODUCTDESCRIPTION los productos
98203 ERROR: Existen errores en la información de CSITPRODUCTNAME los productos
98204 ERROR: Existen errores en la información de CSITPRODUCTSKU los productos
98205 ERROR: Existen errores en la información de CSITTOTALAMOUNT los productos
98206 ERROR: Existen errores en la información de CSITQUANTITY los productos
98207 ERROR: Existen errores en la información de CSITUNITPRICE de los productos

Volver a inicio

Agregar el proyecto a Eclipse

  • Bajar Maven 3 de la siguiente URL: http://maven.apache.org/download.cgi
  • Descomprimir lo descargado.
  • Agregar o modificar la variable de entorno M2_HOME con path a donde se descomprime Maven
  • Descargar el proyecto de GitHub
  • Por consola ir a la carpeta donde se descargo el proyecto
  • Ejecutar las siguientes lineas:
    • mvn clean install -Dwtpversion=2.0
    • mvn eclipse:clean eclipse:eclipse -Dwtpversion=2.0
  • Ir a Eclipse e importar el Proyecto normalmente: File - Import - Existing Projects into Workspace

[Volver a inicio](#inicio)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • Java 98.3%
  • HTML 1.4%
  • CSS 0.3%