{"id":43122878,"url":"https://github.com/payway-ar/sdk-java-ventaonline","last_synced_at":"2026-01-31T20:03:44.674Z","repository":{"id":37517155,"uuid":"211386884","full_name":"payway-ar/sdk-java-ventaonline","owner":"payway-ar","description":"SDK de BackEnd para Gateway de pago Payway","archived":false,"fork":false,"pushed_at":"2026-01-23T18:52:36.000Z","size":39791,"stargazers_count":1,"open_issues_count":3,"forks_count":6,"subscribers_count":2,"default_branch":"master","last_synced_at":"2026-01-24T06:32:58.066Z","etag":null,"topics":["java","sdk","sdk-java"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/payway-ar.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-09-27T19:18:06.000Z","updated_at":"2025-12-22T19:04:53.000Z","dependencies_parsed_at":"2024-08-21T21:03:47.561Z","dependency_job_id":"fd330b27-57b6-4a50-9369-1e54c714d057","html_url":"https://github.com/payway-ar/sdk-java-ventaonline","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/payway-ar/sdk-java-ventaonline","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/payway-ar%2Fsdk-java-ventaonline","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/payway-ar%2Fsdk-java-ventaonline/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/payway-ar%2Fsdk-java-ventaonline/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/payway-ar%2Fsdk-java-ventaonline/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/payway-ar","download_url":"https://codeload.github.com/payway-ar/sdk-java-ventaonline/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/payway-ar%2Fsdk-java-ventaonline/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28952582,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-31T18:30:42.805Z","status":"ssl_error","status_checked_at":"2026-01-31T18:30:19.593Z","response_time":128,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["java","sdk","sdk-java"],"created_at":"2026-01-31T20:03:28.903Z","updated_at":"2026-01-31T20:03:44.645Z","avatar_url":"https://github.com/payway-ar.png","language":"Java","readme":"\u003ca name=\"inicio\"\u003e\u003c/a\u003e\r\nPayway SDK Java\r\n===============\r\n\r\nModulo para conexión con gateway de pago Payway\r\n+ [Introducción](#introduccion)\r\n  + [Soporte de Integración](#Soporte)\r\n  + [Alcance](#scope)\r\n  + [Diagrama de secuencia](#secuencia)\r\n+ [Instalación](#instalacion)\r\n  + [Versiones de Java soportadas](#versionesdejavasoportadas)\r\n  + [Ambientes](#environments)\r\n+ [Uso](#uso)\r\n  + [Inicializar la clase correspondiente al conector](#initconector)\r\n  + [Operatoria del Gateway](#operatoria)\r\n    + [Ejecución del Pago](#payment)\r\n      + [Transacción simple](#single)\r\n      + [Transacción PCI](#pci)\r\n      + [Ejecución del pago PCI Tokenizado](#payment-pci-tokenizado)\r\n      + [Transacción GDS](#gds)\r\n      + [Transacción GDS PCI](#gdspci)\r\n      + [Transacción BSA PCI](#bsapci)\r\n      + [Transacción BSA no PCI](#bsanopci)\r\n      + [Transacción Agro no PCI](#agronopci)\r\n      + [Transacción distribuida](#distributed)\r\n      + [Operación en dos pasos](#twosteps)\r\n      \u003c!--- + [Transacción de Pagos VTE VISA](#pagoAgregador)(TODO) --\u003e\r\n      \u003c!--- + [Transacción de Comercio Agregador](#pagoAgregador)(TODO) --\u003e\r\n      \u003c!--- + [Transacción Offline](#pagoOffline) (TODO) --\u003e\r\n      \u003c!--- + [Transacción PMC](#pagoPMC)(TODO) --\u003e\r\n    + [Ejecución de pago simple con 3ds](#payment-simple-3ds)\r\n    + [Ejecucion de resolucion del challenge](#payment-challenge-3ds)\r\n    + [Listado de Pagos](#getallpayments)\r\n    + [Información de un Pago](#getpaymentinfo)\r\n    + [Devoluciones de pagos](#refunds)\r\n      + [Anulación / Devolución Total de Pago](#totalrefund)\r\n      + [Anulación de Devolución Total](#deleterefund)\r\n      + [Devolución Parcial de un Pago](#partialrefund)\r\n      + [Anulación de Devolución Parcial](#deletepartialrefund)\r\n      \u003c!--- + [Historial de Devoluciones](#historyrefund) (TODO) --\u003e\r\n  + [Tokenización de tarjetas de crédito](#tokenizaciontarjeta)\r\n    + [Listado de tarjetas tokenizadas](#listadotarjetastokenizadas)\r\n    + [Ejecución de pago tokenizado](#pagotokenizado)\r\n    + [Eliminación de tarjeta tokenizada](#eliminartarjetatokenizada)\r\n  + [Tokenización Interna](#tokenizacioninterna)\r\n    + [Obtener Token](#tokenizacioninternaobtenertoken)\r\n    + [Pagar](#tokenizacioninternapagar)\r\n  + [Integración con Cybersource](#cybersource)\r\n    + [Parámetros Comunes](#parametros-comunes)\r\n    + [Retail](#retail)\r\n    + [Ticketing](#ticketing)\r\n    + [Digital Goods](#digital-goods)\r\n    + [Travel](#travel)\r\n  + [Uso de Responses](#usoResponses)\r\n  + [Manejo de Excepciones](#manejoExceptions)\r\n    + [PaymentException](#paymentException)\r\n    + [DecidirException](#decidirException)\r\n    \t+ [ValidateStatusException](#validateStatusException)\r\n      + [ValidateException](#validateException)\r\n      + [ApiException](#apiException)\r\n      + [NotFoundException](#notFoundException)\r\n    + [RefundException](#refundException)\r\n    + [AnnulRefundException](#annulRefundException)\r\n+ [Link Checkout](#linkCheckout)\r\n+ [Tablas de referencia](#tablasreferencia)\r\n  + [Códigos de Medios de Pago](#codigos-de-medios-de-pago)\r\n  + [Divisas Aceptadas](#divisasa)\r\n  + [Provincias](#provincias)\r\n  + [Parámetros](#parametros)\r\n    + [Parámetros de Pagos](#parametrosPago)\r\n        + [Parámetros para PagoMisCuentas](#parametrosPMC)\r\n        + [Parámetros para Pago Offline](#parametrosOffline)\r\n        + [Parámetros para Pago Distribuido por Monto](#parametrosDistMonto)\r\n        + [Parámetros para Pago Distribuido por Porcentaje](#parametrosDistPorc)\r\n        + [Parámetros de Comercio Agregador](#parametrosAgregador)\r\n    + [Parámetros de Devolución](#parametrosDevolucion)\r\n  + [Atributos de Excepciones](#atributosExcepciones)\r\n  + [Errores de Sistema](#erroresSistema)\r\n\r\n\u003ca name=\"introduccion\"\u003e\u003c/a\u003e\r\n## Introducción\r\nEl flujo de una transacción a través de las **sdks** consta de dos pasos, la **generaci\u0026oacute;n de un token de pago** por parte del cliente y el **procesamiento de pago** por parte del comercio. Existen sdks espec\u0026iacute;ficas para realizar estas funciones en distintos lenguajes que se detallan a continuaci\u0026oacute;n:\r\n\r\n+ **Generaci\u0026oacute;n de un token de pago.**  Se utiliza alguna de las siguentes **sdks front-end** :\r\n  + [sdk Javascript](https://github.compayway-ar/sdk-javascript-ventaonline)\r\n+ **Procesamiento de pago.**  Se utiliza alguna de las siguentes **sdks back-end** :\r\n  + [sdk Java](https://github.com/payway-ar/sdk-java-ventaonline)\r\n  + [sdk PHP](https://github.com/payway-ar/sdk-php-ventaonline)\r\n  + [sdk .Net](https://github.com/payway-ar/sdk-net-ventaonline)\r\n  + [sdk Node](https://github.com/payway-ar/sdk-node-ventaonline)\r\n\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\u003ca name=\"scope\"\u003e\u003c/a\u003e\r\n## Alcance\r\nLa **sdk Java** provee soporte para su **aplicaci\u0026oacute;n back-end**, encargandose de la comunicaci\u0026oacute;n del comercio con la **API Payway** utilizando su **API Key privada**\u003csup\u003e1\u003c/sup\u003e y el **token de pago** generado por el cliente.\r\n\r\nPara generar el token de pago, la aplicaci\u0026oacute;n cliente realizar\u0026aacute; con **Payway** a trav\u0026eacute;s de alguna de las siguentes **sdks front-end**:\r\n+ [sdk Javascript](https://github.compayway-ar/sdk-javascript-ventaonline)\r\n\r\n![imagen de sdks](./docs/img/DiagramaSDKs.png)\u003c/br\u003e\r\n\r\n---\r\n\u003csup\u003e_1 - Las API Keys serán provistas por el equipo de Soporte de Payway ventas online(soporte@payway.com.ar). _\u003c/sup\u003e\r\n\u003ca name=\"Soporte\"\u003e\u003c/a\u003e\r\n## Soporte de Integración\r\n**Payway** ofrece un servicio de Soporte 24x7 con el siguiente alcance:\r\n•\tLunes a Viernes de 9 a 18 horas: Soporte Técnico, Atención Comercial y Soporte Transaccional.\r\n•\tFuera de Horario Laboral: Control de Red.\r\n**CANALES DE ATENCIÓN**\r\n•\tTeléfono: +54 11 4379 3460\r\n•\tImplementaciones: integraciones-ventasonline@payway.com.ar\r\n•\tControl de Red:  controldered@payway.com.ar (en caso de disrupción transaccional)\r\n\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\u003ca name=\"secuencia\"\u003e\u003c/a\u003e\r\n\r\n## Diagrama de secuencia\r\nEl flujo de una transacción a través de las **sdks** consta de dos pasos, a saber:\r\n\r\n1. **sdk front-end:** Se realiza una solicitud de token de pago con la Llave de Acceso pública (public API Key), enviando los datos sensibles de la tarjeta (PAN, mes y año de expiración, código de seguridad, titular, y tipo y número de documento) y obteniéndose como resultado un token que permitirá realizar la transacción posterior.\r\n\r\n2. **sdk back-end:** Se ejecuta el pago con la Llave de Acceso privada (private API Key), enviando el token generado en el Paso 1 más el identificador de la transacción a nivel comercio, el monto total, la moneda y la cantidad de cuotas.\r\n\r\nA continuación, se presenta un diagrama con el Flujo de un Pago.\r\n\r\n![imagen de configuracion](./docs/img/FlujoPago.png)\u003c/br\u003e\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\u003ca name=\"instalacion\"\u003e\u003c/a\u003e\r\n## Instalaci\u0026oacute;n\r\nSe encuentran disponibles *2* implementaciones para la \u0026uacute;ltima versi\u0026oacute;n. Una es compatible con __Java7__ _(o superior)_ y la otra con __Java6__ _(o superior)_.\r\nSe puede realizar la integración a través de un manager de dependencias, o bien manualmente descargando el _JAR_ desde [Github](https://github.com).\r\n \r\n### Java 7+\r\n#### Manager de dependencias\r\n+  __repositoryUrl:__ _http://repo.dev.redbee.io/content/repositories/decidir-sdk/_\r\n+  __groupId:__ _com.decidir.api_\r\n+  __artifactId:__ _decidir2-sdk-java7_\r\n+  __version:__ _2.7.1_\r\n\r\n#### Descarga manual\r\n[Versi\u0026oacute;n 2.7.6](https://github.com/payway-ar/sdk-java-ventaonline/blob/master/dist/payway-v2.7.6-java7.jar)\r\n\r\n\u003ca name=\"versionesdejavasoportadas\"\u003e\u003c/a\u003e\r\n### Versiones de Java soportadas\r\nLa versi\u0026oacute;n implementada de la SDK, est\u0026aacute; testeada para versiones a partir de **Java 1.6**\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\u003ca name=\"environments\"\u003e\u003c/a\u003e\r\n\r\n## Ambientes\r\n\r\nLa **sdk Java** permite trabajar con los ambientes Sandbox y Producc\u0026oacute;n de Payway.\r\nEl ambiente se debe instanciar indicando su URL.\r\n\r\n```java\r\nimport com.decidir.sdk.Decidir;\r\n\r\npublic class MiClase {\r\n\tString privateApiKey = \"92b71cf711ca41f78362a7134f87ff65\";//Private API Key habilitada para operar en ambiente Sandbox\r\n\tString urlSandbox = \"https://developers.decidir.com/api/v2/\";\r\n\tString urlProduccion = \"https://live.decidir.com/api/v2/\";\r\n\t// Variables para identificar el origen de la transacción, estas mismas pueden ser enviadas vacías.\r\n\t// Gruoper hace referencia al partner que esté consumiendo el servicio\r\n\tString grouper = \"\";\r\n\t// Developer hace referencia al desarrollador que cobra por transacción/otro\r\n\tString developer = \"\";\r\n\tint timeout = 10; // 10 segundos de timeout\r\n\t//Para el ambiente Sandbox\r\n\tDecidir decidirSandbox = new Decidir(privateApiKey, urlSandbox, timeout, grouper, developer);\r\n\t//Para el ambiente de produccion\r\n\tDecidir decidirProd = new Decidir(privateApiKey, urlProduccion, timeout, grouper, developer);\r\n\t// ...codigo...\r\n}\r\n```\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\u003ca name=\"uso\"\u003e\u003c/a\u003e\r\n## Uso\r\n\r\n\u003ca name=\"initconector\"\u003e\u003c/a\u003e\r\n### Inicializar la clase correspondiente al conector.\r\n\r\nInstanciación de la clase `Decidir`\r\n\r\nLa misma recibe como parámetros la API Key privada provista por Decidir para el comercio y el ambiente en que se trabajara.\r\n\r\nLa API Key será provista por el equipo de Soporte de Payway ventas online(soporte@payway.com.ar).\r\n\r\nA partir de ahora y por el resto de la documentaci\u0026oacute;n, se ejemplificar\u0026aacute; utilizando una APIKey habilitada para operar en el ambiente Sandbox.\r\n\r\n```java\r\n// ...codigo...\r\nString privateApiKey = \"92b71cf711ca41f78362a7134f87ff65\";//Private API Key habilitada para operar en ambiente Sandbox\r\nString urlSandbox = \"https://developers.decidir.com/api/v2/\";\r\nint timeout = 10; // 10 segundos de timeout\r\n// Variables para identificar el origen de la transacción, estas mismas pueden ser enviadas vacías.\r\n// Grouper hace referencia al partner que esté consumiendo el servicio\r\nString grouper = \"\";\r\n// Developer hace referencia al desarrollador que cobra por transacción/otro\r\nString developer = \"\";\r\n//Ejemplo para el ambiente Sandbox\r\nDecidir decidir = new Decidir(privateApiKey, urlSandbox, timeout, grouper, developer);\r\n//...codigo...\r\n```\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\u003ca name=\"operatoria\"\u003e\u003c/a\u003e\r\n\r\n## Operatoria del Gateway\r\n\r\n\u003ca name=\"payment\"\u003e\u003c/a\u003e\r\n\r\n### Ejecución del Pago\r\nUna vez generado y almacenado el token de pago, se deberá ejecutar la solicitud de pago más el token previamente generado.\r\nAdemás del token de pago y los parámetros propios de la transacción, el comercio deberá identificar la compra con el site_transaction_id y el user_id(id \r\ndel Customer).\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\r\n\u003ca name=\"single\"\u003e\u003c/a\u003e\r\n\r\n#### Transacción simple\r\nA continuaci\u0026oacute;n se muestra un ejemplo con una transacci\u0026oacute;n simple sin [Cybersource](#cybersource).\r\n\r\n*Aclaracion* : amount es un campo long el cual representa el valor en centavos.\r\n\r\n```java\r\n// ...codigo...\r\nString privateApiKey = \"92b71cf711ca41f78362a7134f87ff65\";//Private API Key habilitada para operar en ambiente Sandbox\r\nString urlSandbox = \"https://developers.decidir.com/api/v2/\";\r\n// Variables para identificar el origen de la transacción, estas mismas pueden ser enviadas vacías.\r\n// Grouper hace referencia al partner que esté consumiendo el servicio\r\nString grouper = \"\";\r\n// Developer hace referencia al desarrollador que cobra por transacción/otro\r\nString developer = \"\";\r\nint timeout = 10; // 10 segundos de timeout\r\n//Ejemplo para el ambiente Sandbox\r\nDecidir decidir = new Decidir(privateApiKey, urlSandbox, timeout, grouper, developer);\r\nCustomer customer = new Customer();\r\ncustomer.setId(\"test\"); // user_id\r\ncustomer.setEmail(\"test@payway.com\"); // user_email\r\n\r\nPaymentRequest paymentRequest = new PaymentRequest();\r\npaymentRequest.setToken(\"ae9fc3e5-ff41-4de2-9c91-81030be1c4a6\"); // token de pago\r\npaymentRequest.setSite_transaction_id(\"TX00001234\"); //ID de transaccion asignada por el comercio, no puede repetirse\r\npaymentRequest.setCustomer(customer);\r\npaymentRequest.setPayment_method_id(1); //VISA\r\npaymentRequest.setBin(\"450799\");\r\npaymentRequest.setAmount(23250L);//Valor en centavos: $232.50\r\npaymentRequest.setCurrency(Currency.ARS);\r\npaymentRequest.setInstallments(1);\r\npaymentRequest.setPayment_type(PaymentType.SINGLE); //Tipo de pago simple\r\npaymentRequest.setFirst_installment_expiration_date(\"2018-05-15\"); // Llenar en caso de una compra con tarjeta NacionPyme\r\nList\u003cSubPayment\u003e sub_payments = new ArrayList\u003cSubPayment\u003e(); // Llenar en caso de transaccion distribuida por monto\r\npaymentRequest.setSub_payments(sub_payments); //Debe enviarse una lista vacia\r\n\r\ntry {\r\n\tDecidirResponse\u003cPaymentResponse\u003e paymentResponse = decidir.payment(paymentRequest);\r\n\t// Procesamiento de respuesta de ejecucion de pago\r\n\t// ...codigo...\r\n} catch (PaymentException pe) {\r\n\t // Manejo de pago rechazado\r\n\t // ...codigo...\r\n} catch (DecidirException de) {\r\n\t// Manejo de excepcion  de Decidir\r\n\t // ...codigo...\r\n} catch (Exception e) {\r\n\t //Manejo de excepcion general\r\n\t// ...codigo...\r\n}\r\n// ...codigo...\r\n```\r\n\u003ca name=\"pci\"\u003e\u003c/a\u003e\r\n\r\n#### Transacción PCI\r\nA continuaci\u0026oacute;n se muestra un ejemplo con una transacci\u0026oacute;n pci sin [Cybersource](#cybersource).\r\n\r\n*Aclaracion* : amount es un campo long el cual representa el valor en centavos.\r\n\r\n```java\r\n// ...codigo...\r\nString privateApiKey = \"92b71cf711ca41f78362a7134f87ff65\";//Private API Key habilitada para operar en ambiente Sandbox\r\nString urlSandbox = \"https://developers.decidir.com/api/v2/\";\r\nint timeout = 10; // 10 segundos de timeout\r\n// Variables para identificar el origen de la transacción, estas mismas pueden ser enviadas vacías.\r\n// Grouper hace referencia al partner que esté consumiendo el servicio\r\nString grouper = \"\";\r\n// Developer hace referencia al desarrollador que cobra por transacción/otro\r\nString developer = \"\";\r\n//Ejemplo para el ambiente Sandbox\r\nDecidir decidir = new Decidir(privateApiKey, urlSandbox, timeout, grouper, developer);\r\n\r\nCustomer customer = new Customer();\r\ncustomer.setId(\"test\"); // user_id\r\ncustomer.setEmail(\"test@payway.com\"); // user_email\r\n\r\nPaymentPciRequest paymentPciRequest = new PaymentPciRequest();\r\nCardData cardData = new CardData();\r\ncardData.setCard_expiration_month(\"12\");\r\ncardData.setCard_expiration_year(\"20\");\r\ncardData.setIp_address(\"192.168.1.10\"); // Customer IP, en caso de usar Cybersource se usa en el campo CSBTIPADDRESS \r\n\r\nIdentificationType type = IdentificationType.fromId(1); //tipo de documento, ejemplo dni\r\nString number = \"23968498\"; // nro de documento\r\n\r\nIdentification identification = new Identification(); //identificacion personal\r\nidentification.setNumber(number);\r\nidentification.setType(type);\r\ncardData.setCard_holder_identification(identification);\r\ncardData.setCard_holder_name(\"Juan\");\r\ncardData.setCard_number(\"4509790113276723\");\r\n//RetailFraudDetectionData retail =  new RetailFraudDetectionData();\r\n//RetailTPFraudDetectionData retailTP =  new RetailTPFraudDetectionData();\r\nServicesFraudDetectionData services =  new ServicesFraudDetectionData();\r\n\r\npaymentPciRequest.setCard_data(cardData);\r\npaymentPciRequest.setSite_transaction_id(\"TX00001234\"); //ID de transaccion asignada por el comercio, no puede repetirse\r\npaymentPciRequest.setCustomer(customer);\r\npaymentPciRequest.setPayment_method_id(1); //VISA\r\npaymentPciRequest.setBin(\"450979\");\r\npaymentPciRequest.setAmount(23250L);//Valor en centavos: $232.50\r\npaymentPciRequest.setCurrency(Currency.ARS);\r\npaymentPciRequest.setInstallments(1);\r\npaymentPciRequest.setPayment_type(PaymentType.SINGLE); //Tipo de pago simple\r\nList\u003cSubPayment\u003e sub_payments = new ArrayList\u003cSubPayment\u003e(); // Llenar en caso de transaccion distribuida por monto\r\npaymentPciRequest.setSub_payments(sub_payments); //Debe enviarse una lista vacia\r\n\r\nAggregator aggregateData = new Aggregator();\r\naggregateData.setIndicator(\"1\");\r\naggregateData.setIdentification_number(\"30598910045\");\r\naggregateData.setBill_to_pay(\"Decidir_Test\");\r\naggregateData.setBill_to_refund(\"Decidir_Test\");\r\naggregateData.setMerchant_name(\"DECIDIR\");\r\naggregateData.setStreet(\"Lavarden\");\r\naggregateData.setNumber(\"247\");\r\naggregateData.setPostal_code(\"C1437FBE\");\r\naggregateData.setCategory(\"05044\");\r\naggregateData.setChannel(\"005\");\r\naggregateData.setGeographic_code(\"C1437\");\r\naggregateData.setCity(\"Ciudad de Buenos Aires\");\r\naggregateData.setMerchant_id(\"decidir_Agregador\");\r\naggregateData.setProvince(\"B\");\r\naggregateData.setCountry(\"ARG\")\r\naggregateData.setMerchant_email(\"qa@decidir.com\");\r\naggregateData.setMerchant_phone(\"+541135211111\");\r\naggregateData.setProduct(\"producto_x\");\r\naggregateData.setOrigin_country(\"032\");\r\naggregateData.setMerchant_url(\"http://merchant-url\");\r\naggregateData.setAggregator_name(\"payfact\");\r\naggregateData.setGateway_id(\"payway\");\r\naggregateData.setSeller_id(\"SellerId1234567891011\");\r\n\r\nSubAgrupator subAgrupator = new SubAgrupator();\r\nsubAgrupator.setIndicator(\"2\");\r\nsubAgrupator.setIdentification_number(\"30598911045\");\r\nsubAgrupator.setMerchant_name(\"PAYWAY\");\r\nsubAgrupator.setStreet(\"La rioja\");\r\nsubAgrupator.setCategory(\"05045\");\r\n\r\naggregateData.setSub_agrupator(subAgrupator);\r\n\r\npaymentPciRequest.setAggregate_data(aggregateData);\r\n\r\ntry {\r\n\tDecidirResponse\u003cPaymentResponse\u003e paymentResponse = decidir.payment(paymentRequest);\r\n\t// Procesamiento de respuesta de ejecucion de pago\r\n\t// ...codigo...\r\n} catch (PaymentException pe) {\r\n\t // Manejo de pago rechazado\r\n\t // ...codigo...\r\n} catch (DecidirException de) {\r\n\t// Manejo de excepcion  de Payway\r\n\t // ...codigo...\r\n} catch (Exception e) {\r\n\t //Manejo de excepcion general\r\n\t// ...codigo...\r\n}\r\n// ...codigo...\r\n```\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\r\n\u003ca name=\"payment-pci-tokenizado\"\u003e\u003c/a\u003e\r\n\r\n### Ejecución del pago PCI Tokenizado\r\nA continuaci\u0026oacute;n se muestra un ejemplo con una transacci\u0026oacute;n pci sin [Cybersource](#cybersource) tokenizado.\r\n\r\n*Aclaracion* : amount es un campo long el cual representa el valor en centavos.\r\n\r\n```java\r\n// ...codigo...\r\nString privateApiKey = \"92b71cf711ca41f78362a7134f87ff65\";//Private API Key habilitada para operar en ambiente Sandbox\r\nString urlSandbox = \"https://developers.decidir.com/api/v2/\";\r\nint timeout = 10; // 10 segundos de timeout\r\n// Variables para identificar el origen de la transacción, estas mismas pueden ser enviadas vacías.\r\n// Grouper hace referencia al partner que esté consumiendo el servicio\r\nString grouper = \"\";\r\n// Developer hace referencia al desarrollador que cobra por transacción/otro\r\nString developer = \"\";\r\n//Ejemplo para el ambiente Sandbox\r\nDecidir decidir = new Decidir(privateApiKey, urlSandbox, timeout, grouper, developer);\r\n\r\nCustomer customer = new Customer();\r\ncustomer.setId(\"test\"); // user_id\r\ncustomer.setEmail(\"test@payway.com\"); // user_email\r\n\r\nPaymentPciRequest paymentPciRequest = new PaymentPciRequest();\r\nCardData cardData = new CardData();\r\ncardData.setCard_expiration_month(\"12\");\r\ncardData.setCard_expiration_year(\"20\");\r\ncardData.setIp_address(\"192.168.1.10\"); // Customer IP, en caso de usar Cybersource se usa en el campo CSBTIPADDRESS \r\n\r\nIdentificationType type = IdentificationType.fromId(1); //tipo de documento, ejemplo dni\r\nString number = \"23968498\"; // nro de documento\r\n\r\nIdentification identification = new Identification(); //identificacion personal\r\nidentification.setNumber(number);\r\nidentification.setType(type);\r\ncardData.setCard_holder_identification(identification);\r\ncardData.setCard_holder_name(\"Juan\");\r\ncardData.setCard_number(\"4509790113276723\");\r\n//RetailFraudDetectionData retail =  new RetailFraudDetectionData();\r\n//RetailTPFraudDetectionData retailTP =  new RetailTPFraudDetectionData();\r\nServicesFraudDetectionData services =  new ServicesFraudDetectionData();\r\n\r\npaymentPciRequest.setCard_data(cardData);\r\npaymentPciRequest.setSite_transaction_id(\"TX00001234\"); //ID de transaccion asignada por el comercio, no puede repetirse\r\npaymentPciRequest.setCustomer(customer);\r\npaymentPciRequest.setPayment_method_id(1); //VISA\r\npaymentPciRequest.setBin(\"450979\");\r\npaymentPciRequest.setAmount(23250L);//Valor en centavos: $232.50\r\npaymentPciRequest.setCurrency(Currency.ARS);\r\npaymentPciRequest.setInstallments(1);\r\npaymentPciRequest.setPayment_type(PaymentType.SINGLE); //Tipo de pago simple\r\nList\u003cSubPayment\u003e sub_payments = new ArrayList\u003cSubPayment\u003e(); // Llenar en caso de transaccion distribuida por monto\r\npaymentPciRequest.setSub_payments(sub_payments); //Debe enviarse una lista vacia\r\n\r\n//Logica de pago tokenizado\r\npaymentPciRequest.setIsTokenizedPayment(true);\r\nAggregator aggregateData = new Aggregator();\r\naggregateData.setIndicator(\"1\");\r\naggregateData.setIdentification_number(\"30598910045\");\r\naggregateData.setBill_to_pay(\"Decidir_Test\");\r\naggregateData.setBill_to_refund(\"Decidir_Test\");\r\naggregateData.setMerchant_name(\"DECIDIR\");\r\naggregateData.setStreet(\"Lavarden\");\r\naggregateData.setNumber(\"247\");\r\naggregateData.setPostal_code(\"C1437FBE\");\r\naggregateData.setCategory(\"05044\");\r\naggregateData.setChannel(\"005\");\r\naggregateData.setGeographic_code(\"C1437\");\r\naggregateData.setCity(\"Ciudad de Buenos Aires\");\r\naggregateData.setMerchant_id(\"decidir_Agregador\");\r\naggregateData.setProvince(\"B\");\r\naggregateData.setCountry(\"ARG\")\r\naggregateData.setMerchant_email(\"qa@decidir.com\");\r\naggregateData.setMerchant_phone(\"+541135211111\");\r\naggregateData.setProduct(\"producto_x\");\r\naggregateData.setOrigin_country(\"032\");\r\naggregateData.setMerchant_url(\"http://merchant-url\");\r\naggregateData.setAggregator_name(\"payfact\");\r\naggregateData.setGateway_id(\"payway\");\r\naggregateData.setSeller_id(\"SellerId1234567891011\");\r\n\r\nSubAgrupator subAgrupator = new SubAgrupator();\r\nsubAgrupator.setIndicator(\"2\");\r\nsubAgrupator.setIdentification_number(\"30598911045\");\r\nsubAgrupator.setMerchant_name(\"PAYWAY\");\r\nsubAgrupator.setStreet(\"La rioja\");\r\nsubAgrupator.setCategory(\"05045\");\r\n\r\naggregateData.setSub_agrupator(subAgrupator);\r\n\r\npaymentPciRequest.setAggregate_data(aggregateData);\r\n\r\nCardTokenData cardTokenData = new CardTokenData();\r\ncardTokenData.setToken(\"4540730005109054\");\r\ncardTokenData.setEci(\"05\");\r\ncardTokenData.setCryptogram(\"cryptogram_123467890\");\r\n\r\npaymentPciRequest.setTokenCardData(cardTokenData);\r\n\r\n\r\ntry {\r\n\tDecidirResponse\u003cPaymentResponse\u003e paymentResponse = decidir.payment(paymentPciRequest);\r\n\t// Procesamiento de respuesta de ejecucion de pago\r\n\t// ...codigo...\r\n} catch (PaymentException pe) {\r\n\t // Manejo de pago rechazado\r\n\t // ...codigo...\r\n} catch (DecidirException de) {\r\n\t// Manejo de excepcion  de Payway\r\n\t // ...codigo...\r\n} catch (Exception e) {\r\n\t //Manejo de excepcion general\r\n\t// ...codigo...\r\n}\r\n// ...codigo...\r\n```\r\n\r\n\u003ca name=\"gds\"\u003e\u003c/a\u003e\r\n\r\n#### Transacción GDS\r\nA continuaci\u0026oacute;n se muestra un ejemplo con una transacci\u0026oacute;n GDS simple sin [Cybersource](#cybersource).\r\n\r\n*Aclaracion* : amount es un campo long el cual representa el valor en centavos.\r\n\r\n```java\r\n// ...codigo...\r\nString privateApiKey = \"92b71cf711ca41f78362a7134f87ff65\";//Private API Key habilitada para operar en ambiente Sandbox\r\nString urlSandbox = \"https://developers.decidir.com/api/v2/\";\r\nint timeout = 10; // 10 segundos de timeout\r\n// Variables para identificar el origen de la transacción, estas mismas pueden ser enviadas vacías.\r\n// Grouper hace referencia al partner que esté consumiendo el servicio\r\nString grouper = \"\";\r\n// Developer hace referencia al desarrollador que cobra por transacción/otro\r\nString developer = \"\";\r\n//Ejemplo para el ambiente Sandbox\r\nDecidir decidir = new Decidir(privateApiKey, urlSandbox, timeout, grouper, developer);\r\n\r\nCustomer customer = new Customer();\r\ncustomer.setId(\"test\"); // user_id\r\ncustomer.setEmail(\"test@payway.com\"); // user_email\r\n\r\nGDSPaymentRequestNoPCI gdsPaymentRequest = new GDSPaymentRequestNoPCI();\r\n//RetailFraudDetectionData retail =  new RetailFraudDetectionData();\r\n//RetailTPFraudDetectionData retailTP =  new RetailTPFraudDetectionData();\r\nServicesFraudDetectionData services =  new ServicesFraudDetectionData();\r\n\r\ngdsPaymentRequest.setToken(\"a00373a5-b8d7-4d7d-b14d-4aa447726fd9\"); // token de pago\r\ngdsPaymentRequest.setSite_transaction_id(\"TX00001234\"); //ID de transaccion asignada por el comercio, no puede repetirse\r\ngdsPaymentRequest.setCustomer(customer);\r\ngdsPaymentRequest.setPayment_method_id(1); //VISA\r\ngdsPaymentRequest.setBin(\"450979\");\r\ngdsPaymentRequest.setAmount(23250L);//Valor en centavos: $232.50\r\ngdsPaymentRequest.setCurrency(Currency.ARS);\r\ngdsPaymentRequest.setInstallments(1);\r\ngdsPaymentRequest.setPayment_type(PaymentType.SINGLE); //Tipo de pago simple\r\nList\u003cSubPayment\u003e sub_payments = new ArrayList\u003cSubPayment\u003e(); // Llenar en caso de transaccion distribuida por monto\r\ngdsPaymentRequest.setSub_payments(sub_payments); //Debe enviarse una lista vacia\r\ngdsPaymentRequest.setIata_code(\"4354437656\"); // iata_code (logitud menor o igual 10)\r\ngdsPaymentRequest.setNro_location(\"11140407\"); // Id site del locator (longitud 8)\r\n\r\ntry {\r\n\tDecidirResponse\u003cPaymentResponse\u003e paymentResponse = decidir.payment(paymentRequest);\r\n\t// Procesamiento de respuesta de ejecucion de pago\r\n\t// ...codigo...\r\n} catch (PaymentException pe) {\r\n\t // Manejo de pago rechazado\r\n\t // ...codigo...\r\n} catch (DecidirException de) {\r\n\t// Manejo de excepcion  de payway\r\n\t // ...codigo...\r\n} catch (Exception e) {\r\n\t //Manejo de excepcion general\r\n\t// ...codigo...\r\n}\r\n// ...codigo...\r\n```\r\n\r\n\u003ca name=\"gdspci\"\u003e\u003c/a\u003e\r\n\r\n#### Transacción GDS PCI\r\nA continuaci\u0026oacute;n se muestra un ejemplo con una transacci\u0026oacute;n PCI sin [Cybersource](#cybersource).\r\n\r\n*Aclaracion* : amount es un campo long el cual representa el valor en centavos.\r\n\r\n```java\r\n// ...codigo...\r\nString privateApiKey = \"92b71cf711ca41f78362a7134f87ff65\";//Private API Key habilitada para operar en ambiente Sandbox\r\nString urlSandbox = \"https://developers.decidir.com/api/v2/\";\r\n// Variables para identificar el origen de la transacción, estas mismas pueden ser enviadas vacías.\r\n// Grouper hace referencia al partner que esté consumiendo el servicio\r\nString grouper = \"\";\r\n// Developer hace referencia al desarrollador que cobra por transacción/otro\r\nString developer = \"\";\r\nint timeout = 10; // 10 segundos de timeout\r\n//Ejemplo para el ambiente Sandbox\r\nDecidir decidir = new Decidir(privateApiKey, urlSandbox, timeout, grouper, developer);\r\n\r\nCustomer customer = new Customer();\r\ncustomer.setId(\"test\"); // user_id\r\ncustomer.setEmail(\"test@payway.com\"); // user_email\r\n\r\nGDSPaymentRequestPCI gdsPaymentRequest = new GDSPaymentRequestPCI();\r\nCardData cardData = new CardData();\r\ncardData.setCard_expiration_month(\"12\");\r\ncardData.setCard_expiration_year(\"20\");\r\ncardData.setIp_address(\"192.168.1.10\"); // Customer IP, en caso de usar Cybersource se usa en el campo CSBTIPADDRESS\r\n\r\nIdentificationType type = IdentificationType.fromId(1);\r\nString number = \"23968498\";\r\n\r\nIdentification identification = new Identification();\r\nidentification.setNumber(number);\r\nidentification.setType(type);\r\ncardData.setCard_holder_identification(identification);\r\ncardData.setCard_holder_name(\"Juan\");\r\ncardData.setCard_number(\"4509790113276723\");\r\n//RetailFraudDetectionData retail =  new RetailFraudDetectionData();\r\n//RetailTPFraudDetectionData retailTP =  new RetailTPFraudDetectionData();\r\nServicesFraudDetectionData services =  new ServicesFraudDetectionData();\r\n\r\ngdsPaymentRequest.setCard_data(cardData);\r\ngdsPaymentRequest.setSite_transaction_id(\"pci001\"); //ID de transaccion asignada por el comercio, no puede repetirse\r\ngdsPaymentRequest.setCustomer(customer);\r\ngdsPaymentRequest.setPayment_method_id(1); //VISA\r\ngdsPaymentRequest.setBin(\"450979\");\r\ngdsPaymentRequest.setAmount(23250L);//Valor en centavos: $232.50\r\ngdsPaymentRequest.setCurrency(Currency.ARS);\r\ngdsPaymentRequest.setInstallments(1);\r\ngdsPaymentRequest.setPayment_type(PaymentType.SINGLE); //Tipo de pago simple\r\nList\u003cSubPayment\u003e sub_payments = new ArrayList\u003cSubPayment\u003e(); // Llenar en caso de transaccion distribuida por monto\r\ngdsPaymentRequest.setSub_payments(sub_payments); //Debe enviarse una lista vacia\r\ngdsPaymentRequest.setIata_code(\"iata1\"); // iata_code (logitud menor o igual 10)\r\ngdsPaymentRequest.setNro_location(\"22240407\"); // Id site del locator (longitud 8)\r\ntry {\r\n\tDecidirResponse\u003cPaymentResponse\u003e paymentResponse = decidir.payment(paymentRequest);\r\n\t// Procesamiento de respuesta de ejecucion de pago\r\n\t// ...codigo...\r\n} catch (PaymentException pe) {\r\n\t // Manejo de pago rechazado\r\n\t // ...codigo...\r\n} catch (DecidirException de) {\r\n\t// Manejo de excepcion  de payway\r\n\t // ...codigo...\r\n} catch (Exception e) {\r\n\t //Manejo de excepcion general\r\n\t// ...codigo...\r\n}\r\n// ...codigo...\r\n```\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\u003ca name=\"bsapci\"\u003e\u003c/a\u003e\r\n\r\n#### Transacción BSA PCI\r\nA continuaci\u0026oacute;n se muestra un ejemplo con una transacci\u0026oacute;n BSA PCI sin [Cybersource](#cybersource).\r\n\r\n*Aclaracion* : amount es un campo long el cual representa el valor en centavos.\r\n\r\n```java\r\n// ...codigo...\r\nString privateApiKey = \"92b71cf711ca41f78362a7134f87ff65\";//Private API Key habilitada para operar en ambiente Sandbox\r\nString urlSandbox = \"https://developers.decidir.com/api/v2/\";\r\n// Variables para identificar el origen de la transacción, estas mismas pueden ser enviadas vacías.\r\n// Grouper hace referencia al partner que esté consumiendo el servicio\r\nString grouper = \"\";\r\n// Developer hace referencia al desarrollador que cobra por transacción/otro\r\nString developer = \"\";\r\nint timeout = 10; // 10 segundos de timeout\r\n//Ejemplo para el ambiente Sandbox\r\nDecidir decidir = new Decidir(privateApiKey, urlSandbox, timeout, grouper, developer);\r\n\r\nCustomer customer = new Customer();\r\ncustomer.setId(\"test\"); // user_id\r\ncustomer.setEmail(\"test@payway.com\"); // user_email\r\n\r\nBSAPaymentRequestPCI bsaPaymentRequestPCI = new BSAPaymentRequestPCI();\r\n\r\n\r\nIdentificationType type = IdentificationType.fromId(1);\r\nString number = \"23968498\";\r\n\r\nIdentification identification = new Identification();\r\nidentification.setNumber(number);\r\nidentification.setType(type);\r\n\r\nbsaPaymentRequestPCI.setCard_holder_identification(identification);\r\n\r\n\r\n//RetailFraudDetectionData retail =  new RetailFraudDetectionData();\r\n//RetailTPFraudDetectionData retailTP =  new RetailTPFraudDetectionData();\r\nServicesFraudDetectionData services = new ServicesFraudDetectionData();\r\n\r\nbsaPaymentRequestPCI.setSite_transaction_id(\"bsapci015\"); //ID de transaccion asignada por el comercio, no puede repetirse\r\n\r\nbsaPaymentRequestPCI.setCustomer(customer);\r\nbsaPaymentRequestPCI.setPayment_method_id(1); //VISA\r\nbsaPaymentRequestPCI.setBin(\"450799\");\r\nbsaPaymentRequestPCI.setAmount(23250L);//Valor en centavos: $232.50\r\nbsaPaymentRequestPCI.setCurrency(Currency.ARS);\r\nbsaPaymentRequestPCI.setInstallments(1);\r\nbsaPaymentRequestPCI.setPayment_type(PaymentType.SINGLE); //Tipo de pago simple\r\nList\u003cSubPayment\u003e sub_payments = new ArrayList\u003cSubPayment\u003e(); // Llenar en caso de transaccion distribuida por monto\r\nbsaPaymentRequestPCI.setSub_payments(sub_payments); //Debe enviarse una lista vacia\r\n\r\nCardTokenBsa bsaCardData = new CardTokenBsa();\r\n\r\nbsaCardData.setPublic_token(\"4507993431624905\");\r\nbsaCardData.setIssue_date(\"20170908\");\r\n\r\nbsaCardData.setPublic_request_key(\"12345678\");\r\n\r\n\r\nbsaCardData.setVolatile_encrypted_data(\"AvqyWXV1dXXPjUl8azlldQ5HK/gny6UJU4Wo3RFkYy2W9+D0kRfEoKeIIsFWiZh84CxKXvPX+u1j4Eqysg==\");\r\nbsaCardData.setCard_holder_name(\"sarla\");\r\nbsaCardData.setFlag_pei(\"1\");\r\nbsaCardData.setFlag_security_code(\"1\");\r\nbsaCardData.setFlag_selector_key(\"1\");\r\nbsaCardData.setFlag_tokenization(\"0\");\r\n\r\nbsaPaymentRequestPCI.setCard_token_bsa(bsaCardData);\r\n\r\nbsaPaymentRequestPCI.setFraud_detection(services);\r\n\r\ntry {\r\n\tDecidirResponse\u003cPaymentResponse\u003e paymentResponse = decidir.payment(paymentRequest);\r\n\t// Procesamiento de respuesta de ejecucion de pago\r\n\t// ...codigo...\r\n} catch (PaymentException pe) {\r\n\t // Manejo de pago rechazado\r\n\t // ...codigo...\r\n} catch (DecidirException de) {\r\n\t// Manejo de excepcion  de payway\r\n\t // ...codigo...\r\n} catch (Exception e) {\r\n\t //Manejo de excepcion general\r\n\t// ...codigo...\r\n}\r\n// ...codigo...\r\n```\r\n\r\n\u003ca name=\"bsanopci\"\u003e\u003c/a\u003e\r\n\r\n#### Transacción BSA no PCI\r\n\r\nLas transacciones BSA no PCI operan de manera idéntica a las [transacciones simples](#single), para realizar una operacion por bsa no pci basta con seguir el mismo ejemplo que el visto en las transacciones simples.\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\u003ca name=\"agronopci\"\u003e\u003c/a\u003e\r\n\r\n#### Transacción Agro no PCI\r\nA continuaci\u0026oacute;n se muestra un ejemplo con una transacci\u0026oacute;n Agro simple sin [Cybersource](#cybersource).\r\n\r\n*Aclaracion* : amount es un campo long el cual representa el valor en centavos.\r\n\r\n```java\r\n// ...codigo...\r\nString privateApiKey = \"92b71cf711ca41f78362a7134f87ff65\";//Private API Key habilitada para operar en ambiente Sandbox\r\nString urlSandbox = \"https://developers.decidir.com/api/v2/\";\r\n// Variables para identificar el origen de la transacción, estas mismas pueden ser enviadas vacías.\r\n// Grouper hace referencia al partner que esté consumiendo el servicio\r\nString grouper = \"\";\r\n// Developer hace referencia al desarrollador que cobra por transacción/otro\r\nString developer = \"\";\r\nint timeout = 10; // 10 segundos de timeout\r\n//Ejemplo para el ambiente Sandbox\r\nDecidir decidir = new Decidir(privateApiKey, urlSandbox, timeout, grouper, developer);\r\n\r\nCustomer customer = new Customer();\r\ncustomer.setId(\"test\"); // user_id\r\ncustomer.setEmail(\"test@payway.com\"); // user_email\r\n\r\nAgroPaymentRequestNoPCI agroPaymentRequestNoPCI = new AgroPaymentRequestNoPCI();\r\n//RetailFraudDetectionData retail =  new RetailFraudDetectionData();\r\n//RetailTPFraudDetectionData retailTP =  new RetailTPFraudDetectionData();\r\nServicesFraudDetectionData services = new ServicesFraudDetectionData();\r\n\r\nagroPaymentRequestNoPCI.setToken(\"2f9c80b0-ebb9-4c75-b5e7-098a8c32b63a\"); // token de pago\r\nagroPaymentRequestNoPCI.setSite_transaction_id(\"agro0016\"); //ID de transaccion asignada por el comercio, no puede repetirse\r\nagroPaymentRequestNoPCI.setCustomer(customer);\r\nagroPaymentRequestNoPCI.setPayment_method_id(80); //VISA\r\nagroPaymentRequestNoPCI.setBin(\"448459\");\r\nagroPaymentRequestNoPCI.setAmount(23250L);//Valor en centavos: $232.50\r\nagroPaymentRequestNoPCI.setCurrency(Currency.ARS);\r\n//agroPaymentRequestNoPCI.setInstallments(1);\r\n\r\nInstallmentData i1 = new InstallmentData();\r\ni1.setId(1);\r\ni1.setAmount(23250L);\r\ni1.setDate(new Date());\r\nList\u003cInstallmentData\u003e l = new ArrayList\u003cInstallmentData\u003e();\r\nl.add(i1);\r\nagroPaymentRequestNoPCI.setInstallmentList(l);\r\n\r\nagroPaymentRequestNoPCI.setPayment_type(PaymentType.SINGLE); //Tipo de pago simple\r\n\r\nAgroData agroData = new AgroData();\r\nagroData.setToken(\"123456\");\r\nagroData.setToken_type(\"T\");\r\nagroData.setDays_agreement(360);\r\n\r\nagroPaymentRequestNoPCI.setAgro_data(agroData);\r\n\r\nList\u003cSubPayment\u003e sub_payments = new ArrayList\u003cSubPayment\u003e(); // Llenar en caso de transaccion distribuida por monto\r\nagroPaymentRequestNoPCI.setSub_payments(sub_payments); //Debe enviarse una lista vacia\r\n\r\ntry {\r\n    DecidirResponse\u003cAgroPaymentResponse\u003e paymentResponse = decidir.payment(agroPaymentRequestNoPCI);\r\n    System.out.println(paymentResponse.getMessage());\r\n    System.out.println(\"aaa\");\r\n} catch (PaymentException pe) {\r\n    // Manejo de pago rechazado\r\n    // ...codigo...\r\n} catch (DecidirException de) {\r\n    // Manejo de excepcion  de payway\r\n    // ...codigo...\r\n} catch (Exception e) {\r\n    //Manejo de excepcion general\r\n    // ...codigo...\r\n}\r\n// ...codigo...\r\n```\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\r\n\u003ca name=\"distributed\"\u003e\u003c/a\u003e\r\n\r\n#### Transacción distribuida\r\nExisten transacciones distribuidas definidas por monto o por porcentaje. Para indicar los sitios a distribuir, se debe enviar en el campo `sub_payments` cada uno de ellos. En el caso de transacci\u0026oacute;n por monto se indicar\u0026acute;: **Id del sitio receptor, monto a distribuir y la cantidad de cuotas**. Si se distribuye por porcentaje no se debe enviar informacion en `sub_payments` .\r\n\r\nA continuaci\u0026oacute;n se muestra un ejemplo con una transacci\u0026oacute;n distribuida por monto sin [Cybersource](#cybersource).\r\n*Aclaracion* : amount es un campo long el cual representa el valor en centavos.\r\n\r\n*Nota Técnica*: A diferencia de las Transacciones Simples, para las Transacciones Distribuidas, el parámetro payment_type debe ser \u003ccode\u003ePaymentType.DISTRIBUTED\u003c/code\u003e; y el parámetro sub_payments \r\nse debe popular con los sub-sitios y los montos distribuidos de manera dinámica.\r\n\r\n* En Transacciones distribuidas por Monto, la sumatoria de los montos distribuidos debe ser exactamente igual al monto total de la operación Padre.\r\n* En Transacciones distribuidas por Porcentaje, el parámetro sub_payments no debe completarse, pues la distribución es estática \r\ny se configura en el SAC.\r\n\r\n```java\r\n// ...codigo...\r\nString privateApiKey = \"92b71cf711ca41f78362a7134f87ff65\";//Private API Key habilitada para operar en ambiente Sandbox\r\nString urlSandbox = \"https://developers.decidir.com/api/v2/\";\r\n// Variables para identificar el origen de la transacción, estas mismas pueden ser enviadas vacías.\r\n// Grouper hace referencia al partner que esté consumiendo el servicio\r\nString grouper = \"\";\r\n// Developer hace referencia al desarrollador que cobra por transacción/otro\r\nString developer = \"\";\r\nint timeout = 10; // 10 segundos de timeout\r\n//Ejemplo para el ambiente Sandbox\r\nDecidir decidir = new Decidir(privateApiKey, urlSandbox, timeout, grouper, developer);\r\nCustomer customer = new Customer();\r\ncustomer.setId(\"test\"); // user_id\r\ncustomer.setEmail(\"test@payway.com\"); // user_email\r\n\r\nInteger installments = 2;\r\nLong amount1 = 10000L;\r\nLong amount2 = 25990L;\r\nPaymentRequest paymentRequest = new PaymentRequest();\r\npaymentRequest.setToken(\"a6f05789-10df-4464-a318-887a1520204b\"); // token de pago\r\npaymentRequest.setSite_transaction_id(\"TX0000000001\"); //ID de transaccion asignada por el comercio, no puede repetirse\r\npaymentRequest.setCustomer(customer);\r\npaymentRequest.setPayment_method_id(1); //VISA\r\npaymentRequest.setBin(\"450979\");\r\npaymentRequest.setAmount(amount1 + amount2);//Suma de los pagos distribuidos\r\npaymentRequest.setCurrency(Currency.ARS);\r\npaymentRequest.setInstallments(installments); //Cantidad de cuotas\r\n\r\npaymentRequest.setPayment_type(PaymentType.DISTRIBUTED); //Indica transaccion distribuida\r\nList\u003cSubPayment\u003e subPayments = new ArrayList\u003cSubPayment\u003e(); // Llenar en caso de transaccion distribuida por monto\r\nSubPayment subPayment1 = new SubPayment(); //Sitio receptor 1 (solo en caso de distribuida por monto)\r\nsubPayment1.setSite_id(\"00111115\"); //Sitio receptor 1 (solo en caso de distribuida por monto)\r\nsubPayment1.setAmount(amount1); //Monto a recibir (solo en caso de distribuida por monto)\r\nsubPayment1.setInstallments(installments); //Cantidad de cuotas (solo en caso de distribuida por monto)\r\nSubPayment subPayment2 = new SubPayment(); //Sitio receptor 2 (solo en caso de distribuida por monto)\r\nsubPayment2.setSite_id(\"00111116\"); //Sitio receptor 2 (solo en caso de distribuida por monto)\r\nsubPayment2.setAmount(amount2); //Monto a recibir (solo en caso de distribuida por monto)\r\nsubPayment2.setInstallments(installments); //Cantidad de cuotas (solo en caso de distribuida por monto)\r\n\r\nsubPayments.add(subPayment1);\r\nsubPayments.add(subPayment2);\r\npaymentRequest.setSub_payments(subPayments); //Se agregan los datos de distribuida\r\n\r\ntry {\r\n\tDecidirResponse\u003cPaymentResponse\u003e paymentResponse = decidir.payment(paymentRequest);\r\n\t// Procesamiento de respuesta de ejecucion de pago\r\n\t// ...codigo...\r\n} catch (PaymentException pe) {\r\n\t // Manejo de pago rechazado\r\n\t // ...codigo...\r\n} catch (DecidirException de) {\r\n\t// Manejo de excepcion  de payway\r\n\t // ...codigo...\r\n} catch (Exception e) {\r\n\t //Manejo de excepcion general\r\n\t// ...codigo...\r\n}\r\n// ...codigo...\r\n```\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\u003ca name=\"twosteps\"\u003e\u003c/a\u003e\r\n\r\n#### Operación en dos pasos\r\nUna vez generado y almacenado el token de pago, se deberá ejecutar la solicitud de pago más el token previamente generado.\r\nSi el pago es preaprobado `Status.PRE_APPROVED`, se procederá a realizar la confirmaci\u0026oacute;n del pago enviando **ID de pago, monto y usario aprobador**.\r\nA continuaci\u0026oacute;n se muestra un ejemplo con una transacci\u0026oacute;n simple sin Cybersource.\r\n\r\n```java\r\n// ...codigo...\r\nString privateApiKey = \"92b71cf711ca41f78362a7134f87ff65\";//Private API Key habilitada para operar en ambiente Sandbox\r\nString urlSandbox = \"https://developers.decidir.com/api/v2/\";\r\n// Variables para identificar el origen de la transacción, estas mismas pueden ser enviadas vacías.\r\n// Grouper hace referencia al partner que esté consumiendo el servicio\r\nString grouper = \"\";\r\n// Developer hace referencia al desarrollador que cobra por transacción/otro\r\nString developer = \"\";\r\nint timeout = 10; // 10 segundos de timeout\r\n//Ejemplo para el ambiente Sandbox\r\nDecidir decidir = new Decidir(privateApiKey, urlSandbox, timeout, grouper, developer);\r\n\r\nString privateApiKey = \"00111115\";//Private API Key habilitada para operar en ambiente Sandbox\r\nString urlSandbox = \"http://localhost:9002/\";\r\nint timeout = 10; // 10 segundos de timeout\r\n//Ejemplo para el ambiente Sandbox\r\nDecidir decidir = new Decidir(privateApiKey, urlSandbox, timeout);\r\nCustomer customer = new Customer();\r\ncustomer.setId(\"test\"); // user_id\r\ncustomer.setEmail(\"test@payway.com\"); // user_email\r\n\r\nPaymentRequest paymentRequest = new PaymentRequest();\r\npaymentRequest.setToken(\"a6f05789-10df-4464-a318-887a1520204b\"); // token de pago\r\npaymentRequest.setSite_transaction_id(\"TX0000000001\"); //ID de transaccion asignada por el comercio, no puede repetirse\r\npaymentRequest.setCustomer(customer);\r\npaymentRequest.setPayment_method_id(1); //VISA\r\npaymentRequest.setBin(\"450979\");\r\npaymentRequest.setAmount(23250L);//Valor en centavos: $232.50\r\npaymentRequest.setCurrency(Currency.ARS);\r\npaymentRequest.setInstallments(1);\r\npaymentRequest.setPayment_type(PaymentType.SINGLE);\r\nList\u003cSubPayment\u003e sub_payments = new ArrayList\u003cSubPayment\u003e(); //Nunca se utiliza en 2 pasos (se envia vacio)\r\npaymentRequest.setSub_payments(sub_payments);\r\n\r\ntry {\r\n   DecidirResponse\u003cPaymentResponse\u003e paymentResponse = decidir.payment(paymentRequest);\r\n\r\n   PaymentResponse paymentResult = paymentResponse.getResult();\r\n   // Confirmar pago preaprobado\r\n   if (Status.PRE_APPROVED.equals(paymentResult.getStatus())) {\r\n       Long paymentId = paymentResult.getId(); //Obtener id de pago\r\n       DecidirResponse\u003cPaymentResponse\u003e confirmPayment = decidir.confirmPayment(paymentId, paymentRequest.getAmount(), \"usuario_aprobador\");\r\n       paymentResult = confirmPayment.getResult();\r\n   }\r\n   // Procesamiento de respuesta de ejecucion de pago\r\n   // ...codigo...\r\n} catch (PaymentException pe) {\r\n   // Manejo de pago rechazado\r\n   // ...codigo...\r\n} catch (DecidirException de) {\r\n   // Manejo de excepcion  de payway\r\n   // ...codigo...\r\n} catch (Exception e) {\r\n   //Manejo de excepcion general\r\n   // ...codigo...\r\n}\r\n // ...codigo...\r\n```\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\u003ca name=\"payment-simple-3ds\"\u003e\u003c/a\u003e\r\n\r\n### Ejecución de pago simple con 3ds\r\nEn este caso se necesita agregar el flag \"cardholder_auth_required\" en true y se le debe pasar el objeto \"auth_3ds_data\". \r\n\r\n```java\r\n// ...codigo...\r\nString privateApiKey = \"92b71cf711ca41f78362a7134f87ff65\";//Private API Key habilitada para operar en ambiente Sandbox\r\nString urlSandbox = \"https://developers.decidir.com/api/v2/\";\r\n// Variables para identificar el origen de la transacción, estas mismas pueden ser enviadas vacías.\r\n// Grouper hace referencia al partner que esté consumiendo el servicio\r\nString grouper = \"\";\r\n// Developer hace referencia al desarrollador que cobra por transacción/otro\r\nString developer = \"\";\r\nint timeout = 10; // 10 segundos de timeout\r\n//Ejemplo para el ambiente Sandbox\r\nDecidir decidir = new Decidir(privateApiKey, urlSandbox, timeout, grouper, developer);\r\n\r\nint timeout = 10; // 10 segundos de timeout\r\n//Ejemplo para el ambiente Sandbox\r\n\r\nPaymentRequest paymentRequest = new PaymentRequest();\r\npaymentRequest.setToken(\"a6f05789-10df-4464-a318-887a1520204b\"); // token de pago\r\npaymentRequest.setSite_transaction_id(\"TX0000000001\"); //ID de transaccion asignada por el comercio, no puede repetirse\r\npaymentRequest.setCustomer(customer);\r\npaymentRequest.setPayment_method_id(1); //VISA\r\npaymentRequest.setBin(\"450979\");\r\npaymentRequest.setAmount(23250L);//Valor en centavos: $232.50\r\npaymentRequest.setCurrency(Currency.ARS);\r\npaymentRequest.setInstallments(1);\r\npaymentRequest.setPayment_type(PaymentType.SINGLE);\r\npaymentRequest.setCardHolderAuthRequired(true);\r\n\r\nAuth3dsData auth3dsData = new Auth3dsData();\r\nauth3dsData.setAccept_header(\"application/json\");\r\nauth3dsData.setColor_depth(\"32\");\r\nauth3dsData.setDevice_type(\"BROWSER\");\r\nauth3dsData.setIp(\"1.12.123.255\");\r\nauth3dsData.setJava_enabled(true);\r\nauth3dsData.setLenguage(\"es\");\r\nauth3dsData.setScreen_height(28);\r\nauth3dsData.setScreen_width(4);\r\nauth3dsData.setTime_zone_offset(570);\r\nauth3dsData.setUser_agent(\"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0)Gecko/20100101\");\r\n\r\npaymentRequest.setAuth_3ds_data(auth3dsData);\r\n\r\ntry {\r\n    DecidirResponse\u003cPaymentAuth3dsResponse\u003e paymentResponse = decidir.paymentThreeds(paymentRequest);\r\n\r\n   PaymentAuth3dsResponse paymentResult = paymentResponse.getResult();\r\n   // Procesamiento de respuesta de ejecucion de pago\r\n   // ...codigo...\r\n} catch (PaymentException | PaymentAuth3dsResponseException pe) {\r\n   // Manejo de pago rechazado\r\n   // ...codigo...\r\n} catch (DecidirException de) {\r\n   // Manejo de excepcion  de payway\r\n   // ...codigo...\r\n} catch (Exception e) {\r\n   //Manejo de excepcion general\r\n   // ...codigo...\r\n}\r\n // ...codigo...\r\n```\r\n\r\n\u003ca name=\"payment-challenge-3ds\"\u003e\u003c/a\u003e\r\n\r\n### Ejecución de pago con challenge de 3ds\r\nEjemplo de resolucion al ejecutar el pago que nos devuelve el resultado con el estado CHALLENGE_PENDING o FINGERPRINT_PENDING, \r\n\r\n```java\r\n// ...codigo...\r\nString privateApiKey = \"92b71cf711ca41f78362a7134f87ff65\";//Private API Key habilitada para operar en ambiente Sandbox\r\nString urlSandbox = \"https://developers.decidir.com/api/v2/\";\r\n// Variables para identificar el origen de la transacción, estas mismas pueden ser enviadas vacías.\r\n// Grouper hace referencia al partner que esté consumiendo el servicio\r\nString grouper = \"\";\r\n// Developer hace referencia al desarrollador que cobra por transacción/otro\r\nString developer = \"\";\r\nint timeout = 10; // 10 segundos de timeout\r\n//Ejemplo para el ambiente Sandbox\r\nDecidir decidir = new Decidir(privateApiKey, urlSandbox, timeout, grouper, developer);\r\nString xConsumerUsername = \"x-consumer-username\";\r\n\r\nint timeout = 10; // 10 segundos de timeout\r\n//Ejemplo para el ambiente Sandbox\r\n\r\nInstruction3dsData instruction3dsData = new Instruction3dsData();\r\ninstruction3dsData.setId(\"id\");\r\ninstruction3dsData.setInstruction_value(\"instruction_value\");\r\n\r\ntry {\r\n    DecidirResponse\u003cPaymentAuth3dsResponse\u003e paymentResponse = decidir.instructionThreeDS(xConsumerUsername, instruction3dsData);\r\n\r\n   PaymentAuth3dsResponse paymentResult = paymentResponse.getResult();\r\n   // Procesamiento de respuesta de ejecucion de pago\r\n   // ...codigo...\r\n} catch (PaymentException | PaymentAuth3dsResponseException pe) {\r\n   // Manejo de pago rechazado\r\n   // ...codigo...\r\n} catch (DecidirException de) {\r\n   // Manejo de excepcion  de payway\r\n   // ...codigo...\r\n} catch (Exception e) {\r\n   //Manejo de excepcion general\r\n   // ...codigo...\r\n}\r\n // ...codigo...\r\n```\r\n\r\n\u003ca name=\"getallpayments\"\u003e\u003c/a\u003e\r\n\r\n### Listado de Pagos\r\n\r\nMediante este recurso, se genera una solicitud de listado de pagos.\r\nEste recurso admite la posibilidad de agregar filtros adicionales\r\n\r\n```java\r\n// ...codigo...\r\nString privateApiKey = \"92b71cf711ca41f78362a7134f87ff65\";//Private API Key habilitada para operar en ambiente Sandbox\r\nString urlSandbox = \"https://developers.decidir.com/api/v2/\";\r\n// Variables para identificar el origen de la transacción, estas mismas pueden ser enviadas vacías.\r\n// Grouper hace referencia al partner que esté consumiendo el servicio\r\nString grouper = \"\";\r\n// Developer hace referencia al desarrollador que cobra por transacción/otro\r\nString developer = \"\";\r\nint timeout = 10; // 10 segundos de timeout\r\n//Ejemplo para el ambiente Sandbox\r\nDecidir decidir = new Decidir(privateApiKey, urlSandbox, timeout, grouper, developer);\r\n\r\nInteger offset = 20;//OPCIONAL, desplazamiento en los resultados devueltos. Valor por defecto = 0.\r\nInteger pageSize = 10; //OPCIONAL, cantidad máxima de resultados retornados. Valor por defecto = 50.\r\nString siteOperationId = null; //OPCIONAL, ID único de la transacción a nivel comercio (equivalente al site_transaction_id).\r\nString sitetId = null;//OPCIONAl, ID Site del comercio.\r\n\r\ntry {\r\n\tDecidirResponse\u003cPage\u003e pagos = decidir.getPayments(offset, pageSize, siteOperationId, siteId);\r\n\t// Procesamiento de respuesta de listado de pagos\r\n\t// ...codigo...\r\n} catch (DecidirException de) {\r\n\t// Manejo de excepcion  de payway\r\n\t // ...codigo...\r\n} catch (Exception e) {\r\n\t //Manejo de excepcion general\r\n\t// ...codigo...\r\n}\r\n// ...codigo...\r\n```\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\u003ca name=\"getpaymentinfo\"\u003e\u003c/a\u003e\r\n\r\n### Información de un Pago\r\n\r\nMediante este recurso, se genera una solicitud de información de un pago previamente realizado, pasando como parámetro el id del pago.\r\n\r\n```java\r\n// ...codigo...\r\nString privateApiKey = \"92b71cf711ca41f78362a7134f87ff65\";//Private API Key habilitada para operar en ambiente Sandbox\r\nString urlSandbox = \"https://developers.decidir.com/api/v2/\";\r\n// Variables para identificar el origen de la transacción, estas mismas pueden ser enviadas vacías.\r\n// Grouper hace referencia al partner que esté consumiendo el servicio\r\nString grouper = \"\";\r\n// Developer hace referencia al desarrollador que cobra por transacción/otro\r\nString developer = \"\";\r\nint timeout = 10; // 10 segundos de timeout\r\n//Ejemplo para el ambiente Sandbox\r\nDecidir decidir = new Decidir(privateApiKey, urlSandbox, timeout, grouper, developer);\r\n\r\nlong idPago = 000123L; //ID devuelto por la operacion de pago (NO CONFUNDIR con site_transaction_id asignado por el comercio)\r\ntry {\r\n\tDecidirResponse\u003cPaymentResponse\u003e pago = decidir.getPayment(idPago);\r\n\t// Procesamiento de respuesta de consulta de pago\r\n\t// ...codigo...\r\n} catch (DecidirException de) {\r\n\t// Manejo de excepcion  de payway\r\n\t // ...codigo...\r\n} catch (Exception e) {\r\n\t //Manejo de excepcion general\r\n\t// ...codigo...\r\n}\r\n// ...codigo...\r\n```\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\u003ca name=\"refunds\"\u003e\u003c/a\u003e\r\n### Devoluciones de pagos\r\n\r\nA continuaci\u0026oacute;n se describen las diferentes operatorias para realizar anulaciones y devoluciones de pagos\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\r\n\u003ca name=\"totalrefund\"\u003e\u003c/a\u003e\r\n\r\n#### Anulación / Devolución Total de Pago\r\n\r\nMediante este recurso, se genera una solicitud de anulación / devolución total de un pago puntual, pasando como parámetro el id del pago y el usuario del cliente.\r\n\r\n```java\r\n// ...codigo...\r\nString privateApiKey = \"92b71cf711ca41f78362a7134f87ff65\";//Private API Key habilitada para operar en ambiente Sandbox\r\nString urlSandbox = \"https://developers.decidir.com/api/v2/\";\r\n// Variables para identificar el origen de la transacción, estas mismas pueden ser enviadas vacías.\r\n// Grouper hace referencia al partner que esté consumiendo el servicio\r\nString grouper = \"\";\r\n// Developer hace referencia al desarrollador que cobra por transacción/otro\r\nString developer = \"\";\r\nint timeout = 10; // 10 segundos de timeout\r\n//Ejemplo para el ambiente Sandbox\r\nDecidir decidir = new Decidir(privateApiKey, urlSandbox, timeout, grouper, developer);\r\nlong idPago = 000123L; //ID devuelto por la operacion de pago (NO CONFUNDIR con site_transaction_id asignado por el comercio)\r\nString usuario = \"usuario_que_realiza_la_accion\"; //OPCIONAL NULLABLE, Usuario habilitado para realizar la anulacion/devolucion. Se utiliza para matener un registro de quien realiza la operacion\r\nRefundPayment refundPayment = new RefundPayment(); //Se instancia sin datos\r\ntry {\r\n\tDecidirResponse\u003cRefundPaymentResponse\u003e devolucion = decidir.refundPayment(idPago, refundPayment, usuario);\r\n\t// Procesamiento de respuesta de la devolucion de pago\r\n\t// ...codigo...\r\n} catch (ValidateStatusException vse) {\r\n    // Manejo de excepcion en devolucion\r\n    String status = vse.getErrorDetail().getValidation_errors().getStatus();\r\n    vse.printStackTrace();\t\r\n} catch (RefundException re) {\r\n    // Manejo de excepcion en devolucion\r\n    re.printStackTrace();\r\n} catch (DecidirException de) {\r\n\t// Manejo de excepcion  de Payway\r\n\t// ...codigo...\r\n} catch (Exception e) {\r\n\t//Manejo de excepcion general\r\n\t// ...codigo...\r\n}\r\n// ...codigo...\r\n```\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\u003ca name=\"deleterefund\"\u003e\u003c/a\u003e\r\n\r\n#### Anulación de Devolución Total\r\n\r\nMediante este recurso, se genera una solicitud de anulación de devolución total de un pago puntual, pasando como parámetro el id del pago, el id de la devolución y el usuario del cliente.\r\n```java\r\n// ...codigo...\r\nString privateApiKey = \"92b71cf711ca41f78362a7134f87ff65\";//Private API Key habilitada para operar en ambiente Sandbox\r\nString urlSandbox = \"https://developers.decidir.com/api/v2/\";\r\n// Variables para identificar el origen de la transacción, estas mismas pueden ser enviadas vacías.\r\n// Grouper hace referencia al partner que esté consumiendo el servicio\r\nString grouper = \"\";\r\n// Developer hace referencia al desarrollador que cobra por transacción/otro\r\nString developer = \"\";\r\nint timeout = 10; // 10 segundos de timeout\r\n//Ejemplo para el ambiente Sandbox\r\nDecidir decidir = new Decidir(privateApiKey, urlSandbox, timeout, grouper, developer);\r\nlong idPago = 000123L;//ID devuelto por la operacion de pago (NO CONFUNDIR con site_transaction_id asignado por el comercio)\r\nlong idDevolucion = 00012L;//ID devuelto por la operacion de devolucion\r\nString usuario = \"usuario_que_realiza_la_accion\"; //OPCIONAL NULLABLE, Usuario habilitado para realizar la anulacion/devolucion. Se utiliza para matener un registro de quien realiza la operacion\r\n\r\ntry {\r\n\tDecidirResponse\u003cAnnulRefundResponse\u003e anulacion = decidir. cancelRefund(idPago, idDevolucion, usuario)\r\n\t// Procesamiento de respuesta de anulacion de devolucion\r\n\t// ...codigo...\r\n} catch (AnnulRefundException are) {\r\n    are.printStackTrace();\r\n    // Manejo de excepcion de anulacion de devolucion\r\n    // ...codigo...\r\n} catch (ValidateStatusException vse) {\r\n    // Manejo de excepcion en devolucion\r\n    String status = vse.getErrorDetail().getValidation_errors().getStatus();\r\n    vse.printStackTrace();\t\r\n} catch (DecidirException de) {\r\n\t// Manejo de excepcion  de Payway\r\n\t // ...codigo...\r\n} catch (Exception e) {\r\n\t //Manejo de excepcion general\r\n\t// ...codigo...\r\n}\r\n// ...codigo...\r\n```\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\u003ca name=\"partialrefund\"\u003e\u003c/a\u003e\r\n\r\n#### Devolución Parcial de un Pago\r\n\r\nMediante este recurso, se genera una solicitud de devolución parcial de un pago puntual, pasando como parámetro el id del pago, el monto de la devolución y el usuario del cliente.\r\n\r\n```java\r\n// ...codigo...\r\nString privateApiKey = \"92b71cf711ca41f78362a7134f87ff65\";//Private API Key habilitada para operar en ambiente Sandbox\r\nString urlSandbox = \"https://developers.decidir.com/api/v2/\";\r\n// Variables para identificar el origen de la transacción, estas mismas pueden ser enviadas vacías.\r\n// Grouper hace referencia al partner que esté consumiendo el servicio\r\nString grouper = \"\";\r\n// Developer hace referencia al desarrollador que cobra por transacción/otro\r\nString developer = \"\";\r\nint timeout = 10; // 10 segundos de timeout\r\n//Ejemplo para el ambiente Sandbox\r\nDecidir decidir = new Decidir(privateApiKey, urlSandbox, timeout, grouper, developer);\r\nlong idPago = 000123L; //ID devuelto por la operacion de pago (NO CONFUNDIR con site_transaction_id asignado por el comercio)\r\nString usuario = \"usuario_que_realiza_la_accion\"; //OPCIONAL NULLABLE, Usuario habilitado para realizar la anulacion/devolucion. Se utiliza para matener un registro de quien realiza la operacion\r\nlong  montoDevolucion = 1250L // Expresado en centavos\r\n\r\nRefundPayment refundPayment = new RefundPayment();\r\nrefundPayment.setAmount(montoDevolucion);\r\nrefundPayment.setSub_payments(new ArrayList\u003cRefundSubPayment\u003e());//Llenar en caso de solicitar devolucion parcial en transaccion distribuida\r\ntry {\r\n\tDecidirResponse\u003cRefundPaymentResponse\u003e devolucion = decidir.refundPayment(idPago, refundPayment, usuario)\r\n\t// Procesamiento de respuesta de la devolucion de pago\r\n\t// ...codigo...\r\n} catch (RefundException re) {\r\n    // Manejo de excepcion en devolucion\r\n    re.printStackTrace();\r\n} catch (ValidateStatusException vse) {\r\n    // Manejo de excepcion en devolucion\r\n    String status = vse.getErrorDetail().getValidation_errors().getStatus();\r\n    vse.printStackTrace();\t\r\n} catch (DecidirException de) {\r\n\t// Manejo de excepcion  de Payway\r\n\t // ...codigo...\r\n} catch (Exception e) {\r\n\t //Manejo de excepcion general\r\n\t// ...codigo...\r\n}\r\n// ...codigo...\r\n```\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\u003ca name=\"deletepartialrefund\"\u003e\u003c/a\u003e\r\n\r\n#### Anulación de Devolución Parcial\r\n\r\nMediante este recurso, se genera una solicitud de anulación de devolución parcial de un pago puntual, pasando como parámetro el id del pago, el id de la devolución  el usuario del cliente.\r\n```java\r\n// ...codigo...\r\nString privateApiKey = \"92b71cf711ca41f78362a7134f87ff65\";//Private API Key habilitada para operar en ambiente Sandbox\r\nString urlSandbox = \"https://developers.decidir.com/api/v2/\";\r\n// Variables para identificar el origen de la transacción, estas mismas pueden ser enviadas vacías.\r\n// Grouper hace referencia al partner que esté consumiendo el servicio\r\nString grouper = \"\";\r\n// Developer hace referencia al desarrollador que cobra por transacción/otro\r\nString developer = \"\";\r\nint timeout = 10; // 10 segundos de timeout\r\n//Ejemplo para el ambiente Sandbox\r\nDecidir decidir = new Decidir(privateApiKey, urlSandbox, timeout, grouper, developer);\r\nlong idPago = 000123L;//ID devuelto por la operacion de pago (NO CONFUNDIR con site_transaction_id asignado por el comercio)\r\nlong idDevolucion = 00012L;//ID devuelto por la operacion de devolucion\r\nString usuario = \"usuario_que_realiza_la_accion\"; //OPCIONAL NULLABLE, Usuario habilitado para realizar la anulacion/devolucion. Se utiliza para matener un registro de quien realiza la operacion\r\ntry {\r\n\tDecidirResponse\u003cAnnulRefundResponse\u003e anulacion = decidir.cancelRefund(idPago, idDevolucion, usuario)\r\n\t// Procesamiento de respuesta de anulacion de devolucion\r\n\t// ...codigo...\r\n} catch (AnnulRefundException are) {\r\n    are.printStackTrace();\r\n    // Manejo de excepcion de anulacion de devolucion\r\n    // ...codigo...\r\n} catch (ValidateStatusException vse) {\r\n    // Manejo de excepcion en devolucion\r\n    String status = vse.getErrorDetail().getValidation_errors().getStatus();\r\n    vse.printStackTrace();\t\r\n} catch (DecidirException de) {\r\n\t// Manejo de excepcion  de Payway\r\n\t // ...codigo...\r\n} catch (Exception e) {\r\n\t //Manejo de excepcion general\r\n\t// ...codigo...\r\n}\r\n// ...codigo...\r\n```\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\u003ca name=\"tokenizaciontarjeta\"\u003e\u003c/a\u003e\r\n\r\n## Tokenización de tarjetas de crédito\r\n\r\nEsta funcionalidad permite que luego de realizar una compra con una tarjeta, se genere un token alfanumerico unico en el backend de Payway, esto permite que a la hora de comprar nuevamente con esta tarjeta solo requerira el codigo de seguridad.\r\nComo primer paso se debe realizar una un pago normal, el token generado estara en el campo \"token\" de la respuesta.\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\u003ca name=\"listadotarjetastokenizadas\"\u003e\u003c/a\u003e\r\n\r\n### Listado de tarjetas tokenizadas\r\n\r\nEste método permite conocer el listado de tarjetas tokenizadas que posee un usuario determinado. Para esto es necesario el nombre de usuario a la instancia de token.\r\nEste recurso admite la posibilidad de agregar filtros adicionales.\r\n\r\n\r\n```java\r\n// ...codigo...\r\nString privateApiKey = \"92b71cf711ca41f78362a7134f87ff65\";//Private API Key habilitada para operar en ambiente Sandbox\r\nString urlSandbox = \"https://developers.decidir.com/api/v2/\";\r\n// Variables para identificar el origen de la transacción, estas mismas pueden ser enviadas vacías.\r\n// Grouper hace referencia al partner que esté consumiendo el servicio\r\nString grouper = \"\";\r\n// Developer hace referencia al desarrollador que cobra por transacción/otro\r\nString developer = \"\";\r\nint timeout = 10; // 10 segundos de timeout\r\n//Ejemplo para el ambiente Sandbox\r\nDecidir decidir = new Decidir(privateApiKey, urlSandbox, timeout, grouper, developer);\r\n\r\nString usuario = \"usuario_cliente\"; // Usuario para el cual se consultan las tarjetas tokenizadas\r\nString bin = \"450799\"; //OPCIONAL, bin de la tarjeta.\r\nString ultimosCuatroDigitos = null; //OPCIONAL, ultimos 4 digitos de la tarjeta.\r\nString mesVencimiento = null; //OPCIONAL, mes de vencimiento de la tarjeta.\r\nString anioVencimiento = \"18\"; //OPCIONAL, año de vencimiento de la tarjeta.\r\n\r\ntry {\r\n\tDecidirResponse\u003cCardTokens\u003e tarjetasTokenizadas = decidir.getCardTokens(usuario, bin, ultimosCuatroDigitos, mesVencimiento, anioVencimiento);\r\n\t// Procesamiento de respuesta de listado de tarjetas tokenizadas\r\n\t// ...codigo...\r\n} catch (DecidirException de) {\r\n\t// Manejo de excepcion  de Payway\r\n\t // ...codigo...\r\n} catch (Exception e) {\r\n\t //Manejo de excepcion general\r\n\t// ...codigo...\r\n}\r\n// ...codigo...\r\n```\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\u003ca name=\"pagotokenizado\"\u003e\u003c/a\u003e\r\n\r\n### Ejecución de pago tokenizado\r\n\r\nUna vez que se obtiene el token a partir de la tarjeta tokenizada, se deberá ejecutar la solicitud de pago. Además del token de pago y los parámetros propios de la transacción, el comercio deberá identificar la compra con el \"site_transaction_id\" y \"user_id\"(id \r\ndel Customer).\r\n\r\n*Aclaracion* : amount es un campo long el cual representa el valor en centavos.\r\n\r\n```java\r\n// ...codigo...\r\nString privateApiKey = \"92b71cf711ca41f78362a7134f87ff65\";//Private API Key habilitada para operar en ambiente Sandbox\r\nString urlSandbox = \"https://developers.decidir.com/api/v2/\";\r\n// Variables para identificar el origen de la transacción, estas mismas pueden ser enviadas vacías.\r\n// Grouper hace referencia al partner que esté consumiendo el servicio\r\nString grouper = \"\";\r\n// Developer hace referencia al desarrollador que cobra por transacción/otro\r\nString developer = \"\";\r\nint timeout = 10; // 10 segundos de timeout\r\n//Ejemplo para el ambiente Sandbox\r\nDecidir decidir = new Decidir(privateApiKey, urlSandbox, timeout, grouper, developer);\r\nCustomer customer = new Customer();\r\ncustomer.setId(\"test\"); // user_id\r\ncustomer.setEmail(\"test@payway.com\"); // user_email\r\n\r\nPaymentRequest paymentRequest = new PaymentRequest();\r\npaymentRequest.setToken(\"ae9fc3e5-ff41-4de2-9c91-81030be1c4a6\"); // token de pago\r\npaymentRequest.setSite_transaction_id(\"0001234\");\r\npaymentRequest.setCustomer(customer);\r\npaymentRequest.setPayment_method_id(1); //MASTERCARD\r\npaymentRequest.setBin(\"45079\");\r\npaymentRequest.setAmount(23250L);//Valor en centavos: $232.50\r\npaymentRequest.setCurrency(Currency.ARS);\r\npaymentRequest.setInstallments(1);\r\npaymentRequest.setPayment_type(PaymentType.SINGLE);\r\nList\u003cSubPayment\u003e sub_payments = new ArrayList\u003cSubPayment\u003e() // Llenar en caso de transaccion distribuida\r\npaymentRequest.setSub_payments(sub_payments);\r\n\r\ntry {\r\n\tDecidirResponse\u003cPaymentResponse\u003e paymentResponse = decidir.payment(paymentRequest);\r\n\t// Procesamiento de respuesta de ejecucion de pago\r\n\t// ...codigo...\r\n} catch (PaymentException pe) {\r\n\t // Manejo de pago rechazado\r\n\t // ...codigo...\r\n} catch (DecidirException de) {\r\n\t// Manejo de excepcion  de Payway\r\n\t // ...codigo...\r\n} catch (Exception e) {\r\n\t //Manejo de excepcion general\r\n\t// ...codigo...\r\n}\r\n// ...codigo...\r\n```\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\u003ca name=\"eliminartarjetatokenizada\"\u003e\u003c/a\u003e\r\n\r\n### Eliminación de tarjeta tokenizada\r\n\r\nEl servicio da la posibilidad de eliminar un token de tarjeta generadas, esto se logra instanciando token y utilizando el método DeleteCardToken(token). Funciona enviando la tarjeta tokenizada.\r\n\r\n```java\r\n// ...codigo...\r\nString privateApiKey = \"92b71cf711ca41f78362a7134f87ff65\";//Private API Key habilitada para operar en ambiente Sandbox\r\nString urlSandbox = \"https://developers.decidir.com/api/v2/\";\r\n// Variables para identificar el origen de la transacción, estas mismas pueden ser enviadas vacías.\r\n// Grouper hace referencia al partner que esté consumiendo el servicio\r\nString grouper = \"\";\r\n// Developer hace referencia al desarrollador que cobra por transacción/otro\r\nString developer = \"\";\r\nint timeout = 10; // 10 segundos de timeout\r\n//Ejemplo para el ambiente Sandbox\r\nDecidir decidir = new Decidir(privateApiKey, urlSandbox, timeout, grouper, developer);\r\ntry {\r\n\tDecidirResponse\u003cVoid\u003e respuesta = decidir.deleteCardToken(\"ae9fc3e5-ff41-4de2-9c91-81030be1c4a6\");\r\n\t// Procesamiento de respuesta de eliminacion de tarjeta tokenizada\r\n\t// ...codigo...\r\n} catch (DecidirException de) {\r\n\t// Manejo de excepcion  de Payway\r\n\t // ...codigo...\r\n} catch (Exception e) {\r\n\t //Manejo de excepcion general\r\n\t// ...codigo...\r\n}\r\n// ...codigo...\r\n```\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\u003ca name=\"cybersource\"\u003e\u003c/a\u003e\r\n\r\n\u003ca name=\"tokenizacioninterna\"\u003e\u003c/a\u003e\r\n## Tokenización Interna\r\n\r\nEsta funcionalidad permite que luego de realizar una compra con una tarjeta, se genere un token alfanumerico unico en el backend de Payway, esto permite que a la hora de comprar nuevamente con esta tarjeta solo requerira el codigo de seguridad.\r\nComo primer paso se debe realizar una un pago normal, el token generado estara en el campo \"token\" de la respuesta.\r\n\r\n\u003ca name=\"tokenizacioninternaobtenertoken\"\u003e\u003c/a\u003e\r\n### Obtener el Token\r\n\r\nPermite obtener el token.\r\n\r\n```java\r\nString apikey = \"YKcWXjI2aoSnp60urwLd6TbLYNuybcWC\";\r\nCardDataRequestModel cardDataRequestModel = new CardDataRequestModel();\r\ncardDataRequestModel.setCard_number(\"4507990000004905\");\r\ncardDataRequestModel.setExpiration_date(\"1250\");\r\ncardDataRequestModel.setCard_holder(\"Jorge Jorgelin\");\r\ncardDataRequestModel.setSecurity_code(\"123\");\r\ncardDataRequestModel.setAccount_number(\"12345678901234567890\");\r\ncardDataRequestModel.setEmail_holder(\"asd@medina.com\");\r\n\r\nInternalTokenRequest internalTokenRequest = new InternalTokenRequest();\r\ninternalTokenRequest.setCard_data(cardDataRequestModel);\r\ninternalTokenRequest.setEstablishment_number(\"11223344\");\r\ntry {\r\n    return new ResponseEntity\u003c\u003e(internalTokenService.tokens(apikey, internalTokenRequest), HttpStatus.OK);\r\n}\r\ncatch (InternalTokenException e) {\r\n    logger.error(e.getMessage());\r\n    return new ResponseEntity\u003c\u003e(e.getResponse(), HttpStatus.valueOf(e.getStatus()));\r\n}\r\ncatch (Exception e) {\r\n    logger.error(e.getMessage());\r\n    return new ResponseEntity\u003c\u003e(e.getMessage(), HttpStatus.BAD_REQUEST);\r\n}\r\n```\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\u003ca name=\"tokenizacioninternapagar\"\u003e\u003c/a\u003e\r\n### Pagar\r\n\r\nUna vez que se obtiene el token a partir de la tarjeta tokenizada, se deberá ejecutar la solicitud de pago. Además del token de pago y los parámetros propios de la transacción, el comercio deberá identificar la compra con el \"site_transaction_id\" y \"user_id\"(id\r\ndel Customer).\r\n\r\n```java\r\nString apikey = \"YKcWXjI2aoSnp60urwLd6TbLYNuybcWC\";\r\nTransactionDataRequestModel transactionDataRequestModel = new TransactionDataRequestModel();\r\ntransactionDataRequestModel.setMerchant_transaction_id(\"numero aleatorio\");\r\ntransactionDataRequestModel.setPayment_method_id(\"1\");\r\ntransactionDataRequestModel.setAmount(\"100\");\r\ntransactionDataRequestModel.setCurrency(\"ARS\");\r\ntransactionDataRequestModel.setInstallments(\"1\");\r\ntransactionDataRequestModel.setPayment_type(\"single\");\r\ntransactionDataRequestModel.setDescription(\"tx-tokenizada\");\r\nCustomerDataRequestModel customerDataRequestModel = new CustomerDataRequestModel();\r\ncustomerDataRequestModel.setToken_id(\"66617169-68b1-4040-af8f-3c648d81b8f0\");\r\ncustomerDataRequestModel.setIdentification_type(\"dni\");\r\ncustomerDataRequestModel.setIdentification_number(\"12312312\");\r\nInternalTokenPaymentRequest internalTokenPaymentRequest = new InternalTokenPaymentRequest();\r\ninternalTokenPaymentRequest.setMerchant_id(\"11223344\");\r\ninternalTokenPaymentRequest.setTransaction_data(transactionDataRequestModel);\r\ninternalTokenPaymentRequest.setCustomer_data(customerDataRequestModel);\r\ntry {\r\n    return new ResponseEntity\u003c\u003e(internalTokenService.payment(apikey, paymentRequestModel), HttpStatus.OK);\r\n}\r\ncatch (DecidirException e) {\r\n    logger.error(e.getMessage());\r\n    return new ResponseEntity\u003c\u003e(e.getMessage(), HttpStatus.valueOf(e.getStatus()));\r\n}\r\ncatch (InternalTokenException e) {\r\n    logger.error(e.getMessage());\r\n    return new ResponseEntity\u003c\u003e(e.getResponse(), HttpStatus.valueOf(e.getStatus()));\r\n}\r\n```\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\r\n## Integración con Cybersource\r\n\r\nPara utilizar el Servicio de Control de Fraude Cybersource, en la operación SendAuthorizeRequest, deben enviarse datos adicionales sobre la operación de compra que se quiere realizar.\r\nSe han definido cinco verticales de negocio que requieren parámetros específicos, así como también parámetros comunes a todas las verticales.\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\u003ca name=\"parametros-comunes\"\u003e\u003c/a\u003e\r\n\r\n### Parámetros Comunes\r\n\r\nLos parámetros comunes a todas las verticales deben enviarse junto con los datos específicos de cada uno. A continuación, describiremos los párametros comúnes que se deberan agregar a los datos de cada vertical al momento de instanciar la clase correspondiente.\r\n\r\n1.  **bill_to**\r\n```java\r\n// ...codigo...\r\nBillingData billTo = new BillingData();\r\nbillTo.setCity(\"Buenos Aires\"); //Ciudad de facturación, MANDATORIO.\r\nbillTo.setCountry(\"AR\"); //País de facturación. MANDATORIO. Código ISO. (http://apps.cybersource.com/library/documentation/sbc/quickref/countries_alpha_list.pdf)\r\nbillTo.setCustomer_id(\"test\");//Identificador del usuario al que se le emite la factura. MANDATORIO. No puede contener un correo electrónico.\r\nbillTo.setEmail(\"usuario@email.com.ar\");//Mail del usuario al que se le emite la factura. MANDATORIO.\r\nbillTo.setFirst_name(\"Usuario\"); //Nombre del usuario al que se le emite la factura. MANDATORIO.\r\nbillTo.setLast_name(\"Prueba\");//Apellido del usuario al que se le emite la factura. MANDATORIO.\r\nbillTo.setPhone_number(\"54116763329\");//Teléfono del usuario al que se le emite la factura. No utilizar guiones, puntos o espacios. Incluir código de país. MANDATORIO.\r\nbillTo.setPostal_code(\"1414\");//Código Postal de la dirección de facturación. MANDATORIO.\r\nbillTo.setState(\"C\");//Provincia de la dirección de facturación. MANDATORIO. Ver tabla anexa de provincias.\r\nbillTo.setStreet1(\"THAMES 677\");//Domicilio de facturación (calle y nro). MANDATORIO.\r\nbillTo.setStreet2(\"4to F\");//Complemento del domicilio. (piso, departamento). OPCIONAL.\r\nfraudDetectionData.setBill_to(billTo); //Subclase de com.decidir.sdk.dto.FraudDetectionDataRequest\r\n// ...codigo...\r\n```\r\n2.  **purchase_totals**\r\n```java\r\n// ...codigo...\r\nPurchaseTotals purchaseTotals = new PurchaseTotals();\r\npurchaseTotals.setCurrency(Currency.ARS); //com.decidir.sdk.dto.Currency. MANDATORIO.\r\npurchaseTotals.setAmount(34900L);//Monto en centavos. MANDATORIO.\r\nfraudDetectionData.setPurchase_totals(purchaseTotals); //Subclase de com.decidir.sdk.dto.FraudDetectionDataRequest\r\n// ...codigo...\r\n```\r\n\r\n3. **customer_in_site**\r\n```java\r\n// ...codigo...\r\nCustomerInSite customerInSite = new CustomerInSite();\r\ncustomerInSite.setDays_in_site(243);\r\ncustomerInSite.setIs_guest(Boolean.FALSE);\r\ncustomerInSite.setPassword(\"abracadabra\");\r\ncustomerInSite.setNum_of_transactions(1);\r\ncustomerInSite.setCellphone_number(\"1546763329\");\r\nfraudDetectionData.setCustomer_in_site(customerInSite); //Subclase de com.decidir.sdk.dto.FraudDetectionDataRequest\r\n// ...codigo...\r\n```\r\n4.  **copy_paste_card_data**\r\n```java\r\n// ...codigo...\r\nCopyPasteCardData copyPasteCardData = new CopyPasteCardData();\r\ncopyPasteCardData.setCard_number(Boolean.TRUE);//valor booleano\r\ncopyPasteCardData.setSecurity_code(Boolean.TRUE);//valor booleano\r\nfraudDetectionData.setCopy_paste_card_data(copyPasteCardData);//Subclase de com.decidir.sdk.dto.FraudDetectionDataRequest\r\n// ...codigo...\r\n```\r\n5.  _**Otros campos**_\r\n```java\r\n// ...codigo...\r\nfraudDetectionData.setChannel(Channel.WEB);//Tambien puede recibir un valor de tipo String \r\nfraudDetectionData.setDispatch_method(\"domicilio\");//{domicilio, click and collect, courrier}\r\nfraudDetectionData.setSend_to_cs(Boolean.true);// true o false\r\nfraudDetectionData.setDevice_unique_id(\"fingerprint-del-cliente\");//Subclase de com.decidir.sdk.dto.FraudDetectionDataRequest\r\n// ...codigo...\r\n```\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\u003ca name=\"retail\"\u003e\u003c/a\u003e\r\n\r\n### Retail\r\nSe enviá un `RetailFraudDetectionData` con los [parámetros comunes](#parametros-comunes) y con los siguientes parámetros que se deben enviar específicamente para la vertical Retail. Además se deben enviar datos específicos de cada producto involucrado en la transacción.\r\n\r\n```java\r\n// ...codigo...\r\nRetailFraudDetectionData retail =  new RetailFraudDetectionData();\r\n//seteo de parámetros comunes\r\n// ...codigo...\r\nRetailTransactionData retailTransactionData = new RetailTransactionData();//Datos para la vertical Retail\r\n//Datos de envio\r\nShippingData shipTo = new ShippingData();\r\nshipTo.setCity(\"Buenos Aires\"); //Ciudad de envío, MANDATORIO.\r\nshipTo.setCountry(\"AR\"); //País de envío. MANDATORIO. Código ISO. (http://apps.cybersource.com/library/documentation/sbc/quickref/countries_alpha_list.pdf)\r\nshipTo.setEmail(\"usuario@email.com.ar\");//Mail del destinatario. MANDATORIO.\r\nshipTo.setFirst_name(\"Usuario\"); //Nombre del destinatario. MANDATORIO.\r\nshipTo.setLast_name(\"Prueba\");//Apellido del destinatario. MANDATORIO.\r\nshipTo.setPhone_number(\"54116763329\");//Teléfono del destinatario. No utilizar guiones, puntos o espacios. Incluir código de país. MANDATORIO.\r\nshipTo.setPostal_code(\"1414\");//Código Postal de la dirección de envío. MANDATORIO.\r\nshipTo.setState(\"C\");//Provincia de la dirección de envío. MANDATORIO. Ver tabla anexa de provincias.\r\nshipTo.setStreet1(\"THAMES 677\");//Domicilio de envío (calle y nro). MANDATORIO.\r\nshipTo.setStreet2(\"4to F\");//Complemento del domicilio. (piso, departamento). OPCIONAL.\r\nretailTransactionData.setShip_to(shipTo);//Datos de envio. MANDATORIO\r\nretailTransactionData.setDays_to_delivery(\"2\");\r\nretailTransactionData.setTax_voucher_required(Boolean.TRUE);\r\nretailTransactionData.setCustomer_loyality_number(\"123232\");\r\nsetCoupon_code(\"cupon22\");\r\n//Items de compra (Al menos un item)\r\nItem item = new Item();\r\nitem.setCode(\"popblacksabbat2016\");  //MANDATORIO\r\nitem.setDescription(\"Popular Black Sabbath 2016\"); //OPCIONAL\r\nitem.setName(\"popblacksabbat2016ss\");//MANDATORIO\r\nitem.setSku(\"sku\");//MANDATORIO\r\nitem.setTotal_amount(34900L);//MANDATORIO\r\nitem.setQuantity(1);//MANDATORIO\r\nitem.setUnit_price(34900L);//MANDATORIO\r\nticketingTransactionData.setItems(Arrays.asList(item); //Items de compra. MANDATORIO\r\nretail.setRetail_transaction_data(retailTransactionData);//Datos de vertical Retail. MANDATORIO\r\n// ...codigo...\r\n```\r\n\r\nPara incorporar estos datos en el requerimiento inicial, se debe instanciar un objeto de la clase `RetailFraudDetectionData` de la siguiente manera.\r\n\r\n```java\r\n// ...codigo...\r\nString privateApiKey = \"92b71cf711ca41f78362a7134f87ff65\";//Private API Key habilitada para operar en ambiente Sandbox\r\nString urlSandbox = \"https://developers.decidir.com/api/v2/\";\r\nint timeout = 10; // 10 segundos de timeout\r\n//Ejemplo para el ambiente Sandbox\r\nDecidir decidir = new Decidir(privateApiKey, urlSandbox, timeout);\r\nPaymentRequest paymentRequest = new PaymentRequest();\r\n// Datos del pago\r\n // ...codigo...\r\n RetailFraudDetectionData retail =  new RetailFraudDetectionData();\r\n//Datos de vertical Retail\r\n// ...codigo...\r\npaymentRequest.setFraud_detection(retail);\r\ntry {\r\n\tDecidirResponse\u003cPaymentResponse\u003e paymentResponse = decidir.payment(paymentRequest);\r\n\t// Procesamiento de respuesta de ejecucion de pago\r\n\t// ...codigo...\r\n} catch (PaymentException pe) {\r\n\t // Manejo de pago rechazado\r\n\t // ...codigo...\r\n} catch (DecidirException de) {\r\n\t// Manejo de excepcion  de Payway\r\n\t // ...codigo...\r\n} catch (Exception e) {\r\n\t //Manejo de excepcion general\r\n\t// ...codigo...\r\n}\r\n// ...codigo...\r\n```\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\u003ca name=\"ticketing\"\u003e\u003c/a\u003e\r\n\r\n### Ticketing\r\n\r\nSe enviá un `TicketingTransactionData` con los [parámetros comunes](#parametros-comunes) y con los siguientes parámetros que se deben enviar específicamente para la vertical Ticketing. Además se deben enviar datos específicos de cada producto involucrado en la transacción.\r\n\r\n```java\r\n// ...codigo...\r\nTicketingTransactionData ticketing =  new TicketingTransactionData();\r\n//seteo de parámetros comunes\r\n// ...codigo...\r\nTicketingTransactionData ticketingTransactionData = new TicketingTransactionData();//Datos para la vertical Ticketing\r\n\r\nticketingTransactionData.setDays_to_event(10);   //MANDATORIO\r\nticketingTransactionData.setDelivery_type(\"Pick up\");  //MANDATORIO\r\n//Items de compra (Al menos un item)\r\nItem item = new Item();\r\nitem.setCode(\"popblacksabbat2016\");  //MANDATORIO\r\nitem.setDescription(\"Popular Black Sabbath 2016\"); //OPCIONAL\r\nitem.setName(\"popblacksabbat2016ss\");//MANDATORIO\r\nitem.setSku(\"sku\");//MANDATORIO\r\nitem.setTotal_amount(34900L);//MANDATORIO\r\nitem.setQuantity(1);//MANDATORIO\r\nitem.setUnit_price(34900L);//MANDATORIO\r\nticketingTransactionData.setItems(Arrays.asList(item); //Items de compra. MANDATORIO\r\nticketing.setTicketing_transaction_data(ticketingTransactionData);//Datos de vertical Ticketing. MANDATORIO\r\n// ...codigo...\r\n```\r\n\r\nPara incorporar estos datos en el requerimiento inicial, se debe instanciar un objeto de la clase`TicketingTransactionData`  de la siguiente manera.\r\n\r\n```java\r\n// ...codigo...\r\nString privateApiKey = \"92b71cf711ca41f78362a7134f87ff65\";//Private API Key habilitada para operar en ambiente Sandbox\r\nString urlSandbox = \"https://developers.decidir.com/api/v2/\";\r\nint timeout = 10; // 10 segundos de timeout\r\n//Ejemplo para el ambiente Sandbox\r\nDecidir decidir = new Decidir(privateApiKey, urlSandbox, timeout);\r\n\r\nPaymentRequest paymentRequest = new PaymentRequest();\r\n// Datos del pago\r\n // ...codigo...\r\nTicketingTransactionData ticketing =  new TicketingTransactionData();\r\n//Datos de vertical Ticketing\r\n// ...codigo...\r\npaymentRequest.setFraud_detection(ticketing);\r\ntry {\r\n\tDecidirResponse\u003cPaymentResponse\u003e paymentResponse = decidir.payment(paymentRequest);\r\n\t// Procesamiento de respuesta de ejecucion de pago\r\n\t// ...codigo...\r\n} catch (PaymentException pe) {\r\n\t // Manejo de pago rechazado\r\n\t // ...codigo...\r\n} catch (DecidirException de) {\r\n\t// Manejo de excepcion  de Payway\r\n\t // ...codigo...\r\n} catch (Exception e) {\r\n\t //Manejo de excepcion general\r\n\t// ...codigo...\r\n}\r\n// ...codigo...\r\n```\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\u003ca name=\"retailTP\"\u003e\u003c/a\u003e\r\n\r\n### RetailTP\r\nSe enviá un `RetailTPFraudDetectionData` con los [parámetros comunes](#parametros-comunes) y con los siguientes parámetros que se deben enviar específicamente para la vertical RetailTP. Además se deben enviar datos específicos de cada producto involucrado en la transacción.\r\n\r\n```java\r\n// ...codigo...\r\nRetailTPFraudDetectionData retailTP =  new RetailTPFraudDetectionData();\r\n//seteo de parámetros comunes\r\n// ...codigo...\r\nRetailTPTransactionData retailTPTransactionData = new RetailTPTransactionData();//Datos para la vertical RetailTP\r\n//Datos de envio\r\nShippingData shipTo = new ShippingData();\r\nshipTo.setCity(\"Buenos Aires\"); //Ciudad de envío, MANDATORIO.\r\nshipTo.setCountry(\"AR\"); //País de envío. MANDATORIO. Código ISO. (http://apps.cybersource.com/library/documentation/sbc/quickref/countries_alpha_list.pdf)\r\nshipTo.setEmail(\"usuario@email.com.ar\");//Mail del destinatario. MANDATORIO.\r\nshipTo.setFirst_name(\"Usuario\"); //Nombre del destinatario. MANDATORIO.\r\nshipTo.setLast_name(\"Prueba\");//Apellido del destinatario. MANDATORIO.\r\nshipTo.setPhone_number(\"54116763329\");//Teléfono del destinatario. No utilizar guiones, puntos o espacios. Incluir código de país. MANDATORIO.\r\nshipTo.setPostal_code(\"1414\");//Código Postal de la dirección de envío. MANDATORIO.\r\nshipTo.setState(\"C\");//Provincia de la dirección de envío. MANDATORIO. Ver tabla anexa de provincias.\r\nshipTo.setStreet1(\"THAMES 677\");//Domicilio de envío (calle y nro). MANDATORIO.\r\nshipTo.setStreet2(\"4to F\");//Complemento del domicilio. (piso, departamento). OPCIONAL.\r\nretailTPTransactionData.setShip_to(shipTo);//Datos de envio. MANDATORIO\r\nretailTPTransactionData.setDays_to_delivery(\"2\");\r\nretailTPTransactionData.setTax_voucher_required(Boolean.TRUE);\r\nretailTPTransactionData.setCustomer_loyality_number(\"123232\");\r\nsetCoupon_code(\"cupon22\");\r\n//Items de compra (Al menos un item)\r\nItem item = new Item();\r\nitem.setCode(\"popblacksabbat2016\");  //MANDATORIO\r\nitem.setDescription(\"Popular Black Sabbath 2016\"); //OPCIONAL\r\nitem.setName(\"popblacksabbat2016ss\");//MANDATORIO\r\nitem.setSku(\"sku\");//MANDATORIO\r\nitem.setTotal_amount(34900L);//MANDATORIO\r\nitem.setQuantity(1);//MANDATORIO\r\nitem.setUnit_price(34900L);//MANDATORIO\r\nticketingTransactionData.setItems(Arrays.asList(item); //Items de compra. MANDATORIO\r\n\r\nAccount account = new Account();\r\naccount.setId(\"account_id\");\r\naccount.setType(\"account_type\");\r\naccount.setName(\"account_name\");\r\naccount.setCategory(123);\r\naccount.setAntiquity(12);\r\n\r\nWallet wallet = new Wallet();\r\nwallet.setId(\"wallet_id\");\r\nwallet.setAntiquity(12);\r\n\r\nretailTPTransactionData.setAccount(account);\r\nretailTPTransactionData.setWallet_account(wallet);\r\nretailTPTransactionData.setPayment_method_risk_level(33);\r\nretailTPTransactionData.setEnroled_card_quantity(22);\r\nretailTPTransactionData.setDouble_factor_tp(1);\r\n\r\nretailTP.setRetailTP_transaction_data(retailTPTransactionData);//Datos de vertical RetailTP. MANDATORIO\r\n// ...codigo...\r\n```\r\n\r\nPara incorporar estos datos en el requerimiento inicial, se debe instanciar un objeto de la clase `RetailTPFraudDetectionData` de la siguiente manera.\r\n\r\n```java\r\n// ...codigo...\r\nString privateApiKey = \"92b71cf711ca41f78362a7134f87ff65\";//Private API Key habilitada para operar en ambiente Sandbox\r\nString urlSandbox = \"https://developers.decidir.com/api/v2/\";\r\n// Variables para identificar el origen de la transacción, estas mismas pueden ser enviadas vacías.\r\n// Grouper hace referencia al partner que esté consumiendo el servicio\r\nString grouper = \"\";\r\n// Developer hace referencia al desarrollador que cobra por transacción/otro\r\nString developer = \"\";\r\nint timeout = 10; // 10 segundos de timeout\r\n//Ejemplo para el ambiente Sandbox\r\nDecidir decidir = new Decidir(privateApiKey, urlSandbox, timeout, grouper, developer);\r\nPaymentRequest paymentRequest = new PaymentRequest();\r\n// Datos del pago\r\n // ...codigo...\r\n RetailTPFraudDetectionData retailTP =  new RetailTPFraudDetectionData();\r\n//Datos de vertical RetailTP\r\n// ...codigo...\r\npaymentRequest.setFraud_detection(retailTP);\r\ntry {\r\n\tDecidirResponse\u003cPaymentResponse\u003e paymentResponse = decidir.payment(paymentRequest);\r\n\t// Procesamiento de respuesta de ejecucion de pago\r\n\t// ...codigo...\r\n} catch (PaymentException pe) {\r\n\t // Manejo de pago rechazado\r\n\t // ...codigo...\r\n} catch (DecidirException de) {\r\n\t// Manejo de excepcion  de Payway\r\n\t // ...codigo...\r\n} catch (Exception e) {\r\n\t //Manejo de excepcion general\r\n\t// ...codigo...\r\n}\r\n// ...codigo...\r\n```\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\u003ca name=\"digital-goods\"\u003e\u003c/a\u003e\r\n\r\n### Digital Goods\r\n\r\nSe enviá un `DigitalGoodsFraudDetectionData` con los [parámetros comunes](#parametros-comunes) y con los siguientes parámetros que se deben enviar específicamente para la vertical Digital Goods. Además se deben enviar datos específicos de cada producto involucrado en la transacción.\r\n\r\n```java\r\n// ...codigo...\r\nDigitalGoodsFraudDetectionData digitalGoods =  new DigitalGoodsFraudDetectionData();\r\n//seteo de parámetros comunes\r\n// ...codigo...\r\nDigitalGoodsTransactionData digitalGoodsTransactionData = new DigitalGoodsTransactionData();//Datos para la vertical Digital Goods\r\n\r\ndigitalGoodsTransactionData.setDelivery_type(\"Pick up\");  //MANDATORIO\r\n//Items de compra (Al menos un item)\r\nItem item = new Item();\r\nitem.setCode(\"popblacksabbat2016\");  //MANDATORIO\r\nitem.setDescription(\"Popular Black Sabbath 2016\"); //OPCIONAL\r\nitem.setName(\"popblacksabbat2016ss\");//MANDATORIO\r\nitem.setSku(\"sku\");//MANDATORIO\r\nitem.setTotal_amount(34900L);//MANDATORIO\r\nitem.setQuantity(1);//MANDATORIO\r\nitem.setUnit_price(34900L);//MANDATORIO\r\ndigitalGoodsTransactionData.setItems(Arrays.asList(item); //Items de compra. MANDATORIO\r\ndigitalGoods.setDigital_goods_transaction_data(digitalGoodsTransactionData);//Datos de vertical Digital Goods. MANDATORIO\r\n// ...codigo...\r\n```\r\n\r\nPara incorporar estos datos en el requerimiento inicial, se debe instanciar un objeto de la clase`DigitalGoodsFraudDetectionData`  de la siguiente manera.\r\n\r\n```java\r\n// ...codigo...\r\nString privateApiKey = \"92b71cf711ca41f78362a7134f87ff65\";//Private API Key habilitada para operar en ambiente Sandbox\r\nString urlSandbox = \"https://developers.decidir.com/api/v2/\";\r\n// Variables para identificar el origen de la transacción, estas mismas pueden ser enviadas vacías.\r\n// Grouper hace referencia al partner que esté consumiendo el servicio\r\nString grouper = \"\";\r\n// Developer hace referencia al desarrollador que cobra por transacción/otro\r\nString developer = \"\";\r\nint timeout = 10; // 10 segundos de timeout\r\n//Ejemplo para el ambiente Sandbox\r\nDecidir decidir = new Decidir(privateApiKey, urlSandbox, timeout, grouper, developer);\r\n\r\nPaymentRequest paymentRequest = new PaymentRequest();\r\n// Datos del pago\r\n // ...codigo...\r\nDigitalGoodsFraudDetectionData digitalGoods=  new DigitalGoodsFraudDetectionData();\r\n//Datos de vertical Digital Goods\r\n// ...codigo...\r\npaymentRequest.setFraud_detection(digitalGoods);\r\ntry {\r\n\tDecidirResponse\u003cPaymentResponse\u003e paymentResponse = decidir.payment(paymentRequest);\r\n\t// Procesamiento de respuesta de ejecucion de pago\r\n\t// ...codigo...\r\n} catch (PaymentException pe) {\r\n\t // Manejo de pago rechazado\r\n\t // ...codigo...\r\n} catch (DecidirException de) {\r\n\t// Manejo de excepcion  de Payway\r\n\t // ...codigo...\r\n} catch (Exception e) {\r\n\t //Manejo de excepcion general\r\n\t// ...codigo...\r\n}\r\n// ...codigo...\r\n```\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\u003ca name=\"travel\"\u003e\u003c/a\u003e\r\n\r\n### Travel\r\n\r\nSe enviá un `TravelFraudDetectionData` con los [parámetros comunes](#parametros-comunes) y con los siguientes parámetros que se deben enviar específicamente para la vertical Travel. Además se deben enviar datos específicos de cada pasajero.\r\n\r\n```java\r\n// ...codigo...\r\n TravelFraudDetectionData travel =  new TravelFraudDetectionData();\r\n//seteo de parámetros comunes\r\n// ...codigo...\r\nTravelTransactionData travelTransactionData = new TravelTransactionData();//Datos para la vertical Ticketing\r\ntravelTransactionData.setReservation_code(\"GJH784\"); //MANDATORIO\r\ntravelTransactionData.setThird_party_booking(Boolean.FALSE); //MANDATORIO\r\ntravelTransactionData.setDeparture_city(\"EZE\");//OPCIONAL\r\ntravelTransactionData.setFinal_destination_city(\"HND\");//OPCIONAL\r\ntravelTransactionData.setInternational_flight(Boolean.TRUE);//OPCIONAL\r\ntravelTransactionData.setFrequent_flier_number(\"00000123\");//OPCIONAL\r\ntravelTransactionData.setClass_of_service(\"class\");//OPCIONAL\r\ntravelTransactionData.setDay_of_week_of_flight(DayOfWeekOfFlight.MONDAY);//OPCIONAL\r\ntravelTransactionData.setWeek_of_year_of_flight(5);//OPCIONAL\r\ntravelTransactionData.setAirline_code(\"AA\");//OPCIONAL\r\ntravelTransactionData.setCode_share(\"SKYTEAM\");//OPCIONAL\r\ntravelTransactionData.setAirline_number_of_passengers(1);//MANDATORIO\r\n//Lista de Pasajeros\r\nPassenger passenger = new Passenger();\r\npassenger.setEmail(\"juan@mail.com\");//MANDATORIO\r\npassenger.setFirst_name(\"Juan\");//MANDATORIO\r\npassenger.setLast_name(\"Perez\");//MANDATORIO\r\npassenger.setPassport_id(\"412314851231\"); //OPCIONAL\r\npassenger.setPhone(\"541134356768\");//MANDATORIO\r\npassenger.setPassenger_status(PassengerStatus.GOLD);//MANDATORIO\r\npassenger.setPassenger_type(PassengerType.ADULT);//MANDATORIO\r\ntravelTransactionData.setPassengers(Arrays.asList(passenger)); //Lista de pasajeros. MANDATORIO\r\n\r\n//Fecha de partida (horario del aeropuerto de partida)\r\nCalendar departureDateTime = Calendar.getInstance();\r\ndepartureDateTime.setTimeZone(TimeZone.getTimeZone(\"GMT-0300\"));\r\ndepartureDateTime.set(2018, 06, 25, 8, 35);\r\n\r\nDepartureDate departureDate = new DepartureDate();//MANDATORIO. Fecha de partida\r\ndepartureDate.setDeparture_time(departureDateTime.getTime());//MANDATORIO. Horario de partida\r\ndepartureDate.setDeparture_zone(\"GMT-0300\");//MANDATORIO. Zona horaria de aeropuerto de partida\r\nDecisionManagerTravel decisionManagerTravel = new DecisionManagerTravel();\r\ndecisionManagerTravel.setComplete_route(\"EZE-LAX:LAX-HND\");//MANDATORIO. Ruta completa del viaje. Formato = PP1-DD1:PP2-DD2:... -\u003e PPx = Aeropuerto de partida para escala x; DDx = Aeropuerto destino para escala x; : = Separador de escalas\r\ndecisionManagerTravel.setJourney_type(JourneyType.ONE_WAY);//MANDATORIO. Tipo de viaje\r\ndecisionManagerTravel.setDeparture_date(departureDate);//MANDATORIO. Fecha de partida\r\n\r\ntravelTransactionData.setDecision_manager_travel(decisionManagerTravel); ;//MANDATORIO\r\ntravel.setTravel_transaction_data(travelTransactionData);//Datos de vertical Ticketing. MANDATORIO\r\n// ...codigo...\r\n```\r\n\r\nPara incorporar estos datos en el requerimiento inicial, se debe instanciar un objeto de la clase`TravelFraudDetectionData`  de la siguiente manera.\r\n\r\n```java\r\n// ...codigo...\r\nString privateApiKey = \"92b71cf711ca41f78362a7134f87ff65\";//Private API Key habilitada para operar en ambiente Sandbox\r\nString urlSandbox = \"https://developers.decidir.com/api/v2/\";\r\n// Variables para identificar el origen de la transacción, estas mismas pueden ser enviadas vacías.\r\n// Grouper hace referencia al partner que esté consumiendo el servicio\r\nString grouper = \"\";\r\n// Developer hace referencia al desarrollador que cobra por transacción/otro\r\nString developer = \"\";\r\nint timeout = 10; // 10 segundos de timeout\r\n//Ejemplo para el ambiente Sandbox\r\nDecidir decidir = new Decidir(privateApiKey, urlSandbox, timeout, grouper, developer);\r\n\r\nPaymentRequest paymentRequest = new PaymentRequest();\r\n// Datos del pago\r\n // ...codigo...\r\n TravelFraudDetectionData travel =  new TravelFraudDetectionData();\r\n//Datos de vertical Travel\r\n// ...codigo...\r\npaymentRequest.setFraud_detection(travel);\r\ntry {\r\n\tDecidirResponse\u003cPaymentResponse\u003e paymentResponse = decidir.payment(paymentRequest);\r\n\t// Procesamiento de respuesta de ejecucion de pago\r\n\t// ...codigo...\r\n} catch (PaymentException pe) {\r\n\t // Manejo de pago rechazado\r\n\t // ...codigo...\r\n} catch (DecidirException de) {\r\n\t// Manejo de excepcion  de Payway\r\n\t // ...codigo...\r\n} catch (Exception e) {\r\n\t //Manejo de excepcion general\r\n\t// ...codigo...\r\n}\r\n// ...codigo...\r\n```\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\r\n\u003ca name=\"usoResponses\"\u003e\u003c/a\u003e\r\n\r\n## Uso de Responses\r\n\r\nLuego de haber realizado una operación, Payway devuelve los siguientes objetos:\r\n\r\n### PaymentResponse\r\n\r\nEs usado en:\r\n*   [Transacción Simple](#single)\r\n*   [Transacción PCI](#pci)\r\n*   [Transacción GDS](#gds)\r\n*   [Transacción GDS PCI](#gdspci)\r\n*   [Transacción BSA PCI](#bsapci)\r\n*   [Transacción BSA no PCI](#bsanopci)\r\n*   [Transacción Agro no PCI](#agronopci)\r\n*   [Transacción Pci por Token]()\r\n*   [Información de un Pago](#getpaymentinfo)\r\n*   [Operación en dos pasos](#twosteps)\r\n\r\n### Page\r\n*   [Listado de Pagos](#getallpayments)\r\n\r\n### RefundPaymentHistoryResponse\r\n*   [Listado de Devoluciones]()\r\n\r\n\r\n### RefundPaymentResponse\r\n*   [Anulación / Devolución Total de Pago](#totalrefund)\r\n*   [Devolución Parcial de un Pago](#partialrefund)\r\n\r\n### AnnulRefundResponse\r\n*   [Anulación de Devolución Total](#deleterefund)\r\n*   [Anulación de Devolución Parcial](#deletepartialrefund)\r\n\r\n### CardTokens\r\n\r\n*   [Listado de tarjetas tokenizadas](#listadotarjetastokenizadas)\r\n\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\u003ca name=\"manejoExceptions\"\u003e\u003c/a\u003e\r\n\r\n## Manejo de Excepciones\r\n\r\nTodas las respuestas negativas del backend de Payway deberán ser manejadas mediante Excepciones.\r\n\r\nLas Excepciones tienen dos naturalezas:\r\n\r\n* Resultados de Transacciones y Operaciones:\r\n    * [PaymentException](#paymentException)\r\n    * [RefundException](#refundException)\r\n    * [AnnulRefundException](#annulRefundException)\r\n\t* [ValidateStatusException](#validateStatusException)    \r\n* Errores en el proceso de Transacción y Operaciones:\r\n    * [DecidirException](#decidirException)\r\n        * [ValidateException](#validateException)\r\n        * [ApiException](#apiException)\r\n        * [NotFoundException](#notFoundException)\r\n\r\n\r\n\u003ca name=\"paymentException\"\u003e\u003c/a\u003e\r\n### PaymentException\r\n\r\nEl \u003ccode\u003ePaymentException\u003c/code\u003e será lanzado cuando:\r\n\r\n* Un pago haya sido RECHAZADO\r\n* El control de CyberSource haya rechazado el Pago (Excepto para Pagos en dos pasos).\r\n\r\n#### Atributos\r\n\t- status: int\r\n\t- message: String\r\n\t- paymentResponse: PaymentResponse\r\n\r\n*Ver los valores posibles en la tabla de [Atributos de Excepciones](#atributosExcepciones)*\r\n\r\nEjemplo de cómo capturar el \u003ccode\u003ePaymentException\u003c/code\u003e:\r\n```java\r\ntry {\r\n    // ...codigo...\r\n\t// Pago enviado a Payway\r\n\t// ...codigo...\r\n} catch (PaymentException pe) {\r\n    // Estado general de la Excepción\r\n    int httpStatus = pe.getStatus();\r\n    String exceptionMessage = pe.getMessage();\r\n\r\n    // Respuesta de DECIDIR\r\n    PaymentResponse paymentResponse = pe.getPayment();\r\n}\r\n```\r\n\u003ca name=\"decidirException\"\u003e\u003c/a\u003e\r\n### DecidirException\r\n\r\nEl \u003ccode\u003eDecidirException\u003c/code\u003e será lanzado cuando Payway no pueda procesar una solicitud.\r\n\r\n#### Atributos\r\n    - status: int\r\n    - message: String\r\n\r\nAdemás es \u003ccode\u003esuperclass\u003c/code\u003e de las siguientes excepciones:\r\n\r\n\u003ca name=\"validateException\"\u003e\u003c/a\u003e\r\n#### ValidateException\r\n\r\nEs lanzado cuando Payway intenta procesar datos con formatos no esperados.\r\n\r\n#### Atributos\r\n    - status: int\r\n    - message: String\r\n    - errorDetail: ValidateError\r\n*Ver los valores posibles en la tabla de [Atributos de Excepciones](#atributosExcepciones)*\r\n\r\nEjemplo de cómo capturar el \u003ccode\u003eValidateException\u003c/code\u003e:\r\n```java\r\ntry {\r\n    // ...codigo...\r\n    // Pago enviado a Payway\r\n    // ...codigo...\r\n} catch (ValidateException ve) {\r\n    // Estado general de la Excepción\r\n    int httpStatus = ve.getStatus();\r\n    String exceptionMessage = ve.getMessage();\r\n\r\n    // Detalle de error en Payway\r\n    ValidateError errorDetail = ve.getErrorDetail();\r\n}\r\n```\r\n\r\n\u003ca name=\"validateStatusException\"\u003e\u003c/a\u003e\r\n#### ValidateStatusException\r\n\r\nEs lanzado cuando Payway intenta realizar operaciones con estados no esperados.\r\n\r\n#### Atributos\r\n    - status: int\r\n    - message: String\r\n    - errorDetail: ValidateStatusError\r\n*Ver los valores posibles en la tabla de [Atributos de Excepciones](#atributosExcepciones)*\r\n\r\nEjemplo de cómo capturar el \u003ccode\u003eValidateStatusException\u003c/code\u003e:\r\n```java\r\ntry {\r\n    // ...codigo...\r\n    // Pago enviado a Payway\r\n    // ...codigo...\r\n} catch (ValidateStatusException ve) {\r\n    // Estado general de la Excepción\r\n    int httpStatus = ve.getStatus();\r\n    String exceptionMessage = ve.getMessage();\r\n\r\n    // Detalle de error en Payway\r\n    ValidateStatusError errorDetail = ve.getErrorDetail().getValidation_errors().getStatus();\r\n}\r\n```\r\n\r\n\u003ca name=\"apiException\"\u003e\u003c/a\u003e\r\n#### ApiException\r\n\r\nEs lanzado por los siguientes motivos:\r\n* Inconvenientes de acceso a los endpoints del API Payway\r\n* ApiKey incorrecta\r\n* Llamadas demasiado frecuentes al API Payway\r\n\r\n#### Atributos\r\n    - status: int\r\n    - message: String\r\n    - errorDetail: ApiError\r\n*Ver los valores posibles en la tabla de [Atributos de Excepciones](#atributosExcepciones)*\r\n\r\nEjemplo de cómo capturar el \u003ccode\u003eApiException\u003c/code\u003e:\r\n```java\r\ntry {\r\n    // ...codigo...\r\n    // Pago enviado a Payway\r\n    // ...codigo...\r\n} catch (ApiException ae) {\r\n    // Estado general de la Excepción\r\n    int httpStatus = ae.getStatus();\r\n    String exceptionMessage = ae.getMessage();\r\n\r\n    // Detalle de error en Payway\r\n    ApiError errorDetail = ae.getErrorDetail();\r\n}\r\n```\r\n\r\n\u003ca name=\"notFoundException\"\u003e\u003c/a\u003e\r\n#### NotFoundException\r\n\r\nEs lanzado cuando Payway intenta procesar datos incompletos o no existentes en Payway.\r\n\r\n#### Atributos\r\n    - status: int\r\n    - message: String\r\n    - errorDetail: NotFoundError\r\n*Ver los valores posibles en la tabla de [Atributos de Excepciones](#atributosExcepciones)*\r\n\r\nEjemplo de cómo capturar el \u003ccode\u003eNotFoundException\u003c/code\u003e:\r\n```java\r\ntry {\r\n    // ...codigo...\r\n    // Pago enviado a Payway\r\n    // ...codigo...\r\n} catch (NotFoundException nfe) {\r\n    int httpStatus = nfe.getStatus();\r\n    String exceptionMessage = nfe.getMessage();\r\n\r\n    // Detalle de error en Payway\r\n    NotFoundError errorDetail = nfe.getErrorDetail();\r\n}\r\n```\r\n\r\n\u003ca name=\"refundException\"\u003e\u003c/a\u003e\r\n### RefundException\r\n\r\nEs lanzado cuando Payway rechaza:\r\n\r\n* Devoluciones totales\r\n* Devoluciones parciales\r\n* Anulaciones\r\n\r\n#### Atributos\r\n    - status: int\r\n    - message: String\r\n    - refundPaymentResponse: RefundPaymentResponse\r\n\r\n*Ver los valores posibles en la tabla de [Atributos de Excepciones](#atributosExcepciones)*\r\n\r\nEjemplo de cómo capturar el \u003ccode\u003eRefundException\u003c/code\u003e:\r\n```java\r\ntry {\r\n    // ...codigo...\r\n    // Devolución enviada a Payway\r\n    // ...codigo...\r\n} catch (RefundException re) {\r\n    // Estado general de la Excepción\r\n    int httpStatus = re.getStatus();\r\n    String exceptionMessage = re.getMessage();\r\n    \r\n    // Respuesta de Payway\r\n    RefundPaymentResponse refundPayment = re.getRefundPayment();\r\n}\r\n```\r\n\r\n\u003ca name=\"annulRefundException\"\u003e\u003c/a\u003e\r\n### AnnulRefundException\r\n\r\nEs lanzado cuando Payway rechaza:\r\n\r\n* Anulaciones de devoluciones totales\r\n* Anulaciones de devoluciones parciales\r\n\r\n#### Atributos\r\n    - status: int\r\n    - message: String\r\n    - annulRefundResponse: AnnulRefundResponse\r\n\r\n*Ver los valores posibles en la tabla de [Atributos de Excepciones](#atributosExcepciones)*\r\n\r\nEjemplo de cómo capturar el \u003ccode\u003eAnnulRefundException\u003c/code\u003e:\r\n```java\r\ntry {\r\n    // ...codigo...\r\n    // Anulación de devolución enviada a Payway\r\n    // ...codigo...\r\n} catch (AnnulRefundException are) {\r\n    // Estado general de la Excepción\r\n    int httpStatus = are.getStatus();\r\n    String exceptionMessage = are.getMessage();\r\n\r\n    // Respuesta de Payway\r\n    AnnulRefundResponse annulRefund = are.getAnnulRefund();\r\n}\r\n```\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\u003ca name=\"linkCheckout\"\u003e\u003c/a\u003e\r\n### Link Checkout\r\n\r\nEste método permite obtener un hash de pago desde el checkout de payway\r\n\r\n\r\n```java\r\n// ...codigo...\r\n\r\nString urlSandbox = \"https://developers.decidir.com/api/checkout/\";\r\n// Variables para identificar el origen de la transacción, estas mismas pueden ser enviadas vacías.\r\n// Grouper hace referencia al partner que esté consumiendo el servicio\r\nString grouper = \"\";\r\n// Developer hace referencia al desarrollador que cobra por transacción/otro\r\nString developer = \"\";\r\n//Ejemplo para el ambiente Sandbox\r\nDecidir decidir = new Decidir(\"\", urlSandbox, timeout, grouper, developer);\r\n\r\nCheckoutRequest checkoutRequest = new CheckoutRequest();\r\ncheckoutRequest.setId(\"1234\");\r\ncheckoutRequest.setOrigin_platform(\"qw121212\");\r\nCheckoutProductModel product = new CheckoutProductModel();\r\nproduct.setId(4444);\r\nproduct.setVolume(2.0);\r\nproduct.setWeight(0.1);\r\nproduct.setValue(1000.00);\r\nproduct.setDescription(\"Remera\");\r\nproduct.setCategoryId(1);\r\nproduct.setQuantity(3);\r\ncheckoutRequest.setProducts(product);\r\ncheckoutRequest.setTotal_price(3000.00);\r\ncheckoutRequest.setSite(\"00097001\");\r\ncheckoutRequest.setSuccess_url(\"http://www.google.com/\");\r\ncheckoutRequest.setRedirect_url(\"https://www.youtube.com/\");\r\ncheckoutRequest.setCancel_url(\"http://www.google.com/\");\r\ncheckoutRequest.setNotifications_url(\"http://192.168.76.14:10005/\");\r\ncheckoutRequest.setLife_time(\"1000\");\r\ncheckoutRequest.setTemplate_id(\"1\");\r\nint[] installments = {1};\r\ncheckoutRequest.setInstallments(installments);\r\ncheckoutRequest.setId_payment_method(\"credit_card\");\r\ncheckoutRequest.setPlan_gobierno(false);\r\n\r\ntry {\r\n\treturn new ResponseEntity\u003c\u003e(checkoutService.checkoutHash(\"\", checkoutRequest), HttpStatus.OK);\r\n\r\n}catch (CheckoutException e) {\r\n        logger.error(e.getMessage());\r\n        return new ResponseEntity\u003c\u003e(e.getResponse(), HttpStatus.valueOf(e.getStatus()));\r\n}catch (Exception e) {\r\n        logger.error(e.getMessage());\r\n        return new ResponseEntity\u003c\u003e(e.getMessage(), HttpStatus.BAD_REQUEST);\r\n    }\r\n\r\n```\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\r\n\u003ca name=\"tablasreferencia\"\u003e\u003c/a\u003e\r\n\r\n## Tablas de Referencia\r\n\r\n\u003ca name=\"codigos-de-medios-de-pago\"\u003e\u003c/a\u003e\r\n\r\n### Códigos de Medios de pago\r\n\r\n[Medios de pago disponibles](https://documentacion-ventasonline.payway.com.ar/docs/gateway/3jw3eiapx1jwu-medios-de-pago#medios-de-pago-disponibles)\r\n\r\n1. Visa Debito no acepta devoluciones parciales en ecommerce.\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\u003ca name=\"divisasa\"\u003e\u003c/a\u003e\r\n\r\n### Divisas Aceptadas\r\n\r\n[Medios de pago con Divisas Aceptadas](https://documentacion-ventasonline.payway.com.ar/docs/gateway/3jw3eiapx1jwu-medios-de-pago#divisas-aceptadas)\r\n\r\n| Divisa | Descripción | Código API\r\n---------|-------------|--------\r\n| AR$ | Pesos Argentinos | ARS\r\n| U$S | Dólares Americanos | USD\r\n\r\n**NOTA** Si bien la API RESTful de Payway admite compras en Dólares Americanos, la legislación argentina sólo permite transacciones en Pesos Argentinos. Es por esto que Payway recomienda que todas las transacciones se cursen en dicha moneda.\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\u003ca name=\"provincias\"\u003e\u003c/a\u003e\r\n\r\n### Provincias\r\n\r\n[Códigos de Provincia para Cybersource](https://documentacion-ventasonline.payway.com.ar/docs/gateway/vwd3zic062ibr-manejo-de-errores-cyber-source#c%c3%b3digos-de-provincias-para-cybersource)\r\n\r\n| Provincia | Código |\r\n|----------|-------------|\r\n| CABA | C |\r\n| Buenos Aires | B |\r\n| Catamarca | K |\r\n| Chaco | H |\r\n| Chubut | U |\r\n| Córdoba | X |\r\n| Corrientes | W |\r\n| Entre Ríos | R |\r\n| Formosa | P |\r\n| Jujuy | Y |\r\n| La Pampa | L |\r\n| La Rioja | F |\r\n| Mendoza | M |\r\n| Misiones | N |\r\n| Neuquén | Q |\r\n| Río Negro | R |\r\n| Salta | A |\r\n| San Juan | J |\r\n| San Luis | D |\r\n| Santa Cruz | Z |\r\n| Santa Fe | S |\r\n| Santiago del Estero | G |\r\n| Tierra del Fuego | V |\r\n| Tucumán | T |\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\u003ca name=\"parametros\"\u003e\u003c/a\u003e\r\n\r\n### Parámetros\r\nEn ésta sección se describirán todos los parámetros utilizados por la SDK para realizar Operaciones \r\ny Transacciones.\r\n\r\n\u003ca name=\"parametrosPago\"\u003e\u003c/a\u003e\r\n#### Parámetros de Pagos\r\n\r\n|Campo              |Definición                                                                                                                                               |Obligatorio(SI/NO)|Validación                                                                                                        |Ejemplo                                |\r\n|:------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------|:-----------------|:-----------------------------------------------------------------------------------------------------------------|:--------------------------------------|\r\n|user_id            |usuario que esta haciendo uso del sitio (se utiliza para tokenizacion)                                                                                   |Condicional       |Sin validacion                                                                                                    |user_id: \"marcos\"                      |\r\n|site_transaction_id|nro de operacion                                                                                                                                         |SI                |Alfanumerico de hasta 39 caracteres                                                                               |site_transaction_id: \"prueba 1\"        |\r\n|site_id            |Site relacionado a otro site, este mismo no requiere del uso de la apikey ya que para el pago se utiliza la apikey del site al que se encuentra asociado.|NO                |Se debe encontrar configurado en la tabla site_merchant como merchant_id del site_id\u003c/br\u003eNumérico de 8 caracteres.|site_id: \"28464385\"                    |\r\n|token              |token generado en el primer paso                                                                                                                         |SI                |Alfanumerico de hasta 36 caracteres. No se podra ingresar un token utilizado para un  pago generado anteriormente.|token: \"\"                              |\r\n|payment_method_id  |id del medio de pago                                                                                                                                     |SI                |El id debe coincidir con el medio de pago de tarjeta ingresada.                                                   |payment_method_id: 1                   |\r\n|bin                |primeros 6 numeros de la tarjeta                                                                                                                         |SI                |Se valida que sean los primeros 6 digitos de la tarjeta ingresada al generar el token.                            |bin: \"456578\"                          |\r\n|amount             |importe del pago                                                                                                                                         |SI                |Importe minimo = 1 ($0.01)\u003c/br\u003e Importe Maximo = 9223372036854775807 ($92233720368547758.07)                      |amount: 20000                          |\r\n|currency           |moneda                                                                                                                                                   |SI                |Valores permitidos: ARS, USD                                                                                               |currency: \"ARS\"                        |\r\n|installments       |cuotas del pago                                                                                                                                          |SI                |Valor minimo = 1\u003c/br\u003eValor maximo = 99                                                                            |installments: 1                        |\r\n|payment_type       |forma de pago                                                                                                                                            |SI                |Valor permitido: single / distributed                                                                             |payment_type: \"single\"                 |\r\n|establishment_name |nombre de comercio                                                                                                                                       |Condicional       |Alfanumerico de hasta 25 caracteres                                                                               |establishment_name : \"prueba desa soft\"|\r\n\r\n\r\n\u003ca name=\"parametrosPMC\"\u003e\u003c/a\u003e\r\n##### Parámetros para PagoMisCuentas\r\n\r\n|Campo             |Definición                                                                                                                    |Obligatorio(SI/NO)|Validación          |Ejemplo                           |\r\n|:-----------------|:-----------------------------------------------------------------------------------------------------------------------------|:-----------------|:-------------------|:---------------------------------|\r\n|bank_code         |ID del banco que se utilizara para realizar el pago.\u003c/br\u003eSe guarda en la tabla spstransac.idbanco                             |SI                |Dato variable       |bank_code : \"17\"                  |\r\n|invoice_expiration|Fecha y hora de vencimiento de la factura. Puede omitirse las 'horas' y 'minutos', informando solo la fecha con formato DDMMYY|SI                |Formato: DDMMYY HHMM|invoice_expiration : \"311219 2359\"|\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\u003ca name=\"parametrosOffline\"\u003e\u003c/a\u003e\r\n##### Parámetros para Pagos Offline\r\n\r\n|Campo             |Definición                                                                                                                                    |Obligatorio(SI/NO)|Validación                            |Ejemplo                        |\r\n|:-----------------|:---------------------------------------------------------------------------------------------------------------------------------------------|:-----------------|:-------------------------------------|:------------------------------|\r\n|cod_p3            |Son los días que existen entre el 1º y 2º vencimiento de la factura. Poner “00” si la factura no tiene 2º vencimiento.                        |SI                |Longitud 2 caracteres numéricos       |\"cod_p3\": \"11\"                 |\r\n|cod_p4            |Son los días después del 1º vencimiento y hasta el que el cliente puede pagar la factura por Rapipago.                                        |SI                |Longitud 3 caracteres numéricos       |\"cod_p4\": \"134\"                |\r\n|client            |-Código de cliente provisto al momento de habilitar al comercio.\u003c/br\u003e-Nro de establecimiento visa dentro de visa, nro fijo para cada comercio|SI                |8 dígitos numericos , dato fijo       |\"client\": \"12345678\"           |\r\n|surcharge         |Recargo por Vto. del plazo, dato generado por el comercio. Es un monto (no un porcentaje). 5 cifras enteras y 2 decimales.                    |SI                |Longitud máxima 7 caracteres numericos|\"surcharge\": 1234567           |\r\n|invoice_expiration|Fecha de vencimiento para el pago del cupón, dato generado por el comercio                                                                    |SI                |Formato: AAMMDD                       |\"invoice_expiration\" : \"191223\"|\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\u003ca name=\"parametrosDistMonto\"\u003e\u003c/a\u003e\r\n##### Parámetros para Pagos Distribuidos por Monto\r\n\r\n\r\n|Campo                    |Definición                    |Obligatorio(SI/NO)|Validación                                                                          |Ejemplo            |\r\n|:------------------------|:-----------------------------|:-----------------|:-----------------------------------------------------------------------------------|:------------------|\r\n|sub_payments.site_id     |site_id del sub_payment       |SI                |Numérico de 8 caracteres, se debe encontrar habilitado y vinculado al site padre    |site_id: \"28464384\"|\r\n|sub_payments.installments|Cuotas del sub_payment        |SI                |Valor minimo = 1 \u003c/br\u003e Valor maximo = 99                                            |installments: 5    |\r\n|sub_payments.amount      |Monto que lleva el sub_payment|SI                |Monto total para un pago = 9223372036854775807. Este mismo es parte del amount Total|amount: 10000      |\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\u003ca name=\"parametrosDistPorc\"\u003e\u003c/a\u003e\r\n##### Parámetros para Pagos Distribuidos por Porcentaje\r\n\r\nLas transacciones distribuidas por Porcentaje no llevan parámetros adicionales pues \r\nla distribución de pagos se realiza estáticamente.\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\u003ca name=\"parametrosAgregador\"\u003e\u003c/a\u003e\r\n##### Parámetros para pagos de Comercios Agregadores.\r\n\r\n\r\n| Campo                 | Definición                                                                            | Obligatorio(SI/NO)            | Validación                                                                            | Ejemplo                                 |\r\n|:----------------------|:--------------------------------------------------------------------------------------|:------------------------------|:--------------------------------------------------------------------------------------|:----------------------------------------|\r\n| indicator             | Indicador del tipo de documento                                                       | SI                            | Numérico, 1 dígito.\u003c/br\u003eValores posibles: 0 CUIT, 1 CUIL, 2 Número único              | \"indicator\" : \"0\"                       |\r\n| identification_number | Numero de CUIT, CUIL o Numero Único (en este caso completar con ceros a la izquierda) | SI                            | Caracter, 11 posiciones                                                               | \"identification_number\" : \"20380902325\" |\r\n| bill_to_pay           | Numero de Factura a Pagar                                                             | SI (Visa), NO (Master)        | Alfanumérico 12 caracteres.                                                           | \"bill_to_pay\" : \"1234km1\"               |\r\n| bill_to_refund        | Número de factura de anulación/Devolución                                             | SI (Visa), NO (Master)        | Alfanumérico 12 caracteres.                                                           | \"bill_to_refund\" : \"1234567m90120\"      |\r\n| merchant_name         | Nombre de comercio o nombre y apellido del vendedor                                   | SI (Visa), NO (Master)        | Alfanumérico 20 caracteres. En caso de nombre y apellido, deben estar separados por / | \"merchant_name\" : \"dario/gomez\"         |\r\n| street                | Dirección del comercio o del vendedor                                                 | SI (Visa), NO (Master)        | Alfanumérico 20 caracteres.                                                           | \"street\" : \"Jose Maria\"                 |\r\n| number                | Número de puerta                                                                      | SI (Visa), NO (Master)        | Alfanumérico 6 caracteres.                                                            | \"number\" : \"9898\"                       |\r\n| postal_code           | Código postal                                                                         | SI (Visa), NO (Master)        | Alfanumérico 8 caracteres.                                                            | \"postal_code\" : \"1234\"                  |\r\n| category              | Código de actividad (rubro)                                                           | SI (Visa), NO (Master)        | Alfanumérico 5 caracteres.                                                            | \"category\" : \"1234m\"                    |\r\n| channel               | Código de canal                                                                       | SI (Visa), NO (Master)        | Alfanumérico 3 caracteres.                                                            | \"channel\" : \"89j\"                       |\r\n| geographic_code       | Código geográfico del vendedor                                                        | SI (Visa), NO (Master)        | Alfanumérico 5 caracteres.                                                            | \"geographic_code\" : \"12345\"             |\r\n| city\t\t             | Ciudad del domicilio del comercio vendedor                                            | SI (Amex), NO (Visa / Master) | Alfanumérico 15 caracteres como máximo.                                               | \"city\" : \"C.A.B.A.\"\t                    |\r\n| merchant_id\t         | Identificador único del comercio vendedor                                             | SI (Amex), NO (Visa / Master) | Numérico de 16 dígitos como máximo.                                       \t           | \"merchant_id\" : \"12345\"     \t\t          |\r\n| province  \t         | Provincia del comercio vendedor                                                       | SI (Amex), NO (Visa / Master) | Caracter 1 posición. [\u003csub\u003eValores posibles\u003c/sub\u003e](#provincias)                       | \"province\" : \"C\"                        |\r\n| country     \t         | País del comercio vendedor\t                                                         | SI (Amex), NO (Visa / Master) | Numérico de 3 caracteres. \u003c/br\u003e \"032\" para Argentina                                  | \"country\" : \"032\"                       |\r\n| merchant_email        | Email del comercio vendedor                                                           | SI (Amex), NO (Visa / Master) | Alfanumérico 40 caracteres como máximo.                                               | \"merchant_email\" : \"com@decidir.com\"    |\r\n| merchant_phone        | Teléfono del comercio vendedor                                                        | SI (Amex), NO (Visa / Master) | Numérico 20 caracteres como máximo.                                                   | \"merchant_phone\" : \"48021111\"           |\r\n| product               | Producto que vende, en caso de no contar con el dato completar con espacios           | NO                            | Alfanumérico 20 caracteres.                                                           | \"product\" : \"producto_x\"                |\r\n| origin_country        | País de origen del comerciante                                                        | SI                            | Numérico de 3 dígitos.                                                                | \"origin_country\" : \"032\"                |\r\n| merchant_url          | URL del Submerchant, en caso de no contar con la información enviar espacios          | NO                            | Alfanumérico de 100 caracteres.                                                       | \"merchant_url\" : \"https://merchant-url\" |\r\n| aggregator_name       | Nombre o datos de vendedor                                                            | SI                            | Alfanumérico de 25 caracteres.                                                        | \"aggregator_name\" : \"payfact\"           |\r\n| gateway_id            | ID Gateway                                                                            | SI (Master), NO (Visa / Amex) | Alfanumérico de 11 caracteres.                                                        | \"gateway_id\" : \"payway\"                 |\r\n| seller_id            | ID Seller                                                                            | SI (Amex) | Alfanumérico de 20 caracteres.                                                        |  \"seller_id\": \"SellerId1234567891011\"               |\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\r\n\u003ca name=\"parametrosDevolucion\"\u003e\u003c/a\u003e\r\n#### Parámetros para Devoluciones parciales, totales y Anulaciones.\r\n\r\n\r\n|Campo |Definición                                                                                                                                                                                                                       |Obligatorio(SI/NO)|Validación                                                                                          |Ejemplo     |\r\n|:-----|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:-----------------|:---------------------------------------------------------------------------------------------------|:-----------|\r\n|amount|Importe del pago a devolver.\u003c/br\u003e Si se completa el campo antes del cierre por un monto menor al de la compra se toma como devolucion parcial\u003c/br\u003e Si se ingresa el monto total o no se envia dicho campo se toma como anulacion.|NO                |Monto total para un pago = 9223372036854775807. Este mismo se debe distribuir sobre los subpayments.|amount: 1000|\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\u003ca name=\"atributosExcepciones\"\u003e\u003c/a\u003e\r\n\r\n### Atributos de Excepciones\r\n\r\n|Atributo         |Tipo                 |Descripción                     |Pertenece a                                                                                                |\r\n|:----------------|:--------------------|:-------------------------------|:----------------------------------------------------------------------------------------------------------|\r\n|status           |int                  |Estado HTTP                     |Todas                                                                                                      |\r\n|message          |String               |Descripción del Estado HTTP     |Todas                                                                                                      |\r\n|errorDetail      |ValidateError        |Descripción del error           |[ValidateException](#validateException)                                                                    |\r\n|errorDetail      |ValidateStatusError  |Descripción del error           |[ValidateStatusException](#validateStatusException)                                                                    |\r\n|errorDetail      |ApiError             |Descripción del error           |[ApiException](#apiException)                                                                              |\r\n|errorDetail      |NotFoundError        |Descripción del error           |[NotFoundException](#notFoundException)                                                                    |\r\n|validation_errors|List\u003cValidationError\u003e|Lista de Errores de validación  |[ValidateError](#validateException)                                                                        |\r\n|validation_errors|ValidationStatus     |Validación del estado erróneo   |[ValidateStatusError](#validateStatusException)                                                                        |\r\n|code             |String               |Código de error                 |[ValidationError](#validateException)\u003cbr/\u003e[ApiError](#apiException)\u003cbr/\u003e[NotFoundError](#notFoundException)|\r\n|param            |String               |Parámetro involucrado           |[ValidationError](#validateException)                                                                      |\r\n|message          |String               |Descripción del error           |[ApiError](#apiException)\u003cbr/\u003e[NotFoundError](#notFoundException)                                          |\r\n|id               |String               |Valor identificatorio           |[NotFoundError](#notFoundException)                                                                        |\r\n|entityName       |String               |Nombre de la entidad involucrada|[NotFoundError](#notFoundException)                                                                        |\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\u003ca name=\"erroresSistema\"\u003e\u003c/a\u003e\r\n\r\n### Errores de Sistema\r\nEstos códigos de Errores son los status en las Excepciones.\r\n\r\n|Código(HTTP)|Mensaje                |Descripción                                     |\r\n|:-----------|:----------------------|:-----------------------------------------------|\r\n|400         |malformed_request_error|Error en la comunicación del SDK con el API REST|\r\n|401         |authentication_error   |ApiKey Inválido                                 |\r\n|402         |invalid_request_error  |Error por datos inválidos                       |\r\n|404         |not_found_error        |Error con datos no encontrados                  |\r\n|409         |api_error              |Error inesperado en la API REST                 |\r\n\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n### Campo TID (Transaction ID)\r\nEs un identificador único de una transacción que permite vincular una compra con una liquidación o una compra con un contracargo.\r\n\r\nPara las marcas Visa, Mastercard y American Express, es posible obtener un identificador llamado Transaction ID (de acá en más TID) como respuesta de una autorización o devolución.\r\n\r\nSe informa el TID en la respuesta de Pago Simple, Pago Distribuido, Pre Autorizado y sus devoluciones.\r\nSolo se retorna en transacciones aprobadas por las marcas.\r\n\r\n#### Ejemplo de respuesta para una transacción simple:\r\n```json\r\n{\r\n    \"id\": 971344,\r\n    \"site_transaction_id\": \"SINGLE_1527712473\",\r\n    \"payment_method_id\": 1,\r\n    \"card_brand\": \"Visa\",\r\n    \"amount\": 2000,\r\n    \"currency\": \"ars\",\r\n    \"status\": \"approved\",\r\n    \"status_details\": {\r\n        \"ticket\": \"4\",\r\n        \"card_authorization_code\": \"203430\",\r\n        \"address_validation_code\": \"VTE0011\",\r\n        \"error\": null\r\n    },\r\n    \"date\": \"2025-03-30T00:00Z\",\r\n    \"customer\": {\r\n        \"id\": \"juan\",\r\n        \"email\": \"jmejia@prismamp.com\",\r\n\t\"ip_address\": \"192.168.0.1\"\r\n    },\r\n    \"bin\": \"373953\",\r\n    \"installments\": 1,\r\n    \"first_installment_expiration_date\": null,\r\n    \"payment_type\": \"single\",\r\n    \"sub_payments\": [],\r\n    \"site_id\": \"00020220\",\r\n    \"fraud_detection\": {\r\n        \"status\": null\r\n    },\r\n    \"establishment_name\": null,\r\n    \"spv\": null,\r\n    \"confirmed\": null,\r\n    \"pan\": null,\r\n    \"customer_token\": \"23e560af28e73b3c001f465d5d54c15ee1f34826744a4ddf68dc6b469dc604f5\",\r\n    \"card_data\": \"/tokens/971344\",\r\n    \"tid\": \"364656548412345\"\r\n}\r\n```\r\n#### Ejemplo de respuesta para una transacción distribuida:\r\n```json\r\n{\r\n  \"id\": 971255,\r\n  \"site_transaction_id\": \"DISTRIBUTED_1527712473\",\r\n  \"payment_method_id\": 1,\r\n  \"card_brand\": \"Visa\",\r\n  \"amount\": 2000,\r\n  \"currency\": \"ars\",\r\n  \"status\": \"approved\",\r\n  \"status_details\": {\r\n    \"ticket\": \"4\",\r\n    \"card_authorization_code\": \"203430\",\r\n    \"address_validation_code\": \"VTE0011\",\r\n    \"error\": null\r\n  },\r\n  \"date\": \"2025-03-30T00:00Z\",\r\n  \"customer\": {\r\n    \"id\": \"juan\",\r\n    \"email\": \"jmejia@prismamp.com\",\r\n    \"ip_address\": \"192.168.0.1\"\r\n  },\r\n  \"bin\": \"373953\",\r\n  \"installments\": 1,\r\n  \"first_installment_expiration_date\": null,\r\n  \"payment_type\": \"distributed\",\r\n  \"sub_payments\": [\r\n    {\r\n      \"site_id\": \"04052023\",\r\n      \"installments\": 1,\r\n      \"amount\": 1000,\r\n      \"ticket\": \"211\",\r\n      \"card_authorization_code\": \"058205\",\r\n      \"subpayment_id\": 1265395,\r\n      \"tid\": \"234567891234567\"\r\n    },\r\n    {\r\n      \"site_id\": \"00009007\",\r\n      \"installments\": 1,\r\n      \"amount\": 1000,\r\n      \"ticket\": \"626\",\r\n      \"card_authorization_code\": \"048246\",\r\n      \"subpayment_id\": 1265394,\r\n      \"tid\": \"345678912345678\"\r\n    }\r\n  ],\r\n  \"site_id\": \"00020220\",\r\n  \"fraud_detection\": {\r\n    \"status\": null\r\n  },\r\n  \"establishment_name\": null,\r\n  \"spv\": null,\r\n  \"confirmed\": null,\r\n  \"pan\": null,\r\n  \"customer_token\": \"23e560a3b3c001f465d5d55ee1f3542c468712744a4ddf68dc6b469dc604f5\",\r\n  \"card_data\": \"/tokens/971255\",\r\n  \"tid\": \"123456789123456\"\r\n}\r\n```\r\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\r\n\r\n\r\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpayway-ar%2Fsdk-java-ventaonline","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpayway-ar%2Fsdk-java-ventaonline","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpayway-ar%2Fsdk-java-ventaonline/lists"}