{"id":37022975,"url":"https://github.com/majulvez/easyredsys","last_synced_at":"2026-01-14T02:45:13.328Z","repository":{"id":57726667,"uuid":"59213041","full_name":"majulvez/easyredsys","owner":"majulvez","description":"Librería que facilita la integración con la pasarela de pago Redsys para aplicaciones Java","archived":false,"fork":false,"pushed_at":"2023-10-10T13:42:52.000Z","size":273,"stargazers_count":14,"open_issues_count":0,"forks_count":6,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-11-06T19:09:18.459Z","etag":null,"topics":["banco","compra","java","pagos"],"latest_commit_sha":null,"homepage":"https://www.miguelangeljulvez.com/es/servicios/desarrollo-software/easyredsys","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/majulvez.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-05-19T14:17:33.000Z","updated_at":"2025-03-24T02:13:41.000Z","dependencies_parsed_at":"2022-09-26T21:50:59.336Z","dependency_job_id":null,"html_url":"https://github.com/majulvez/easyredsys","commit_stats":null,"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"purl":"pkg:github/majulvez/easyredsys","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/majulvez%2Feasyredsys","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/majulvez%2Feasyredsys/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/majulvez%2Feasyredsys/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/majulvez%2Feasyredsys/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/majulvez","download_url":"https://codeload.github.com/majulvez/easyredsys/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/majulvez%2Feasyredsys/sbom","scorecard":{"id":613266,"data":{"date":"2025-08-11","repo":{"name":"github.com/majulvez/easyredsys","commit":"aab7effa306db7bd72c5e23977f904fc70b199b6"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.9,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":0,"reason":"Found 0/11 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":9,"reason":"binaries present in source code","details":["Warn: binary detected: gradle/wrapper/gradle-wrapper.jar:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: GNU General Public License v3.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 26 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-21T03:11:17.338Z","repository_id":57726667,"created_at":"2025-08-21T03:11:17.338Z","updated_at":"2025-08-21T03:11:17.338Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28408733,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T01:52:23.358Z","status":"online","status_checked_at":"2026-01-14T02:00:06.678Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["banco","compra","java","pagos"],"created_at":"2026-01-14T02:45:12.572Z","updated_at":"2026-01-14T02:45:13.315Z","avatar_url":"https://github.com/majulvez.png","language":"Java","funding_links":[],"categories":["Pasarelas de Pago"],"sub_categories":["Wallapop"],"readme":"# EASY REDSYS #\n\nEsta librería facilita la integración con la pasarela de pago Redsys para aplicaciones Java.\n\nPermite realizar compras CES, compras No CES con envío de datos de la tarjeta, autorizaciones, devoluciones, pagos diferidos y pagos recurrentes\n\n##Requisitos##\n\n1. Java 1.8.x\n2. Git (opcional)\n\n##Compilación (Opciona)##\n\n./gradlew clean install\n\n## Instalación ##\n\nEn el submódulo \"integration-example-war\" hay un ejemplo de integración de esta librería.\n\nPuedes ver el ejemplo de integración funcionando en esta dirección: https://easyredsys.miguelangeljulvez.com\n\n#### Servidores de aplicaciones testeados ####\n\nApache Tomcat 8 y 9, Wildfly 12, 13, 14 y 15, Payara 5\n\n###Integrar el jar en tu proyecto y modifica tu aplicación###\n\nAñade como dependencia maven lo siguiente\n\n```\n\u003cdependency\u003e\n  \u003cgroup\u003ecom.miguelangeljulvez.easyredsys\u003c/group\u003e\n  \u003cname\u003eeasyredsys-client\u003c/name\u003e\n  \u003cversion\u003e1.3.2\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\nA continuación, implementa la interfaz AppConfig en una clase llamada por ejemplo AppConfigImpl e introduce los datos de tu pasarela de pago. Por ejemplo:\n\n```\nimport com.miguelangeljulvez.easyredsys.client.AppConfig;\n\npublic class AppConfigImpl implements AppConfig {\n\n    @Override\n    public String getMerchantCode() {\n        return \"061978060\";\n    }\n\n    @Override\n    public String getTerminal() {\n        return \"001\";\n    }\n\n    @Override\n    public String getSecretKey() {\n        return \"23423524234\"; //Si testMode está establecido a true, no se usa. Se usa la clave de pruebas por defecto.\n    }\n\n    @Override\n    public boolean isTestMode() {\n         return true; //Establécelo a false cuando quieras pasar a real\n    }\n\n    @Override\n    public void saveNotification(Notification notification) {\n        // Pon aquí lo que quieras hacer con la notificación recibida del banco. Ver apartado \"Notificaciones\" es este mismo fichero\n    }\n}\n```\n\n**OPCIÓN A - Compra mediante Comercio Electrónico Seguro (los datos de la tarjeta son solicitados por el banco)**\n\n1- Crea la orden de compra en tu aplicación\n\nEl pedido puede crearse mediantes POJO\n\n```\nOrderCES orderCES = new OrderCES.Builder(AppConfigImpl.class)\n                        .transactionType(TransactionType.AUTORIZACION)\n                        .currency(Currency.EUR)\n                        .consumerLanguage(Language.SPANISH)\n                        .order(\"\u003cIdentificador único\u003e\")\n                        .amount(\u003cCantidad a cobrar\u003e)\n                        .productDescription(\"Product description\")\n                        .payMethods(PaymentMethod.TARJETA)\n                        .urlOk(\u003cLa url al terminar el proceso del banco con éxito\u003e)\n                        .urlKo(\u003cLa url al terminar el proceso del banco con fallo\u003e)\n                        .urlNotification(\u003cLa url de tu servicio de recogida de notificaciones\u003e)\n                        .build();\n\nMessageOrderCESRequest messageOrderCESRequest = new MessageOrderCESRequest().Builder(orderCES).build();\n```\n\n2-Crear el formulario de envío para comunicarse con el banco\n\n```\n\u003cform action=\"\u003c%=messageOrderCESRequest.getRedsysUrl()%\u003e\" method=\"post\"\u003e\n    \u003cinput name=\"Ds_SignatureVersion\" value=\"\u003c%=messageOrderCESRequest.getDs_SignatureVersion()%\u003e\" type=\"hidden\"/\u003e\n    \u003cinput name=\"Ds_MerchantParameters\" value=\"\u003c%=messageOrderCESRequest.getDs_MerchantParameters()%\u003e\" type=\"hidden\"/\u003e\n    \u003cinput name=\"Ds_Signature\" value=\"\u003c%=messageOrderCESRequest.getDs_Signature()%\u003e\" type=\"hidden\"/\u003e\n    \u003cinput type=\"submit\" value=\"Submit\"/\u003e\n\u003c/form\u003e\n```\n    \n3- Crea las páginas de urlOk y urlKo del banco\n\n4- Indica qué hacer con las notificaciones del banco. Ver mas adelante el apartado 'Notificaciones'\n\n**OPCIÓN B - Compra mediante Comercio Electrónico No Seguro (los datos de la tarjeta son solicitados por tu aplicación)**\n\n1- Crea la orden de compra en tu aplicación\n```\nOrderNoCES orderNoCES = new OrderNoCES.Builder(AppConfigImpl.class)\n            .transactionType(TransactionType.AUTORIZACION)\n            .currency(Currency.EUR)\n            .order(\u003cIdentificador único\u003e)\n            .amount(\u003cCantidad a cobrar\u003e)\n            .cardNumber(\"4548812049400004\")\n            .cvv2(\"123\")\n            .expiryDate(\"2012\")\n            .build();\n\nMessageOrderNoCESRequest messageOrderNoCESRequest = new MessageOrderNoCESRequest.Builder(orderNoCES).build();\n\ntry {\n    MessageOrderNoCESResponse messageOrderNoCESResponse = EasyRedsysService.request(messageOrderNoCESRequest);\n} catch (OperationException e) {\n    e.printStackTrace();\n}\n```\n\n2- Si no se produce ninguna excepción, la petición se ha realizado correctamente.\n\nSi se produjera alguna excepción, la descripción del error aparecerá en los logs. También se puede obtener el código de error desde la excepción:\n\n```\n    e.getCode();\n```\n\n## Notificaciones ##\n\n```\n\u003cdependency\u003e\n  \u003cgroup\u003ecom.miguelangeljulvez.easyredsys\u003c/group\u003e\n  \u003cname\u003eeasyredsys-server\u003c/name\u003e\n  \u003cversion\u003e1.3.2\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\nLas notificaciones se reciben en el método saveNotificacion() de la interfaz AppConfig que has implementado previamente.\n\nLas notificaciones que llegan a ese método han pasado todas las verificaciones y controles de seguridad.\n\nPara publicar los diferentes servicios, deberás copiar el contenido de los ficheros web.xml, sun-jaxws.xml y server-config.wsdd del submódulo \"integration-example-war\" al directorio WEB-INF de tu aplicación.\n\n### Notificación ON-LINE: síncrona y asíncrona ###\n```\norderCES.setDs_merchant_merchantURL(\"https://\u003cservidor\u003e/\u003ccontext\u003e/rest/InotificacionSIS\");\n\no desde el builder del constructor\n\nnew OrderCES.Builder()\n   ...\n   .urlNotificacion(\"https://\u003cservidor\u003e/\u003ccontext\u003e/rest/InotificacionSIS\")\n   .build()\n```\n### Notificación ON-LINE: SOAP sin wsdl y con wsdl ###\n```\norderCES.setDs_merchant_merchantURL(\"https://\u003cservidor\u003e/\u003ccontext\u003e/axis/InotificacionSIS\");\n\no desde el builder del constructor\n\nnew OrderCES.Builder()\n   ...\n   .urlNotificacion(\"https://\u003cservidor\u003e/\u003ccontext\u003e/axis/InotificacionSIS\")\n   .build()\n```\n### Notificación ON-LINE; SOAP literal (recomendada) ###\n```\norderCES.setDs_merchant_merchantURL(\"https://\u003cservidor\u003e/\u003ccontext\u003e/literal/InotificacionSIS\");\n\no desde el builder del constructor\n\nnew OrderCES.Builder()\n   ...\n   .urlNotificacion(\"https://\u003cservidor\u003e/\u003ccontext\u003e/literal/InotificacionSIS\")\n   .build()\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmajulvez%2Feasyredsys","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmajulvez%2Feasyredsys","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmajulvez%2Feasyredsys/lists"}