- Instalación
- Uso
- Datos adicionales para prevención de fraude
- Características
- Status de la operación
- Consulta de operaciones por rango de tiempo
- Descubrimiento de Medios de Pago
- Devolucion
- Devolucion parcial
- Formulario hibrido
- Obtener Credenciales
- Estado del Servicio
- Máximo de cuotas a mostrar en formulario
- Minimo de cuotas a mostrar en formulario
- Tiempo de vida del formulario
- Filtrado de medios de pago
- Diagrama de secuencia
- Tablas de referencia
- Tabla de errores
- Agregar el proyecto a Eclipse
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.
La versión implementada de la SDK, esta testeada para versiones desde Java 5 en adelante con JAX-WS.
Esta versión soporta únicamente pago en moneda nacional argentina (CURRENCYCODE = 32).
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
#### Solicitud de autorización En este caso hay que llamar a sendAuthorizeRequest(). ```java Map a = tpc.sendAuthorizeRequest(parameters, getFraudControlParameters()); ``` Datos propios del comercio El primer atributo parameters, debe ser un Map con la siguiente estructura:
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.EncodingMethod, "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, "[email protected]");
Datos prevención de fraude El segundo atributo getFraudControlParameters(). Ver Datos adicionales para prevención de fraude
Códigos de rechazo
```java Map { 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, 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 }
En este caso hay que llamar a getAuthorizeAnswer(), enviando como parámetro un Map<String, String> como se describe a continuación.
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
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 },
{ 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 }
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.
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;
}
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", "[email protected]"); //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", "[email protected]");//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.
}
Nombre del campo | Required/Optional | Data Type | Mínimo | Comentarios |
---|---|---|---|---|
CSBTCITY | Required | String (60) | 6 | Ciudad / Acepta acentos comunes, puntos, guion medio y alto, letras con acentos invertidos, ñ / No acepta guion bajo. |
CSBTCOUNTRY | Required | String (2) | 1 | Código ISO |
CSBTCUSTOMERID | Required | String (50) | 1 | Identificador del usuario unico logueado al portal (No puede ser una direccion de email) |
CSBTEMAIL | Required | String (100) | 1 | Correo electrónico del comprador con formato válido (solo letras (a-z,A-Z), números, puntos, guiones y sin espacios). |
CSBTFIRSTNAME | Required | String (60) | 6 | Nombre del tarjeta habiente / Acepta acentos comunes, puntos, guion medio y alto, letras con acentos invertidos, ñ / No acepta guion bajo. |
CSBTIPADDRESS | Required | String (15) | 1 | "End Customer´s IP address, such as 10.1.27.63, reported by your Web server via socket information." |
CSBTLASTNAME | Required | String (60) | 6 | Apellido del tarjeta habiente / Acepta acentos comunes, puntos, guion medio y alto, letras con acentos invertidos, ñ / No acepta guion bajo. |
CSBTPHONENUMBER | Required | String (30) | 6 | Número de telefono, acepta números, espacios y/o paréntesis. *Ejemplo *(011) 4567 8910 |
CSBTPOSTALCODE | Required | String (10) | 1 | Codigo Postal |
CSBTSTATE | Required | String (2) | 1 | Estado (Si el country = US, el campo se valida para un estado valido en USA) |
CSBTSTREET1 | Required | String (60) | 6 | Calle Numero interior Numero Exterior / Acepta acentos comunes, puntos, guion medio y alto, letras con acentos invertidos, ñ / No acepta guion bajo. |
CSBTSTREET2 | Optional | String (60) | Barrio | |
CSITPRODUCTCODE | Conditional | String (255) | ||
CSITPRODUCTDESCRIPTION | Conditional | String (255) | Descripción general del producto | |
CSITPRODUCTNAME | Conditional | String (255) | Nombre en catalogo del producto | |
CSITPRODUCTSKU | Conditional | String (255) | SKU en catalogo | |
CSITQUANTITY | Conditional | Integer (10) | Cantidad productos del mismo tipo agregados al carrito | |
CSITTOTALAMOUNT | Conditional | "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." | ||
CSITUNITPRICE | Conditional | String (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." | |
CSPTCURRENCY | Required | String (5) | 1 | Currencies=>'032'(Peso Argentino) |
CSPTGRANDTOTALAMOUNT | Required | Decimal (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." |
CSSTCITY | Required | String (60) | 6 | Ciudad / Acepta acentos comunes, puntos, guion medio y alto, letras con acentos invertidos, ñ / No acepta guion bajo. |
CSSTCOUNTRY | Required | String (2) | 1 | Código ISO |
CSSTEMAIL | Required | String (100) | 1 | Correo electrónico del comprador con formato válido (solo letras (a-z,A-Z), números, puntos, guiones y sin espacios). |
CSSTFIRSTNAME | Required | String (60) | 6 | Nombre del tarjeta habiente / Acepta acentos comunes, puntos, guion medio y alto, letras con acentos invertidos, ñ / No acepta guion bajo. |
CSSTLASTNAME | Required | String (60) | 6 | Apellido del tarjetahabiente / Acepta acentos comunes, puntos, guion medio y alto, letras con acentos invertidos, ñ / No acepta guion bajo. |
CSSTPHONENUMBER | Required | String (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" |
CSSTPOSTALCODE | Required | String (10) | 1 | Código Postal |
CSSTSTATE | Required | String (2) | 1 | Estado (Si el country = US, el campo se valida para un estado v lido en USA) |
CSSTSTREET1 | Required | String (60) | 6 | Calle 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. |
CSSTSTREET2 | Optional | String (60) | Barrio | |
CSMDD1 | Required | String (255) | 1 | Incluir numero de comercio proveniente del campo NROCOMERCIO del API DECIDIR |
CSMDD2 | Required | String (255) | 1 | Incluir el nombre del comercio, Decidir puede obtener este dato del portal de configuracion de comercios |
CSMDD3 | Required (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" |
CSMDD4 | Optional (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" | |
CSMDD5 | Optional | String (255) | Valor numerico que detalle el numero de cuotas | |
CSMDD6 | Optional (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." | |
CSMDD7 | Optional | String (255) | Numero de dias que tiene registrado un cliente en el portal del comercio. | |
CSMDD8 | Optional | String (255) | Valor Boleano para indicar si el usuario esta comprando como invitado en la pagina del comercio. Valores posibles (S/N) | |
CSMDD9 | Optional | String (255) | Valor del password del usuario registrado en el portal del comercio. Incluir el valor en hash | |
CSMDD10 | Optional | String (255) | Conteo de transacciones realizadas por el mismo usuario registrado en el portal del comercio | |
CSMDD11 | Optional | String (255) | Incluir numero de telefono adicional del comprador | |
CSMDD12 | Optional | String (255) | Numero de dias que tiene el comercio para hacer la entrega | |
CSMDD13 | Optional (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." | |
CSMDD14 | Optional | String (255) | Valor booleano para identificar si el cliente requiere un comprobante fiscal o no S / N | |
CSMDD15 | Optional | String (255) | Incluir numero de cliente frecuente | |
CSMDD16 | Optional | String (255) | Incluir numero de cupon de descuento | |
CSMDD35 | Conditional (Transaccion con Visa) | String (255) | Tipo de documento solicitado por el comercio al cliente | |
CSMDD36 | Conditional (Transaccion con Visa) | String (255) | Numero de documento solicitado por el comercio al cliente | |
CSMDD37 | Conditional (Transaccion con Visa) | String (255) | Numero de puerta | |
CSMDD38 | onditional (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 | |
CSMDD39 | Conditional (Transaccion con Visa) | String (255) | Valor numero correspondiente a la validacion de cada uno de los datos anteriores ejemplo: 1012 | |
CSMDD40 | Optional | String(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" | |
CSMDD41 | Optional | String(1) | Datos proporcionado por DECIDIR en el form. De pago. Valores posibles S/N | |
CSMDD42 | Optional | String(1) | Datos proporcionado por DECIDIR en el form. De pago. Valores posibles S/N | |
CSMDD80 | Required | Integer (20) | Número de cuenta del vendedor | |
CSMDD81 | Required | String(255) | Mail del vendedor en TP | |
CSMDD82 | Required | Integer (6) | Rubro asignado por el analista de riesgos de Back Office | |
CSMDD83 | Required | Integer (2) | Antigüedad de la cuenta vendedor | |
CSMDD84 | Required | String (15) | Consumidor Final / Profesional / Empresa | |
CSMDD85 | Required | Integer(1) | 0 (No se le pidió) / 1 (Se le pidió y se validó) / 2 (Uso Futuro) | |
CSMDD86 | Requerido (para Billetera) | Integer(20) | Número de cuenta del comprador | |
CSMDD87 | Requerido (para Billetera) | Integer (3) | Antigüedad de la cuenta comprador (Meses) | |
CSMDD88 | Requerido (para Billetera) | Integer (3) | Cantidad de tarjetas Habilitadas de la Billetera | |
CSMDD89 | Requerido (para Billetera) | Integer (2) | Nivel de Riesgo asignado al Medio de Pago que Utiliza |
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:
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.
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,
PUSHNOTIFYENDPOINT = null,
PUSHNOTIFYMETHOD = null,
PUSHNOTIFYSTATES = null,
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 }
}
}
}
}
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.
En este caso hay que llamar a getByRangeDateTime() y devolvera todas las operaciones realizadas en el rango de fechas dado
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
La SDK cuenta con un método para obtener todos los medios de pago habilitados en TodoPago.
Map<String, Object> discoverPaymentMethods=tpc.discoverPaymentMethods();
La SDK cuenta con un método para obtener todos los medios de pago habilitados en TodoPago.
Map<String, Object> g = tpc.discoverPaymentMethods();
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:
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: 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 }
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:
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: 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 }
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.
Libreria
El formulario requiere incluir en la pagina una libreria Javascript de TodoPago.
El endpoint depende del entorno:
- Desarrollo: https://developers.todopago.com.ar/resources/TPHybridForm-v0.1.js
- Produccion: https://forms.todopago.com.ar/resources/TPHybridForm-v0.1.js
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_btnPagarConBilletera"/>
<button id="MY_btnConfirmarPago"/>
</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 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',
callbackBilleteraFunction: 'billeteraPaymentResponse',
callbackCustomSuccessFunction: 'customPaymentSuccessResponse',
callbackCustomErrorFunction: 'customPaymentErrorResponse',
botonPagarId: 'MY_btnConfirmarPago',
botonPagarConBilleteraId: 'MY_btnPagarConBilletera',
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: '[email protected]',
defaultTipoDoc: 'DNI'
});
//callbacks de respuesta del pago
function validationCollector(parametros) {
}
function billeteraPaymentResponse(response) {
}
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:
- billeteraPaymentResponse: Devuelve response si el pago con billetera se realizó correctamente.
- 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
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("[email protected]", "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;
}
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();
Mediante esta funcionalidad, se permite setear el número máximo de cuotas que se desplegará en el formulario de pago.
Para hacer uso de esta funcionalidad debe agregarse en el Map<String, String> parameters del método sendAuthorizeRequest el campo MAXINSTALLMENTS con el valor máximo de cuotas a ofrecer (generalmente de 1 a 12)
Map<String, String> parameters = new HashMap<String, String>();
parameters.put(ElementNames.MAXINSTALLMENTS, "12");
Mediante esta funcionalidad, se permite setear el número minimo de cuotas que se desplegará en el formulario de pago.
Para hacer uso de esta funcionalidad debe agregarse en el Map<String, String> parameters del método sendAuthorizeRequest el campo MININSTALLMENTS con el valor minimo de cuotas a ofrecer (generalmente de 1 a 12)
Map<String, String> parameters = new HashMap<String, String>();
parameters.put(ElementNames.MININSTALLMENTS, "1");
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
Map<String, String> parameters = new HashMap<String, String>();
parameters.put(ElementNames.TIMEOUT, "350000");
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 #
Map<String, String> parameters = new HashMap<String, String>();
parameters.put("AVAILABLEPAYMENTMETHODSIDS", "1#42#500");
Solo utilizado para incluir los datos de control de fraude
Provincia | Código |
---|---|
CABA | C |
Buenos Aires | B |
Catamarca | K |
Chaco | H |
Chubut | U |
Córdoba | X |
Corrientes | W |
Entre Ríos | E |
Formosa | P |
Jujuy | Y |
La Pampa | L |
La Rioja | F |
Mendoza | M |
Misiones | N |
Neuquén | Q |
Río Negro | R |
Salta | A |
San Juan | J |
San Luis | D |
Santa Cruz | Z |
Santa Fe | S |
Santiago del Estero | G |
Tierra del Fuego | V |
Tucumán | T |
Id mensaje | Mensaje |
---|---|
-1 | Tu compra fue exitosa. |
1081 | Tu saldo es insuficiente para realizar la transacción. |
1100 | El monto ingresado es menor al mínimo permitido |
1101 | El monto ingresado supera el máximo permitido. |
1102 | La tarjeta ingresada no corresponde al Banco indicado. Revisalo. |
1104 | El precio ingresado supera al máximo permitido. |
1105 | El precio ingresado es menor al mínimo permitido. |
2010 | En este momento la operación no pudo ser realizada. Por favor intentá más tarde. Volver a Resumen. |
2031 | En este momento la validación no pudo ser realizada, por favor intentá más tarde. |
2050 | Lo sentimos, el botón de pago ya no está disponible. Comunicate con tu vendedor. |
2051 | La operación no pudo ser procesada. Por favor, comunicate con tu vendedor. |
2052 | La operación no pudo ser procesada. Por favor, comunicate con tu vendedor. |
2053 | La operación no pudo ser procesada. Por favor, intentá más tarde. Si el problema persiste comunicate con tu vendedor |
2054 | Lo sentimos, el producto que querés comprar se encuentra agotado por el momento. Por favor contactate con tu vendedor. |
2056 | La operación no pudo ser procesada. Por favor intentá más tarde. |
2057 | La operación no pudo ser procesada. Por favor intentá más tarde. |
2059 | La operación no pudo ser procesada. Por favor intentá más tarde. |
90000 | La cuenta destino de los fondos es inválida. Verificá la información ingresada en Mi Perfil. |
90001 | La cuenta ingresada no pertenece al CUIT/ CUIL registrado. |
90002 | No pudimos validar tu CUIT/CUIL. Comunicate con nosotros acá para más información. |
99005 | Tu compra no pudo realizarse. Iniciala nuevamente. |
99900 | El pago fue realizado exitosamente |
99901 | No hemos encontrado tarjetas vinculadas a tu Billetera. Podés adherir medios de pago desde www.todopago.com.ar |
99902 | No se encontro el medio de pago seleccionado |
99903 | Lo sentimos, hubo un error al procesar la operación. Por favor reintentá más tarde. |
99904 | Tu compra no puede ser realizada. Comunicate con tu vendedor. |
99953 | Tu compra no pudo realizarse. Iniciala nuevamente o utilizá otro medio de pago. |
99960 | Esta compra requiere autorización de VISA. Comunicate al número que se encuentra al dorso de tu tarjeta. |
99961 | Esta compra requiere autorización de AMEX. Comunicate al número que se encuentra al dorso de tu tarjeta. |
99970 | Lo sentimos, no pudimos procesar la operación. Por favor reintentá más tarde. |
99971 | Lo sentimos, no pudimos procesar la operación. Por favor reintentá más tarde. |
99978 | Lo sentimos, no pudimos procesar la operación. Por favor reintentá más tarde. |
99979 | Lo sentimos, el pago no pudo ser procesado. |
99980 | Ya realizaste un pago en este sitio por el mismo importe. Si querés realizarlo nuevamente esperá 5 minutos. |
99982 | Tu compra no pudo ser procesada. Iniciala nuevamente utilizando otro medio de pago. |
99983 | Lo sentimos, el medio de pago no permite la cantidad de cuotas ingresadas. Por favor intentá más tarde. |
99984 | Lo sentimos, el medio de pago seleccionado no opera en cuotas. |
99985 | Lo sentimos, el pago no pudo ser procesado. |
99986 | Lo sentimos, en este momento la operación no puede ser realizada. Por favor intentá más tarde. |
99987 | Lo sentimos, en este momento la operación no puede ser realizada. Por favor intentá más tarde. |
99988 | Lo sentimos, momentaneamente el medio de pago no se encuentra disponible. Por favor intentá más tarde. |
99989 | La tarjeta ingresada no está habilitada. Comunicate con la entidad emisora de la tarjeta para verificar el incoveniente. |
99990 | La tarjeta ingresada está vencida. Por favor seleccioná otra tarjeta o actualizá los datos. |
99991 | Los datos informados son incorrectos. Por favor ingresalos nuevamente. |
99992 | La fecha de vencimiento es incorrecta. Por favor seleccioná otro medio de pago o actualizá los datos. |
99993 | La tarjeta ingresada no está vigente. Por favor seleccioná otra tarjeta o actualizá los datos. |
99994 | El saldo de tu tarjeta no te permite realizar esta compra. Iniciala nuevamente utilizando otro medio de pago. |
99995 | La tarjeta ingresada es invalida. Seleccioná otra tarjeta para realizar el pago. |
99996 | La operación fué rechazada por el medio de pago porque el monto ingresado es inválido. |
99997 | Lo sentimos, en este momento la operación no puede ser realizada. Por favor intentá más tarde. |
99998 | Lo sentimos, la operación fue rechazada. Comunicate con la entidad emisora de la tarjeta para verificar el incoveniente o seleccioná otro medio de pago. |
99999 | Lo 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. |
**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 |
- 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