{"id":18918911,"url":"https://github.com/fernandospr/sdk-android-v2","last_synced_at":"2026-03-12T10:30:19.006Z","repository":{"id":70832370,"uuid":"101105451","full_name":"fernandospr/sdk-android-v2","owner":"fernandospr","description":"SDK de FrontEnd para Gateway de pago Decidir","archived":false,"fork":false,"pushed_at":"2017-08-24T11:45:25.000Z","size":5305,"stargazers_count":0,"open_issues_count":0,"forks_count":3,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-12-31T15:54:25.401Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":false,"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/fernandospr.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}},"created_at":"2017-08-22T20:40:05.000Z","updated_at":"2017-08-22T20:40:07.000Z","dependencies_parsed_at":null,"dependency_job_id":"b8a190c9-0f66-4504-ba0e-5464a73105a1","html_url":"https://github.com/fernandospr/sdk-android-v2","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fernandospr%2Fsdk-android-v2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fernandospr%2Fsdk-android-v2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fernandospr%2Fsdk-android-v2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fernandospr%2Fsdk-android-v2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fernandospr","download_url":"https://codeload.github.com/fernandospr/sdk-android-v2/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239914929,"owners_count":19717760,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":[],"created_at":"2024-11-08T10:34:16.715Z","updated_at":"2026-03-12T10:30:18.960Z","avatar_url":"https://github.com/fernandospr.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ca name=\"inicio\"\u003e\u003c/a\u003e\nDecidir SDK Android\n===============\n\nModulo para conexión con gateway de pago DECIDIR2\n\n+ [Introducción](#introduccion)\n  + [Alcance](#scope)\n  + [Diagrama de secuencia](#secuencia)\n+ [Instalación](#instalacion)\n  + [Versiones de Andrioid soportadas](#versionesdeandroidoportadas)\n + [Ambientes](#environments)\n+ [Uso](#uso)\n  + [Inicializar la clase correspondiente al conector](#initconector)\n  + [Operatoria del Gateway](#operatoria)\n    + [Generaci\u0026oacute;n de Token de Pago](#authenticate)\n     +  [Con datos de tarjeta](#datostarjeta)\n     +  [Con tarjeta tokenizada](#tokentarjeta)\n  + [Integración con Cybersource](#cybersource)\n     + [Device fingerprinter](#device)\n\u003ca name=\"introduccion\"\u003e\u003c/a\u003e\n## Introducción\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:\n\n+ **Generaci\u0026oacute;n de un token de pago.**  Se utiliza alguna de las siguentes **sdks front-end** :\n + [sdk IOS](https://github.com/decidir/SDK-IOS.v2)\n + [sdk Android](https://github.com/decidir/SDK-Android.v2)\n + [sdk Javascript](https://github.com/decidir/sdk-javascript-v2)\n+ **Procesamiento de pago.**  Se utiliza alguna de las siguentes **sdks back-end** :\n + [sdk Java](https://github.com/decidir/SDK-JAVA.v2)\n + [sdk PHP](https://github.com/decidir/SDK-PHP.v2)\n + [sdk .Net](https://github.com/decidir/SDK-.NET.v2)\n + [sdk Node](https://github.com/decidir/SDK-.NODE.v2)\n\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\n\n\u003ca name=\"scope\"\u003e\u003c/a\u003e\n## Alcance\nLa **sdk Android** provee soporte para su **aplicaci\u0026oacute;n front-end**, encargandose de la **generaci\u0026oacute;n de un token de pago** por parte de un cliente. Este **token** debe ser enviado al comercio al realizar el pago.\nEsta sdk permite la comunicaci\u0026oacute;n del cliente con la **API Decidir** utilizando su **API Key p\u0026uacute;blica**\u003csup\u003e1\u003c/sup\u003e.\n\nPara procesar el pago con **Decidir**, el comercio podr\u0026acute; realizarlo a trav\u0026eacute;s de alguna de las siguentes **sdks front-backend**:\n+ [sdk Java](https://github.com/decidir/SDK-JAVA.v2)\n+ [sdk PHP](https://github.com/decidir/SDK-PHP.v2)\n+ [sdk .Net](https://github.com/decidir/SDK-.NET.v2)\n+ [sdk Node](https://github.com/decidir/SDK-.NODE.v2)\n\n![imagen de sdks](./docs/img/DiagramaSDKs.png)\u003c/br\u003e\n\n---\n\u003csup\u003e_1 - Las API Keys serán provistas por el equipo de Soporte de DECIDIR (soporte@decidir.com.ar). _\u003c/sup\u003e\n\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\n\n\u003ca name=\"secuencia\"\u003e\u003c/a\u003e\n\n## Diagrama de secuencia\nEl flujo de una transacción a través de las **sdks** consta de dos pasos, a saber:\n\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.\n\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.\n\nA continuación, se presenta un diagrama con el Flujo de un Pago.\n\n![imagen de configuracion](./docs/img/FlujoPago.png)\u003c/br\u003e\n\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\n\n\u003ca name=\"instalacion\"\u003e\u003c/a\u003e\n## Instalación\nSe debe descargar la última versión del SDK desde el botón Download ZIP del branch master.\nUna vez descargado y descomprimido, se debe agregar la librería `decidir-sdk-android-release.aar` que se encuentra dentro de la carpeta`./decidir-sdk-android/build/outputs/aar`, a las librerías del proyecto y en el codigo se debe agregar siguiente import.\n\n```java\nimport com.android.decidir.sdk.DecidirPaymentToken;\nimport com.android.decidir.sdk.dto.*;\nimport com.android.decidir.sdk.exceptions.*;\n```\n\n\u003ca name=\"versionesdeandroidsoportadas\"\u003e\u003c/a\u003e\n### Versiones de Android soportadas\nLa versi\u0026oacute;n implementada de la SDK, est\u0026aacute; testeada para versiones desde API Level 14 (Android version \u003e= 4.0)\n\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\n\n\u003ca name=\"test\"\u003e\u003c/a\u003e\n\n## Ambientes\n\nLa **sdk Android**  permite trabajar con los ambientes de Sandbox y Producc\u0026oacute;n de Decidir.\nEl ambiente se debe instanciar indicando su URL.\n\n```java\nimport com.android.decidir.sdk.DecidirPaymentToken;\n\npublic class MiClase {\nString publicApiKey = \"92b71cf711ca41f78362a7134f87ff65\";\nString urlDesarrollo = \"https://developers.decidir.com/api/v1\";\nString urlProduccion = \"https://live.decidir.com/api/v1\";\nint timeout = 2; //Expresado en segundos\n//Para el ambiente de desarrollo\nDecidirPaymentToken decidirDesa = new DecidirPaymentToken(publicApiKey, urlDesarrollo, timeout);\n//Para el ambiente de produccion\nDecidirPaymentToken decidirProd = new DecidirPaymentToken(publicApiKey, urlProduccion, timeout);\n// ...codigo...\n}\n```\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\n\n\u003ca name=\"uso\"\u003e\u003c/a\u003e\n## Uso\n\n\u003ca name=\"initconector\"\u003e\u003c/a\u003e\n### Inicializar la clase correspondiente al conector.\n\nInstanciación de la clase `DecidirPaymentToken`\n\nLa misma recibe como parámetros la public key provista por Decidir para el comercio y el ambiente en que se trabajar\u0026aacute;.\n\nLa API Key será provista por el equipo de Soporte de DECIDIR (soporte@decidir.com.ar).\n\n```java\n// ...codigo...\nString publicApiKey = \"92b71cf711ca41f78362a7134f87ff65\";\n//Para el ambiente de produccion(default) usando public api key\nDecidirPaymentToken decidir = new DecidirPaymentToken(publicApiKey);\n//...codigo...\n```\n\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\n\n\u003ca name=\"operatoria\"\u003e\u003c/a\u003e\n\n## Operatoria del Gateway\n\n\u003ca name=\"authenticate\"\u003e\u003c/a\u003e\n\n### Generaci\u0026oacute;n de Token de Pago\n\nEl SDK-Android permite generar, desde el dispositivo mobile, un token de pago con los datos de la tarjeta del cliente. \u0026Eacute;ste se deber\u0026aacute; enviar luego al backend del comercio para realizar la transacci\u0026oacute;n de pago correpondiente.\n\nEl token de pago puede ser generado de 3 formas como se muestra a continuaci\u0026oacute;n.\n\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\n\n\u003ca name=\"datostarjeta\"\u003e\u003c/a\u003e\n\n#### Token para pagos Online\n\nMediante este recurso, se genera un token de pago a partir de los datos de la tarjeta del cliente.\n\n|Campo | Descripcion  | Oblig | Restricciones  |Ejemplo   |\n| ------------ | ------------ | ------------ | ------------ | ------------ |\n| card_number| numero de tc  | SI  |  Mayor igual a 6 numeros   | \"4507990000004905\"  |\n| card_expiration_month | mes de vto de tc  | SI  | No debe ser anterior a la fecha (mes/año) del dia actual  | 07  |\n| card_expiration_year  |año de vto de tc   | SI  |  No debe ser anterior a la fecha (mes/año) del dia actual   | 17  |\n| security_code | codigo de seguridad  | NO  | Sin validacion  | 234  |\n| card_holder_name | titular (como figura en la tc)  | SI  | Mayor igual a 1 letra  | Valentin Santiago Gomez  |\n| card_holder_identification.type  |  tipo de documento | NO  | Sin validacion  | dni/DNI, cuil/CUIL  |\n| card_holder_identification.number  | nro de documento  | NO  |  Sin validacion | 23968498  |\n| device_unique_identifier  | identificador único del dispositivo  | NO  |  Sin validacion | 12345  |\n| card_holder_birthday  | fecha de nac. del titular  | NO  |  Date | Date  |\n| card_holder_door_number  | numero de puerta del titular  | NO  |  Sin validacion | 10  |\n\n```java\n// ...codigo...\nString publicApiKey = \"92b71cf711ca41f78362a7134f87ff65\";\n//Para el ambiente de produccion(default) usando public api key\nDecidirPaymentToken decidir = new DecidirPaymentToken(publicApiKey);\n//Datos de tarjeta\nPaymentToken datos = new PaymentToken();\ndatos.setCard_number(\"4509790112684851\"); //Nro de \"\"tarjeta. MANDATORIO\ndatos.setSecurity_code(\"123\"); // CVV. OPCIONAL\ndatos.setCard_expiration_month(\"03\"); //Mes de vencimiento [01-12]. MANDATORIO\ndatos.setCard_expiration_year(\"19\");//Año de vencimiento[00-99]. MANDATORIO\ndatos.setCard_holder_name(\"TITULAR\"); //Nombre del titular tal como aparece en la tarjeta. MANDATORIO\ndatos.setCard_holder_birthday(new Date()); //Fecha de nac del titular. OPCIONAL\ndatos.setCard_holder_door_number(10); //Nro de puerta del titular. OPCIONAL\n\nCardHolderIdentification idTitular = new CardHolderIdentification(); //Identificacion del titular de la tarjeta. Es opcional, pero debe estar completo si se agrega\nidTitular.setType(IdentificationType.DNI);//MANDATORIO\nidTitular.setNumber(\"12345678\");//MANDATORIO\ndatos.setCard_holder_identification(idTitular); //OPCIONAL\n\n//Datos para consumo de servicio\nContext context = ... //Application context ( android.content.Context)\nBoolean deteccionFraude = Boolean.TRUE; // Si se realiza deteccion de fraude por CyberSource\nint timeoutFraude = 10; //Timeout para la solicitud de deteccion de fraude. Expresado en segundos. Por default es 30 segundos.\n\ntry {\n  DecidirResponse\u003cPaymentTokenResponse\u003e respuesta = decidir.createPaymentToken(datos, context, deteccionFraude, timeoutFraude)\n  // Procesamiento de respuesta de la generacion de token de pago\n  // ...codigo...\n} catch (DecidirException de) {\n  // Manejo de excepcion  de Decidir\n  // ...codigo...\n} catch (Exception e) {\n  //Manejo de excepcion general\n  // ...codigo...\n}\n//...codigo...\n```\n\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\n\n\u003ca name=\"tokentarjeta\"\u003e\u003c/a\u003e\n\n#### Token para pagos Online - con tarjeta tokenizada\n\nMediante este recurso, se genera un token de pago a partir una tarjeta tokenizada previamente.\n\n```java\n// ...codigo...\nString publicApiKey = \"92b71cf711ca41f78362a7134f87ff65\";\n//Para el ambiente de produccion(default) usando public api key\nDecidirPaymentToken decidir = new DecidirPaymentToken(publicApiKey);\n//Datos de tarjeta tokenizada\nPaymentTokenWithCardToken datos = new PaymentTokenWithCardToken();\ndatos.setToken(\"f522e031-90cb-41ed-ba1f-46e813e8e789\"); //Tarjeta tokenizada MANDATORIO\ndatos.setSecurity_code(\"123\"); // CVV. OPCIONAL\n\n//Datos para consumo de servicio\nContext context = ... //Application context ( android.content.Context)\nBoolean deteccionFraude = Boolean.TRUE; // Si se realiza deteccion de fraude por CyberSource\nint timeoutFraude = 10; //Timeout para la solicitud de deteccion de fraude. Expresado en segundos. Por default es 30 segundos.\n\ntry {\nDecidirResponse\u003cPaymentTokenResponse\u003e respuesta = decidir.createPaymentTokenWithCardToken(datos, context, deteccionFraude, timeoutFraude)\n  // Procesamiento de respuesta de la generacion de token de pago\n  // ...codigo...\n} catch (DecidirException de) {\n  // Manejo de excepcion  de Decidir\n  // ...codigo...\n} catch (Exception e) {\n  //Manejo de excepcion general\n  // ...codigo...\n}\n//...codigo...\n```\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\n\n#### Token para pagos Offline\n\nMediante este recurso, se genera un token de pago a partir de los datos del cliente.\n\n|Campo | Descripcion  | Oblig | Restricciones  |Ejemplo   |\n| ------------ | ------------ | ------------ | ------------ | ------------ |\n| customer. name | Nombre del cliente | SI  | Mayor igual a 1 letra  | Valentin Santiago Gomez  |\n| customer.identification.type  |  tipo de documento | SI  | Sin validacion  | dni/DNI, cuil/CUIL  |\n| customer.identification.number  | nro de documento  | SI  |  Sin validacion | 23968498  |\n\n```java\n// ...codigo...\nString publicApiKey = \"92b71cf711ca41f78362a7134f87ff65\";\n//Para el ambiente de produccion(default) usando public api key\nDecidirPaymentToken decidir = new DecidirPaymentToken(publicApiKey);\n//Datos de tarjeta tokenizada\nOfflinePaymentToken datos = new OfflinePaymentToken();\n\nCustomer customer = new Customer(); //Identificacion del cliente.\ncustomer.setName(\"Maxi\");//MANDATORIO\n\nCardHolderIdentification idTitular = new CardHolderIdentification(); //Identificacion del titular de la tarjeta. Es opcional, pero debe estar completo si se agrega\nidTitular.setType(IdentificationType.DNI);//MANDATORIO\nidTitular.setNumber(\"12345678\");//MANDATORIO\ncustomer.setIdentification(idTitular); //OPCIONAL\n\ndatos.setCustomer(customer);//MANDATORIO\n\ntry {\nDecidirResponse\u003cOfflinePaymentTokenResponse\u003e respuesta = decidir.createOfflinePaymentToken(datos)\n  // Procesamiento de respuesta de la generacion de token de pago\n  // ...codigo...\n} catch (DecidirException de) {\n  // Manejo de excepcion  de Decidir\n  // ...codigo...\n} catch (Exception e) {\n  //Manejo de excepcion general\n  // ...codigo...\n}\n//...codigo...\n```\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\n\n\u003ca name=\"cybersource\"\u003e\u003c/a\u003e\n\n## Integración con Cybersource\n\nPara utilizar el Servicio de Control de Fraude Cybersource, debe indicarse en un par\u0026aacute;metro al momento de invocar el servicio de generaci\u0026oacute;n de token de pago.\n[Ver ejemplo](#tokentarjeta)\n\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\n\u003ca name=\"device\"\u003e\u003c/a\u003e\n\n## Device FingerPrint\nEl **Device Fingerprint (DF)** es la huella digital del dispositivo que realiza la transacción. \nEs un dato muy importante que se tiene en cuenta en el proceso de validación\nPara acceder a la documentación: \nhttps://decidir.api-docs.io/1.0/prevencion-de-fraude-by-cybersource/cs_device_fingerprint\n\n\n[\u003csub\u003eVolver a inicio\u003c/sub\u003e](#inicio)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffernandospr%2Fsdk-android-v2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffernandospr%2Fsdk-android-v2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffernandospr%2Fsdk-android-v2/lists"}