diff --git a/payment_redsys/README.rst b/payment_redsys/README.rst
new file mode 100644
index 00000000000..ffe348eede2
--- /dev/null
+++ b/payment_redsys/README.rst
@@ -0,0 +1,161 @@
+=======================
+Pasarela de pago Redsys
+=======================
+
+.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! This file is generated by oca-gen-addon-readme !!
+ !! changes will be overwritten. !!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
+ :target: https://odoo-community.org/page/development-status
+ :alt: Beta
+.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
+ :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fl10n--spain-lightgray.png?logo=github
+ :target: https://github.com/OCA/l10n-spain/tree/15.0/payment_redsys
+ :alt: OCA/l10n-spain
+.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
+ :target: https://translation.odoo-community.org/projects/l10n-spain-15-0/l10n-spain-15-0-payment_redsys
+ :alt: Translate me on Weblate
+.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
+ :target: https://runboat.odoo-community.org/webui/builds.html?repo=OCA/l10n-spain&target_branch=15.0
+ :alt: Try me on Runboat
+
+|badge1| |badge2| |badge3| |badge4| |badge5|
+
+Este módulo añade la opción de pago a través de la pasarela de Redsys, pudiendo
+seleccionar entre los métodos de pago: pago con tarjeta, pago por transferencia,
+domiciliación y Bizum.
+
+**Table of contents**
+
+.. contents::
+ :local:
+
+Installation
+============
+
+Para utilizar este módulo, necesita la biblioteca `pycryptodome
+`_ instalada en su sistema::
+
+ pip3 install pycryptodome
+
+Configuration
+=============
+
+Parámetros
+~~~~~~~~~~
+
+* **Nombre del comercio**: Indicaremos el nombre del comercio.
+
+* **Número de comercio (FUC)**: Indicaremos el número de comercio que
+ nuestra entidad nos ha comunicado.
+
+* **Clave secreta de encriptación**: Indicaremos la clave de encriptación
+ que tiene el comercio.
+
+* **Número de terminal**: Indicaremos el terminal del TPV.
+
+* **Tipo de firma**: Seleccionaremos el tipo de firma del comercio.
+
+* **Tipo de moneda**: Seleccionaremos la moneda de nuestro terminal TPV
+ (Normalmente EUR - Euros).
+
+* **Tipo de transacción**: Indicaremos el tipo de transacción, 0.
+
+* **Idioma TPV**: Indicaremos el idioma en el TPV.
+
+* **Método de pago**: Indicaremos qué tipo de pago se debe aceptar, pago con
+ tarjeta, Bizum u otro de los disponibles.
+
+* **Porcentaje de pago**: Indicar el porcentaje de pago que se permite, si
+ se deja a 0.0 se entiende 100%.
+
+Nota
+~~~~
+
+Se tiene que verificar la configuración del comercio en el
+módulo de administración de Redsys, donde la opción “Parámetros en las
+URLs” debe tener el valor “SI”.
+
+En caso de que exista más de una base de datos en la instalación, cuando la
+pasarela de pago envía el formulario a "/payment/redsys/return" odoo no sabe
+con que base de datos procesar esta información, por lo que hay que establecer
+los parametros **dbfilter** y **dbname** en el archivo de configuración.
+
+Para mostrar simultáneamente en el comercio electrónico varios de los métodos
+de pago que proporciona Redsys, como pago con tarjeta y Bizum por ejemplo,
+debemos duplicar el medio de pago y escoger en el campo método de pago el que
+corresponda en cada caso.
+
+En el caso de Bizum, el titular del TPV deberá solicitar al banco su activación.
+
+Known issues / Roadmap
+======================
+
+De acuerdo a los requisitos de Redsys, el tamaño máximo del número de pedido
+resultante (``Ds_Order``) es de 12 caracteres. Este addon trunca dicho
+dato en el comienzo de la transacción, con el resultado de que, aunque Redsys
+la aceptará, no se finalizará el pedido pedido en Odoo al retornar y entregará
+un Error 500 a Redsys.
+Para evitar esto, es recomendable seleccionar secuencias de pedido que se
+ajusten a esta limitación, en particular de 10 o menos caracteres, al ser la
+referencia un número extendido a partir del pedido, que incluye un guion y un
+número secuencial para posibles repeticiones de pago.
+
+Bug Tracker
+===========
+
+Bugs are tracked on `GitHub Issues `_.
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us smashing it by providing a detailed and welcomed
+`feedback `_.
+
+Do not contact contributors directly about support or help with technical issues.
+
+Credits
+=======
+
+Authors
+~~~~~~~
+
+* Tecnativa
+
+Contributors
+~~~~~~~~~~~~
+
+* `Tecnativa `_:
+
+ * Sergio Teruel
+ * Carlos Dauden
+ * Carlos Roca
+ * João Marques
+
+* Isaac Gallart
+
+* `Acysos S.L. `_:
+
+ * Ignacio Ibeas
+
+* `Planes Asesoria y Soluciones Informaticas S.L. `_:
+
+ * Luis Planes
+
+Maintainers
+~~~~~~~~~~~
+
+This module is maintained by the OCA.
+
+.. image:: https://odoo-community.org/logo.png
+ :alt: Odoo Community Association
+ :target: https://odoo-community.org
+
+OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
+This module is part of the `OCA/l10n-spain `_ project on GitHub.
+
+You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/payment_redsys/__init__.py b/payment_redsys/__init__.py
new file mode 100644
index 00000000000..822e3704ce2
--- /dev/null
+++ b/payment_redsys/__init__.py
@@ -0,0 +1,4 @@
+# License AGPL-3 - See https://www.gnu.org/licenses/agpl-3.0.html
+
+from . import models
+from . import controllers
diff --git a/payment_redsys/__manifest__.py b/payment_redsys/__manifest__.py
new file mode 100644
index 00000000000..8362b310a0b
--- /dev/null
+++ b/payment_redsys/__manifest__.py
@@ -0,0 +1,20 @@
+# Copyright 2017 Tecnativa - Sergio Teruel
+# Copyright 2020 Tecnativa - João Marques
+
+{
+ "name": "Pasarela de pago Redsys",
+ "category": "Payment Acquirer",
+ "summary": "Payment Acquirer: Redsys Implementation",
+ "version": "15.0.1.0.0",
+ "author": "Tecnativa, Odoo Community Association (OCA)",
+ "website": "https://github.com/OCA/l10n-spain",
+ "depends": ["payment", "website_sale"],
+ "external_dependencies": {"python": ["pycryptodome"]},
+ "data": [
+ "views/payment_acquirer.xml",
+ "views/payment_redsys_templates.xml",
+ "data/payment_redsys.xml",
+ ],
+ "license": "AGPL-3",
+ "installable": True,
+}
diff --git a/payment_redsys/controllers/__init__.py b/payment_redsys/controllers/__init__.py
new file mode 100644
index 00000000000..12a7e529b67
--- /dev/null
+++ b/payment_redsys/controllers/__init__.py
@@ -0,0 +1 @@
+from . import main
diff --git a/payment_redsys/controllers/main.py b/payment_redsys/controllers/main.py
new file mode 100644
index 00000000000..e1b2d0d1310
--- /dev/null
+++ b/payment_redsys/controllers/main.py
@@ -0,0 +1,51 @@
+# Copyright 2016-2017 Tecnativa - Sergio Teruel
+# Copyright 2019 Ignacio Ibeas
+# Copyright 2023 Planesnet - Luis Planes, Laia Espinosa, Raul Solana
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+import logging
+import pprint
+
+from odoo import http
+from odoo.http import request
+
+_logger = logging.getLogger(__name__)
+
+
+class RedsysController(http.Controller):
+ _return_url = "/payment/redsys/return"
+ _cancel_url = "/payment/redsys/cancel"
+ _exception_url = "/payment/redsys/error"
+ _reject_url = "/payment/redsys/reject"
+
+ @http.route(
+ [
+ "/payment/redsys/return",
+ "/payment/redsys/cancel",
+ "/payment/redsys/error",
+ "/payment/redsys/reject",
+ ],
+ type="http",
+ auth="public",
+ csrf=False,
+ )
+ def redsys_return(self, **post):
+ """Redsys."""
+ _logger.info(
+ "Redsys: entering form_feedback with post data %s", pprint.pformat(post)
+ )
+ if post:
+ request.env["payment.transaction"].sudo()._handle_feedback_data(
+ "redsys", post
+ )
+ return request.redirect("/payment/status")
+
+ @http.route(
+ ["/payment/redsys/result/"],
+ type="http",
+ auth="public",
+ methods=["GET"],
+ website=True,
+ )
+ def redsys_result(self, page, **vals):
+ return request.redirect("/payment/status")
diff --git a/payment_redsys/data/payment_redsys.xml b/payment_redsys/data/payment_redsys.xml
new file mode 100644
index 00000000000..aeb3133b1a1
--- /dev/null
+++ b/payment_redsys/data/payment_redsys.xml
@@ -0,0 +1,44 @@
+
+
+
+
+ Redsys
+
+ redsys
+
+
+ Bussines name
+ 8888888
+ Bussines description
+ xxxxxxxxxxxx -- SHA256
+
+
+
+ A payment gateway to accept online payments via credit cards.
+
+
+
+ You will be redirected to the Redsys payment gateway after clicking on the payment button.
]]>
+
+
+ Bizum
+
+
+
+
+ Redsys
+ redsys
+ inbound
+
+
+
diff --git a/payment_redsys/i18n/bg.po b/payment_redsys/i18n/bg.po
new file mode 100644
index 00000000000..8f036f28b7c
--- /dev/null
+++ b/payment_redsys/i18n/bg.po
@@ -0,0 +1,288 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_redsys
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: l10n-spain (8.0)\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-09-17 19:27+0000\n"
+"PO-Revision-Date: 2016-09-25 14:07+0000\n"
+"Last-Translator: OCA Transbot \n"
+"Language-Team: Bulgarian (http://www.transifex.com/oca/OCA-l10n-spain-8-0/"
+"language/bg/)\n"
+"Language: bg\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__005
+msgid "Alemán"
+msgstr ""
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Bank Error: %s (%s)"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_pay_method__z
+msgid "Bizum"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__001
+msgid "Castellano"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__003
+msgid "Catalán"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_currency
+msgid "Currency"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__display_name
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_transaction__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_pay_method__d
+msgid "Domiciliacion"
+msgstr ""
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Error: %s (%s)"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__013
+msgid "Euskera"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__004
+msgid "Francés"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__012
+msgid "Gallego"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_signature_version__hmac_sha256_v1
+msgid "HMAC SHA256 V1"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__006
+msgid "Holandés"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__id
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_transaction__id
+msgid "ID"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__002
+msgid "Inglés"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__007
+msgid "Italiano"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer____last_update
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_transaction____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_lang
+msgid "Merchant Consumer Language"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_data
+msgid "Merchant Data"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_name
+msgid "Merchant Name"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_code
+msgid "Merchant code"
+msgstr ""
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Ok: %s"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_pay_method__t
+msgid "Pago con Tarjeta"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_pay_method__r
+msgid "Pago por Transferencia"
+msgstr ""
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Partial payment percent must be between 0 and 100"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model,name:payment_redsys.model_payment_acquirer
+msgid "Payment Acquirer"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_pay_method
+msgid "Payment Method"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model,name:payment_redsys.model_payment_transaction
+msgid "Payment Transaction"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__011
+msgid "Polaco"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__009
+msgid "Portugués"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_description
+msgid "Product Description"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__provider
+msgid "Provider"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__provider__redsys
+#: model:payment.acquirer,name:payment_redsys.payment_acquirer_redsys
+msgid "Redsys"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_signature_version
+msgid "Redsys Signature Version"
+msgstr ""
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Redsys: feedback error %s (%s)"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_percent_partial
+msgid "Reduction percent"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_secret_key
+msgid "Secret Key"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__008
+msgid "Sueco"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_terminal
+msgid "Terminal"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_transaction__redsys_txnid
+msgid "Transaction ID"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_transaction_type
+msgid "Transtaction Type"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__010
+msgid "Valenciano"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,help:payment_redsys.field_payment_acquirer__redsys_percent_partial
+msgid ""
+"Write percent reduction payment, for this method payment.With this option "
+"you can allow partial payments in your shop online, the residual amount in "
+"pending for do a manual payment later."
+msgstr ""
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,pre_msg:payment_redsys.payment_acquirer_redsys
+msgid ""
+"You will be redirected to the Redsys payment gateway after clicking on the "
+"payment button."
+msgstr ""
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,auth_msg:payment_redsys.payment_acquirer_redsys
+msgid "Your payment has been authorized."
+msgstr ""
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,cancel_msg:payment_redsys.payment_acquirer_redsys
+msgid "Your payment has been cancelled."
+msgstr ""
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,pending_msg:payment_redsys.payment_acquirer_redsys
+msgid ""
+"Your payment has been successfully processed but is waiting for approval."
+msgstr ""
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,done_msg:payment_redsys.payment_acquirer_redsys
+msgid "Your payment has been successfully processed. Thank you!"
+msgstr ""
+
+#~ msgid "Order"
+#~ msgstr "Поръчка"
+
+#~ msgid "Taxes:"
+#~ msgstr "Данъци:"
+
+#~ msgid "Untaxed Amount:"
+#~ msgstr "Сума без Данъци"
diff --git a/payment_redsys/i18n/ca.po b/payment_redsys/i18n/ca.po
new file mode 100644
index 00000000000..78e85c05d41
--- /dev/null
+++ b/payment_redsys/i18n/ca.po
@@ -0,0 +1,358 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_redsys
+#
+# Translators:
+# Carles Antoli , 2016
+# Carles Antoli , 2016
+# Eric Antones , 2015-2016
+msgid ""
+msgstr ""
+"Project-Id-Version: l10n-spain (8.0)\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-08-26 16:03+0000\n"
+"PO-Revision-Date: 2021-03-30 09:46+0000\n"
+"Last-Translator: Daniel Martinez Vila \n"
+"Language-Team: Catalan (http://www.transifex.com/oca/OCA-l10n-spain-8-0/"
+"language/ca/)\n"
+"Language: ca\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.3.2\n"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__005
+msgid "Alemán"
+msgstr "Alemany"
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Bank Error: %s (%s)"
+msgstr "Error del banc: %s (%s)"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_pay_method__z
+msgid "Bizum"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__001
+msgid "Castellano"
+msgstr "Castellà"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__003
+msgid "Catalán"
+msgstr "Català"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_currency
+msgid "Currency"
+msgstr "Moneda"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__display_name
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_transaction__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_pay_method__d
+msgid "Domiciliacion"
+msgstr "Domiciliació"
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Error: %s (%s)"
+msgstr "Error: %s (%s)"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__013
+msgid "Euskera"
+msgstr "Basc"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__004
+msgid "Francés"
+msgstr "Francès"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__012
+msgid "Gallego"
+msgstr "Gallec"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_signature_version__hmac_sha256_v1
+msgid "HMAC SHA256 V1"
+msgstr "HMAC SHA256 V1"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__006
+msgid "Holandés"
+msgstr "Holandès"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__id
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_transaction__id
+msgid "ID"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__002
+msgid "Inglés"
+msgstr "Anglès"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__007
+msgid "Italiano"
+msgstr "Italià"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer____last_update
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_transaction____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_lang
+msgid "Merchant Consumer Language"
+msgstr "Llenguatge del consumidor comercial"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_data
+msgid "Merchant Data"
+msgstr "Dades de comerciant"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_name
+msgid "Merchant Name"
+msgstr "Dades de comerciant"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_code
+msgid "Merchant code"
+msgstr "Codi de comerciant"
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Ok: %s"
+msgstr "Ok: %s"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_pay_method__t
+msgid "Pago con Tarjeta"
+msgstr "Pagament amb targeta"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_pay_method__r
+msgid "Pago por Transferencia"
+msgstr "Pagament per transferència"
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Partial payment percent must be between 0 and 100"
+msgstr "El percentatge de pagament parcial ha d’estar entre 0 i 100"
+
+#. module: payment_redsys
+#: model:ir.model,name:payment_redsys.model_payment_acquirer
+msgid "Payment Acquirer"
+msgstr "Adquirent de pagaments"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_pay_method
+msgid "Payment Method"
+msgstr "Mètode de pagament"
+
+#. module: payment_redsys
+#: model:ir.model,name:payment_redsys.model_payment_transaction
+msgid "Payment Transaction"
+msgstr "Transacció de pagament"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__011
+msgid "Polaco"
+msgstr "Polac"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__009
+msgid "Portugués"
+msgstr "Portuguès"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_description
+msgid "Product Description"
+msgstr "Descripció del producte"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__provider
+msgid "Provider"
+msgstr "Proveïdor"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__provider__redsys
+#: model:payment.acquirer,name:payment_redsys.payment_acquirer_redsys
+msgid "Redsys"
+msgstr "Redsys"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_signature_version
+msgid "Redsys Signature Version"
+msgstr "Versió de signatura Redsys"
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Redsys: feedback error %s (%s)"
+msgstr "Redsys: error de retroalimentació %s (%s)"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_percent_partial
+msgid "Reduction percent"
+msgstr "Percentatge de reducció"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_secret_key
+msgid "Secret Key"
+msgstr "Clau secreta"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__008
+msgid "Sueco"
+msgstr "Suec"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_terminal
+msgid "Terminal"
+msgstr "Terminal"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_transaction__redsys_txnid
+msgid "Transaction ID"
+msgstr "ID de transacció"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_transaction_type
+msgid "Transtaction Type"
+msgstr "Tipus de transacció"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__010
+msgid "Valenciano"
+msgstr "Valencià"
+
+#. module: payment_redsys
+#: model:ir.model.fields,help:payment_redsys.field_payment_acquirer__redsys_percent_partial
+msgid ""
+"Write percent reduction payment, for this method payment.With this option "
+"you can allow partial payments in your shop online, the residual amount in "
+"pending for do a manual payment later."
+msgstr ""
+"Escriviu un percentatge de reducció de pagament per aquest mètode de "
+"pagament. Amb aquesta opció podeu permetre pagaments parcials a la vostra "
+"botiga en línia, l'import residual pendent de fer un pagament manual més "
+"tard."
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,pre_msg:payment_redsys.payment_acquirer_redsys
+msgid ""
+"You will be redirected to the Redsys payment gateway after clicking on the "
+"payment button."
+msgstr ""
+"Després de fer clic al botó de pagament, se us redirigirà a la passarel·la "
+"de pagament de Redsys."
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,auth_msg:payment_redsys.payment_acquirer_redsys
+msgid "Your payment has been authorized."
+msgstr "El vostre pagament s'ha autoritzat."
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,cancel_msg:payment_redsys.payment_acquirer_redsys
+msgid "Your payment has been cancelled."
+msgstr "El vostre pagament s'ha cancel·lat."
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,pending_msg:payment_redsys.payment_acquirer_redsys
+msgid ""
+"Your payment has been successfully processed but is waiting for approval."
+msgstr ""
+"El vostre pagament s’ha processat correctament, però espera l’aprovació."
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,done_msg:payment_redsys.payment_acquirer_redsys
+msgid "Your payment has been successfully processed. Thank you!"
+msgstr "El vostre pagament s'ha processat correctament. Gràcies!"
+
+#~ msgid "Send quotation"
+#~ msgstr "Enviar pressupost"
+
+#~ msgid "Merchant Titular"
+#~ msgstr "Titular de comerciant"
+
+#, fuzzy
+#~ msgid "Invoicing Address"
+#~ msgstr "Adreça de facturació"
+
+#, fuzzy
+#~ msgid "Shipping Address"
+#~ msgstr "Adreça d'enviament"
+
+#~ msgid "Back to shop"
+#~ msgstr "Tornar a la botiga"
+
+#, fuzzy
+#~ msgid ""
+#~ "En error ocurred.
Please contact with us and inform you about your "
+#~ "order."
+#~ msgstr ""
+#~ "Si us plau, poseu-vos en contacte amb nosaltres i l'informarem sobre la "
+#~ "seva comanda."
+
+#~ msgid "Order"
+#~ msgstr "Comanda"
+
+#~ msgid "Taxes:"
+#~ msgstr "Impostos:"
+
+#, fuzzy
+#~ msgid "Thanks for you order.
We will inform you of your order status"
+#~ msgstr "T'informarem sobre l'estat de la comanda"
+
+#~ msgid "The payment of your order has failed"
+#~ msgstr "El pagament de la teva comanda ha fallat"
+
+#~ msgid "Untaxed Amount:"
+#~ msgstr "Import sense impostos:"
+
+#~ msgid "Date:"
+#~ msgstr "Data:"
+
+#~ msgid "Discount (%)"
+#~ msgstr "Descompte (%)"
+
+#~ msgid "En error ocurred."
+#~ msgstr "S'ha produït un error."
+
+#~ msgid "Product"
+#~ msgstr "Producte"
+
+#~ msgid "Quantity"
+#~ msgstr "Quantitat"
+
+#~ msgid "Subtotal"
+#~ msgstr "Subtotal"
+
+#~ msgid "Thanks for you order."
+#~ msgstr "Gràcies per la teva comanda."
+
+#~ msgid "Total:"
+#~ msgstr "Total:"
+
+#~ msgid "Unit Price"
+#~ msgstr "Preu unitari"
diff --git a/payment_redsys/i18n/es.po b/payment_redsys/i18n/es.po
new file mode 100644
index 00000000000..80a9ff6782e
--- /dev/null
+++ b/payment_redsys/i18n/es.po
@@ -0,0 +1,412 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_redsys
+#
+# Translators:
+# Alejandro Santana , 2015
+# Antonio Trueba, 2016
+# Antonio Trueba, 2016
+# Eric Antones , 2015-2016
+# Oihane Crucelaegui , 2015
+# Pedro M. Baeza , 2015
+msgid ""
+msgstr ""
+"Project-Id-Version: l10n-spain (8.0)\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-08-26 16:03+0000\n"
+"PO-Revision-Date: 2020-07-27 09:19+0000\n"
+"Last-Translator: Daniel Martinez Vila \n"
+"Language-Team: Spanish (http://www.transifex.com/oca/OCA-l10n-spain-8-0/"
+"language/es/)\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 3.10\n"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__005
+msgid "Alemán"
+msgstr "Alemán"
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Bank Error: %s (%s)"
+msgstr "Error del banco: %s (%s)"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_pay_method__z
+msgid "Bizum"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__001
+msgid "Castellano"
+msgstr "Castellano"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__003
+msgid "Catalán"
+msgstr "Catalán"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_currency
+msgid "Currency"
+msgstr "Moneda"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__display_name
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_transaction__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_pay_method__d
+msgid "Domiciliacion"
+msgstr "Domiciliación"
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Error: %s (%s)"
+msgstr "Error: %s (%s)"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__013
+msgid "Euskera"
+msgstr "Euskera"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__004
+msgid "Francés"
+msgstr "Francés"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__012
+msgid "Gallego"
+msgstr "Gallego"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_signature_version__hmac_sha256_v1
+msgid "HMAC SHA256 V1"
+msgstr "HMAC SHA256 V1"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__006
+msgid "Holandés"
+msgstr "Holandés"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__id
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_transaction__id
+msgid "ID"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__002
+msgid "Inglés"
+msgstr "Inglés"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__007
+msgid "Italiano"
+msgstr "Italiano"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer____last_update
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_transaction____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_lang
+msgid "Merchant Consumer Language"
+msgstr "Idioma del consumidor del comerciante"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_data
+msgid "Merchant Data"
+msgstr "Datos del comerciante"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_name
+msgid "Merchant Name"
+msgstr "Nombre del comerciante"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_code
+msgid "Merchant code"
+msgstr "Código de comerciante"
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Ok: %s"
+msgstr "Ok: %s"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_pay_method__t
+msgid "Pago con Tarjeta"
+msgstr "Pago con Tarjeta"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_pay_method__r
+msgid "Pago por Transferencia"
+msgstr "Pago por Transferencia"
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Partial payment percent must be between 0 and 100"
+msgstr "El porcentaje de pago parcial debe estar entre 0 y 100"
+
+#. module: payment_redsys
+#: model:ir.model,name:payment_redsys.model_payment_acquirer
+msgid "Payment Acquirer"
+msgstr "Proceso de pago"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_pay_method
+msgid "Payment Method"
+msgstr "Método de pago"
+
+#. module: payment_redsys
+#: model:ir.model,name:payment_redsys.model_payment_transaction
+msgid "Payment Transaction"
+msgstr "Transacción de pago"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__011
+msgid "Polaco"
+msgstr "Polaco"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__009
+msgid "Portugués"
+msgstr "Portugués"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_description
+msgid "Product Description"
+msgstr "Descripción del producto"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__provider
+msgid "Provider"
+msgstr "Proveedor"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__provider__redsys
+#: model:payment.acquirer,name:payment_redsys.payment_acquirer_redsys
+msgid "Redsys"
+msgstr "Redsys"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_signature_version
+msgid "Redsys Signature Version"
+msgstr "Versión de Redsys de la firma"
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Redsys: feedback error %s (%s)"
+msgstr "Redsys: feedback error %s (%s)"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_percent_partial
+msgid "Reduction percent"
+msgstr "Porcentaje de reducción"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_secret_key
+msgid "Secret Key"
+msgstr "Clave secreta"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__008
+msgid "Sueco"
+msgstr "Sueco"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_terminal
+msgid "Terminal"
+msgstr "Terminal"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_transaction__redsys_txnid
+msgid "Transaction ID"
+msgstr "ID de la transacción"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_transaction_type
+msgid "Transtaction Type"
+msgstr "Tipo de transacción"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__010
+msgid "Valenciano"
+msgstr "Valenciano"
+
+#. module: payment_redsys
+#: model:ir.model.fields,help:payment_redsys.field_payment_acquirer__redsys_percent_partial
+msgid ""
+"Write percent reduction payment, for this method payment.With this option "
+"you can allow partial payments in your shop online, the residual amount in "
+"pending for do a manual payment later."
+msgstr ""
+"Escriba el porcentaje que se reducirá en el pago para este método de pago. "
+"Con esta opción puede permitir pagos parciales en su tienda online, la "
+"cantidad restante quedará pendiente para realizar un pago manual más tarde."
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,pre_msg:payment_redsys.payment_acquirer_redsys
+msgid ""
+"You will be redirected to the Redsys payment gateway after clicking on the "
+"payment button."
+msgstr ""
+"Después de hacer clic en el botón de pago será redirigido a la pasarela de "
+"pago de Redsys."
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,auth_msg:payment_redsys.payment_acquirer_redsys
+msgid "Your payment has been authorized."
+msgstr "Su pago ha sido autorizado."
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,cancel_msg:payment_redsys.payment_acquirer_redsys
+msgid "Your payment has been cancelled."
+msgstr "Tu pago ha sido cancelado."
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,pending_msg:payment_redsys.payment_acquirer_redsys
+msgid ""
+"Your payment has been successfully processed but is waiting for approval."
+msgstr "Su pago ha sido procesado con éxito pero está esperando su aprobación."
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,done_msg:payment_redsys.payment_acquirer_redsys
+msgid "Your payment has been successfully processed. Thank you!"
+msgstr "Su pago ha sido realizado correctamente. Gracias!"
+
+#~ msgid "Send quotation"
+#~ msgstr "Enviar presupuesto"
+
+#~ msgid "Merchant Titular"
+#~ msgstr "Titular del comerciante"
+
+#~ msgid ""
+#~ "Error, Please be aware that an error occurred during the "
+#~ "transaction. The order has been confirmed but will not be paid. Do not "
+#~ "hesitate to contact us if you have any questions on the status of your "
+#~ "order."
+#~ msgstr ""
+#~ "Error, Tenga en cuenta que se produjo un error durante la "
+#~ "transacción. El pedido ha sido confirmado pero no ha sido pagado. No dude "
+#~ "en contactarnos si tiene alguna pregunta sobre el estado de su pedido."
+#~ "span>"
+
+#~ msgid ""
+#~ "Pending, Your online payment has been successfully "
+#~ "processed. But your order is not validated yet."
+#~ msgstr ""
+#~ "Pendiente, Su pago en línea ha sido procesado con éxito. "
+#~ "Pero tu pedido aún no está validado."
+
+#~ msgid "Manual Configuration"
+#~ msgstr "Configuración manual"
+
+#~ msgid "Wire Transfer"
+#~ msgstr "Transferencia bancaria"
+
+#~ msgid " Order"
+#~ msgstr " Pedido"
+
+#~ msgid "Date:"
+#~ msgstr "Fecha:"
+
+#~ msgid "Discount (%)"
+#~ msgstr "Descuento (%)"
+
+#~ msgid "Invoicing Address"
+#~ msgstr "Dirección de facturación"
+
+#~ msgid "Product"
+#~ msgstr "Producto"
+
+#~ msgid "Quantity"
+#~ msgstr "Cantidad"
+
+#~ msgid "Shipping Address"
+#~ msgstr "Dirección de envío"
+
+#~ msgid "Subtotal"
+#~ msgstr "Sub Total"
+
+#~ msgid "Total:"
+#~ msgstr "Total :"
+
+#~ msgid "Unit Price"
+#~ msgstr "Precio unidad"
+
+#~ msgid "Back to shop"
+#~ msgstr "Volver a la tienda"
+
+#~ msgid ""
+#~ "En error ocurred.
Please contact with us and inform you about your "
+#~ "order."
+#~ msgstr ""
+#~ "Ha ocurrido un error.
Por favor, póngase en contacto con nosotros y "
+#~ "le informarémos sobre su pedido."
+
+#~ msgid "Order"
+#~ msgstr "Pedido"
+
+#~ msgid "Taxes:"
+#~ msgstr "Impuestos:"
+
+#~ msgid "Thanks for you order.
We will inform you of your order status"
+#~ msgstr "Gracias por tu pedido.
Te informaremos del estado de tu pedido"
+
+#~ msgid "The payment of your order has failed"
+#~ msgstr "El pago de su pedido ha fallado"
+
+#~ msgid "Untaxed Amount:"
+#~ msgstr "Importe sin impuestos:"
+
+#~ msgid "Your order has been paid correctly"
+#~ msgstr "Su pedido ha sido pagado correctamente"
+
+#~ msgid "Date:"
+#~ msgstr "Fecha:"
+
+#~ msgid "Discount (%)"
+#~ msgstr "Descuento (%)"
+
+#~ msgid "En error ocurred."
+#~ msgstr "Ha ocurrido un error"
+
+#~ msgid "Merchant URL"
+#~ msgstr "URL del comerciante"
+
+#~ msgid "Product"
+#~ msgstr "Producto"
+
+#~ msgid "Quantity"
+#~ msgstr "Cantidad"
+
+#~ msgid "Redsys TX Details"
+#~ msgstr "Detalles de transmisión Redsys"
+
+#~ msgid "Subtotal"
+#~ msgstr "Subtotal"
+
+#~ msgid "Thanks for you order."
+#~ msgstr "¡Gracias por su pedido!"
+
+#~ msgid "Total:"
+#~ msgstr "Total:"
+
+#~ msgid "Unit Price"
+#~ msgstr "Precio unidad"
diff --git a/payment_redsys/i18n/fr.po b/payment_redsys/i18n/fr.po
new file mode 100644
index 00000000000..3649ee66b91
--- /dev/null
+++ b/payment_redsys/i18n/fr.po
@@ -0,0 +1,347 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_redsys
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: l10n-spain (8.0)\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-11-13 10:45+0000\n"
+"PO-Revision-Date: 2016-11-18 14:15+0000\n"
+"Last-Translator: OCA Transbot \n"
+"Language-Team: French (http://www.transifex.com/oca/OCA-l10n-spain-8-0/"
+"language/fr/)\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__005
+msgid "Alemán"
+msgstr ""
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Bank Error: %s (%s)"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_pay_method__z
+msgid "Bizum"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__001
+msgid "Castellano"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__003
+msgid "Catalán"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_currency
+msgid "Currency"
+msgstr "Devise"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__display_name
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_transaction__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_pay_method__d
+msgid "Domiciliacion"
+msgstr ""
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Error: %s (%s)"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__013
+msgid "Euskera"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__004
+msgid "Francés"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__012
+msgid "Gallego"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_signature_version__hmac_sha256_v1
+msgid "HMAC SHA256 V1"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__006
+msgid "Holandés"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__id
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_transaction__id
+msgid "ID"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__002
+msgid "Inglés"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__007
+msgid "Italiano"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer____last_update
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_transaction____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_lang
+msgid "Merchant Consumer Language"
+msgstr "Merchant consommateurs Langue"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_data
+msgid "Merchant Data"
+msgstr "Data Merchant"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_name
+msgid "Merchant Name"
+msgstr "Nom du commerçant"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_code
+msgid "Merchant code"
+msgstr "Code Merchant"
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Ok: %s"
+msgstr "Ok: %s"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_pay_method__t
+msgid "Pago con Tarjeta"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_pay_method__r
+msgid "Pago por Transferencia"
+msgstr ""
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Partial payment percent must be between 0 and 100"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model,name:payment_redsys.model_payment_acquirer
+msgid "Payment Acquirer"
+msgstr "Paiement acquéreur"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_pay_method
+msgid "Payment Method"
+msgstr "Mode de paiement"
+
+#. module: payment_redsys
+#: model:ir.model,name:payment_redsys.model_payment_transaction
+msgid "Payment Transaction"
+msgstr "Opération de paiement"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__011
+msgid "Polaco"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__009
+msgid "Portugués"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_description
+msgid "Product Description"
+msgstr "Description du produit"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__provider
+msgid "Provider"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__provider__redsys
+#: model:payment.acquirer,name:payment_redsys.payment_acquirer_redsys
+msgid "Redsys"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_signature_version
+#, fuzzy
+msgid "Redsys Signature Version"
+msgstr "La version de la signature Redsys"
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Redsys: feedback error %s (%s)"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_percent_partial
+msgid "Reduction percent"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_secret_key
+msgid "Secret Key"
+msgstr "Clef secréte"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__008
+msgid "Sueco"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_terminal
+msgid "Terminal"
+msgstr "Terminal"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_transaction__redsys_txnid
+msgid "Transaction ID"
+msgstr "Identifiant de transaction"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_transaction_type
+msgid "Transtaction Type"
+msgstr "Type de Transtaction"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__010
+msgid "Valenciano"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,help:payment_redsys.field_payment_acquirer__redsys_percent_partial
+msgid ""
+"Write percent reduction payment, for this method payment.With this option "
+"you can allow partial payments in your shop online, the residual amount in "
+"pending for do a manual payment later."
+msgstr ""
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,pre_msg:payment_redsys.payment_acquirer_redsys
+msgid ""
+"You will be redirected to the Redsys payment gateway after clicking on the "
+"payment button."
+msgstr ""
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,auth_msg:payment_redsys.payment_acquirer_redsys
+msgid "Your payment has been authorized."
+msgstr ""
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,cancel_msg:payment_redsys.payment_acquirer_redsys
+#, fuzzy
+msgid "Your payment has been cancelled."
+msgstr "Votre commande a été payée correctement"
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,pending_msg:payment_redsys.payment_acquirer_redsys
+msgid ""
+"Your payment has been successfully processed but is waiting for approval."
+msgstr ""
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,done_msg:payment_redsys.payment_acquirer_redsys
+msgid "Your payment has been successfully processed. Thank you!"
+msgstr ""
+
+#~ msgid "Send quotation"
+#~ msgstr "Envoyer cotation"
+
+#~ msgid "Merchant Titular"
+#~ msgstr "Merchant titulaire"
+
+#, fuzzy
+#~ msgid "Invoicing Address"
+#~ msgstr "Adresse de facturation"
+
+#, fuzzy
+#~ msgid "Shipping Address"
+#~ msgstr "Adresse de livraison"
+
+#~ msgid "Back to shop"
+#~ msgstr "Retour à la boutique"
+
+#, fuzzy
+#~ msgid ""
+#~ "En error ocurred.
Please contact with us and inform you about your "
+#~ "order."
+#~ msgstr "S'il vous plaît nous contacter et vous informer sur votre commande."
+
+#~ msgid "Order"
+#~ msgstr "Commande"
+
+#~ msgid "Taxes:"
+#~ msgstr "impôts:"
+
+#, fuzzy
+#~ msgid "Thanks for you order.
We will inform you of your order status"
+#~ msgstr "Nous allons vous informer de votre statut de la commande"
+
+#~ msgid "The payment of your order has failed"
+#~ msgstr "Le paiement de votre commande a échoué"
+
+#~ msgid "Untaxed Amount:"
+#~ msgstr "Montant non taxé:"
+
+#~ msgid "En error ocurred."
+#~ msgstr "En ocurred erreur."
+
+#~ msgid "Merchant URL"
+#~ msgstr "Merchant URL"
+
+#~ msgid "Product"
+#~ msgstr "Produit"
+
+#~ msgid "Quantity"
+#~ msgstr "Quantité"
+
+#~ msgid "Redsys TX Details"
+#~ msgstr "Redsys TX Détails"
+
+#~ msgid "Subtotal"
+#~ msgstr "Subtotal"
+
+#~ msgid "Thanks for you order."
+#~ msgstr "Merci pour votre commande."
+
+#~ msgid "Total:"
+#~ msgstr "Total:"
+
+#~ msgid "Unit Price"
+#~ msgstr "Prix unitaire"
diff --git a/payment_redsys/i18n/gl.po b/payment_redsys/i18n/gl.po
new file mode 100644
index 00000000000..e2413344930
--- /dev/null
+++ b/payment_redsys/i18n/gl.po
@@ -0,0 +1,289 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_redsys
+#
+# Translators:
+# Alejandro Santana , 2015
+msgid ""
+msgstr ""
+"Project-Id-Version: l10n-spain (8.0)\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-08-26 16:03+0000\n"
+"PO-Revision-Date: 2016-08-21 12:03+0000\n"
+"Last-Translator: OCA Transbot \n"
+"Language-Team: Galician (http://www.transifex.com/oca/OCA-l10n-spain-8-0/"
+"language/gl/)\n"
+"Language: gl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__005
+msgid "Alemán"
+msgstr ""
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Bank Error: %s (%s)"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_pay_method__z
+msgid "Bizum"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__001
+msgid "Castellano"
+msgstr "Castelán"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__003
+msgid "Catalán"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_currency
+msgid "Currency"
+msgstr "Moeda"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__display_name
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_transaction__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_pay_method__d
+msgid "Domiciliacion"
+msgstr "Domiciliación"
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Error: %s (%s)"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__013
+msgid "Euskera"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__004
+msgid "Francés"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__012
+msgid "Gallego"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_signature_version__hmac_sha256_v1
+msgid "HMAC SHA256 V1"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__006
+msgid "Holandés"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__id
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_transaction__id
+msgid "ID"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__002
+msgid "Inglés"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__007
+msgid "Italiano"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer____last_update
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_transaction____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_lang
+msgid "Merchant Consumer Language"
+msgstr "Linguaxe do comerciante"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_data
+msgid "Merchant Data"
+msgstr "Datos do comerciante"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_name
+msgid "Merchant Name"
+msgstr "Nome do comerciante"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_code
+msgid "Merchant code"
+msgstr "Código do comerciante"
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Ok: %s"
+msgstr "OK: %s"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_pay_method__t
+msgid "Pago con Tarjeta"
+msgstr "Pagamento con tarxeta"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_pay_method__r
+msgid "Pago por Transferencia"
+msgstr "Pagamento por transferencia"
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Partial payment percent must be between 0 and 100"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model,name:payment_redsys.model_payment_acquirer
+msgid "Payment Acquirer"
+msgstr "Medio de pagamento"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_pay_method
+msgid "Payment Method"
+msgstr "Método de pagamento"
+
+#. module: payment_redsys
+#: model:ir.model,name:payment_redsys.model_payment_transaction
+msgid "Payment Transaction"
+msgstr "Transación de pagamento"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__011
+msgid "Polaco"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__009
+msgid "Portugués"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_description
+msgid "Product Description"
+msgstr "Descrición do produto"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__provider
+msgid "Provider"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__provider__redsys
+#: model:payment.acquirer,name:payment_redsys.payment_acquirer_redsys
+msgid "Redsys"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_signature_version
+msgid "Redsys Signature Version"
+msgstr ""
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Redsys: feedback error %s (%s)"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_percent_partial
+msgid "Reduction percent"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_secret_key
+msgid "Secret Key"
+msgstr "Chave secreta"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__008
+msgid "Sueco"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_terminal
+msgid "Terminal"
+msgstr "Terminal"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_transaction__redsys_txnid
+msgid "Transaction ID"
+msgstr "ID da transacción"
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_transaction_type
+msgid "Transtaction Type"
+msgstr "Tipo de transacción"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__010
+msgid "Valenciano"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,help:payment_redsys.field_payment_acquirer__redsys_percent_partial
+msgid ""
+"Write percent reduction payment, for this method payment.With this option "
+"you can allow partial payments in your shop online, the residual amount in "
+"pending for do a manual payment later."
+msgstr ""
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,pre_msg:payment_redsys.payment_acquirer_redsys
+msgid ""
+"You will be redirected to the Redsys payment gateway after clicking on the "
+"payment button."
+msgstr ""
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,auth_msg:payment_redsys.payment_acquirer_redsys
+msgid "Your payment has been authorized."
+msgstr ""
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,cancel_msg:payment_redsys.payment_acquirer_redsys
+msgid "Your payment has been cancelled."
+msgstr ""
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,pending_msg:payment_redsys.payment_acquirer_redsys
+msgid ""
+"Your payment has been successfully processed but is waiting for approval."
+msgstr ""
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,done_msg:payment_redsys.payment_acquirer_redsys
+msgid "Your payment has been successfully processed. Thank you!"
+msgstr ""
+
+#~ msgid "Merchant Titular"
+#~ msgstr "Comerciante titular"
+
+#~ msgid "Merchant URL"
+#~ msgstr "URL do comerciante"
+
+#~ msgid "Redsys TX Details"
+#~ msgstr "Detalles Redsys TX"
diff --git a/payment_redsys/i18n/hr.po b/payment_redsys/i18n/hr.po
new file mode 100644
index 00000000000..8e070db2cd2
--- /dev/null
+++ b/payment_redsys/i18n/hr.po
@@ -0,0 +1,283 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_redsys
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: l10n-spain (8.0)\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-09-17 19:27+0000\n"
+"PO-Revision-Date: 2016-10-05 06:35+0000\n"
+"Last-Translator: OCA Transbot \n"
+"Language-Team: Croatian (http://www.transifex.com/oca/OCA-l10n-spain-8-0/"
+"language/hr/)\n"
+"Language: hr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__005
+msgid "Alemán"
+msgstr ""
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Bank Error: %s (%s)"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_pay_method__z
+msgid "Bizum"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__001
+msgid "Castellano"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__003
+msgid "Catalán"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_currency
+msgid "Currency"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__display_name
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_transaction__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_pay_method__d
+msgid "Domiciliacion"
+msgstr ""
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Error: %s (%s)"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__013
+msgid "Euskera"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__004
+msgid "Francés"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__012
+msgid "Gallego"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_signature_version__hmac_sha256_v1
+msgid "HMAC SHA256 V1"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__006
+msgid "Holandés"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__id
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_transaction__id
+msgid "ID"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__002
+msgid "Inglés"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__007
+msgid "Italiano"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer____last_update
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_transaction____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_lang
+msgid "Merchant Consumer Language"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_data
+msgid "Merchant Data"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_name
+msgid "Merchant Name"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_code
+msgid "Merchant code"
+msgstr ""
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Ok: %s"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_pay_method__t
+msgid "Pago con Tarjeta"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_pay_method__r
+msgid "Pago por Transferencia"
+msgstr ""
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Partial payment percent must be between 0 and 100"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model,name:payment_redsys.model_payment_acquirer
+msgid "Payment Acquirer"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_pay_method
+msgid "Payment Method"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model,name:payment_redsys.model_payment_transaction
+msgid "Payment Transaction"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__011
+msgid "Polaco"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__009
+msgid "Portugués"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_description
+msgid "Product Description"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__provider
+msgid "Provider"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__provider__redsys
+#: model:payment.acquirer,name:payment_redsys.payment_acquirer_redsys
+msgid "Redsys"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_signature_version
+msgid "Redsys Signature Version"
+msgstr ""
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Redsys: feedback error %s (%s)"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_percent_partial
+msgid "Reduction percent"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_secret_key
+msgid "Secret Key"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__008
+msgid "Sueco"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_terminal
+msgid "Terminal"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_transaction__redsys_txnid
+msgid "Transaction ID"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_transaction_type
+msgid "Transtaction Type"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__010
+msgid "Valenciano"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,help:payment_redsys.field_payment_acquirer__redsys_percent_partial
+msgid ""
+"Write percent reduction payment, for this method payment.With this option "
+"you can allow partial payments in your shop online, the residual amount in "
+"pending for do a manual payment later."
+msgstr ""
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,pre_msg:payment_redsys.payment_acquirer_redsys
+msgid ""
+"You will be redirected to the Redsys payment gateway after clicking on the "
+"payment button."
+msgstr ""
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,auth_msg:payment_redsys.payment_acquirer_redsys
+msgid "Your payment has been authorized."
+msgstr ""
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,cancel_msg:payment_redsys.payment_acquirer_redsys
+msgid "Your payment has been cancelled."
+msgstr ""
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,pending_msg:payment_redsys.payment_acquirer_redsys
+msgid ""
+"Your payment has been successfully processed but is waiting for approval."
+msgstr ""
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,done_msg:payment_redsys.payment_acquirer_redsys
+msgid "Your payment has been successfully processed. Thank you!"
+msgstr ""
+
+#~ msgid "Product"
+#~ msgstr "Proizvod"
diff --git a/payment_redsys/i18n/payment_redsys.pot b/payment_redsys/i18n/payment_redsys.pot
new file mode 100644
index 00000000000..43c2e2bdebf
--- /dev/null
+++ b/payment_redsys/i18n/payment_redsys.pot
@@ -0,0 +1,274 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_redsys
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__005
+msgid "Alemán"
+msgstr ""
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Bank Error: %s (%s)"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_pay_method__z
+msgid "Bizum"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__001
+msgid "Castellano"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__003
+msgid "Catalán"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_currency
+msgid "Currency"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__display_name
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_transaction__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_pay_method__d
+msgid "Domiciliacion"
+msgstr ""
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Error: %s (%s)"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__013
+msgid "Euskera"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__004
+msgid "Francés"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__012
+msgid "Gallego"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_signature_version__hmac_sha256_v1
+msgid "HMAC SHA256 V1"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__006
+msgid "Holandés"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__id
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_transaction__id
+msgid "ID"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__002
+msgid "Inglés"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__007
+msgid "Italiano"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer____last_update
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_transaction____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_lang
+msgid "Merchant Consumer Language"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_data
+msgid "Merchant Data"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_name
+msgid "Merchant Name"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_code
+msgid "Merchant code"
+msgstr ""
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Ok: %s"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_pay_method__t
+msgid "Pago con Tarjeta"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_pay_method__r
+msgid "Pago por Transferencia"
+msgstr ""
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Partial payment percent must be between 0 and 100"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model,name:payment_redsys.model_payment_acquirer
+msgid "Payment Acquirer"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_pay_method
+msgid "Payment Method"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model,name:payment_redsys.model_payment_transaction
+msgid "Payment Transaction"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__011
+msgid "Polaco"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__009
+msgid "Portugués"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_description
+msgid "Product Description"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__provider
+msgid "Provider"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__provider__redsys
+#: model:payment.acquirer,name:payment_redsys.payment_acquirer_redsys
+msgid "Redsys"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_signature_version
+msgid "Redsys Signature Version"
+msgstr ""
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Redsys: feedback error %s (%s)"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_percent_partial
+msgid "Reduction percent"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_secret_key
+msgid "Secret Key"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__008
+msgid "Sueco"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_terminal
+msgid "Terminal"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_transaction__redsys_txnid
+msgid "Transaction ID"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_transaction_type
+msgid "Transtaction Type"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__010
+msgid "Valenciano"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,help:payment_redsys.field_payment_acquirer__redsys_percent_partial
+msgid ""
+"Write percent reduction payment, for this method payment.With this option "
+"you can allow partial payments in your shop online, the residual amount in "
+"pending for do a manual payment later."
+msgstr ""
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,pre_msg:payment_redsys.payment_acquirer_redsys
+msgid ""
+"You will be redirected to the Redsys payment gateway after clicking on the "
+"payment button."
+msgstr ""
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,auth_msg:payment_redsys.payment_acquirer_redsys
+msgid "Your payment has been authorized."
+msgstr ""
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,cancel_msg:payment_redsys.payment_acquirer_redsys
+msgid "Your payment has been cancelled."
+msgstr ""
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,pending_msg:payment_redsys.payment_acquirer_redsys
+msgid ""
+"Your payment has been successfully processed but is waiting for approval."
+msgstr ""
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,done_msg:payment_redsys.payment_acquirer_redsys
+msgid "Your payment has been successfully processed. Thank you!"
+msgstr ""
diff --git a/payment_redsys/i18n/pt_BR.po b/payment_redsys/i18n/pt_BR.po
new file mode 100644
index 00000000000..1fef352b9b7
--- /dev/null
+++ b/payment_redsys/i18n/pt_BR.po
@@ -0,0 +1,291 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_redsys
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: l10n-spain (8.0)\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-11-13 10:45+0000\n"
+"PO-Revision-Date: 2016-10-14 10:32+0000\n"
+"Last-Translator: OCA Transbot \n"
+"Language-Team: Portuguese (Brazil) (http://www.transifex.com/oca/OCA-l10n-"
+"spain-8-0/language/pt_BR/)\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__005
+msgid "Alemán"
+msgstr ""
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Bank Error: %s (%s)"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_pay_method__z
+msgid "Bizum"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__001
+msgid "Castellano"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__003
+msgid "Catalán"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_currency
+msgid "Currency"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__display_name
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_transaction__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_pay_method__d
+msgid "Domiciliacion"
+msgstr ""
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Error: %s (%s)"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__013
+msgid "Euskera"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__004
+msgid "Francés"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__012
+msgid "Gallego"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_signature_version__hmac_sha256_v1
+msgid "HMAC SHA256 V1"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__006
+msgid "Holandés"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__id
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_transaction__id
+msgid "ID"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__002
+msgid "Inglés"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__007
+msgid "Italiano"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer____last_update
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_transaction____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_lang
+msgid "Merchant Consumer Language"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_data
+msgid "Merchant Data"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_name
+msgid "Merchant Name"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_code
+msgid "Merchant code"
+msgstr ""
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Ok: %s"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_pay_method__t
+msgid "Pago con Tarjeta"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_pay_method__r
+msgid "Pago por Transferencia"
+msgstr ""
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Partial payment percent must be between 0 and 100"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model,name:payment_redsys.model_payment_acquirer
+msgid "Payment Acquirer"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_pay_method
+msgid "Payment Method"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model,name:payment_redsys.model_payment_transaction
+msgid "Payment Transaction"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__011
+msgid "Polaco"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__009
+msgid "Portugués"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_description
+msgid "Product Description"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__provider
+msgid "Provider"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__provider__redsys
+#: model:payment.acquirer,name:payment_redsys.payment_acquirer_redsys
+msgid "Redsys"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_signature_version
+msgid "Redsys Signature Version"
+msgstr ""
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Redsys: feedback error %s (%s)"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_percent_partial
+msgid "Reduction percent"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_secret_key
+msgid "Secret Key"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__008
+msgid "Sueco"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_terminal
+msgid "Terminal"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_transaction__redsys_txnid
+msgid "Transaction ID"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_transaction_type
+msgid "Transtaction Type"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__010
+msgid "Valenciano"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,help:payment_redsys.field_payment_acquirer__redsys_percent_partial
+msgid ""
+"Write percent reduction payment, for this method payment.With this option "
+"you can allow partial payments in your shop online, the residual amount in "
+"pending for do a manual payment later."
+msgstr ""
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,pre_msg:payment_redsys.payment_acquirer_redsys
+msgid ""
+"You will be redirected to the Redsys payment gateway after clicking on the "
+"payment button."
+msgstr ""
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,auth_msg:payment_redsys.payment_acquirer_redsys
+msgid "Your payment has been authorized."
+msgstr ""
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,cancel_msg:payment_redsys.payment_acquirer_redsys
+msgid "Your payment has been cancelled."
+msgstr ""
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,pending_msg:payment_redsys.payment_acquirer_redsys
+msgid ""
+"Your payment has been successfully processed but is waiting for approval."
+msgstr ""
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,done_msg:payment_redsys.payment_acquirer_redsys
+msgid "Your payment has been successfully processed. Thank you!"
+msgstr ""
+
+#~ msgid "Order"
+#~ msgstr "Pedido"
+
+#~ msgid "Taxes:"
+#~ msgstr "Impostos:"
+
+#~ msgid "Untaxed Amount:"
+#~ msgstr "Total sem impostos:"
+
+#~ msgid "Product"
+#~ msgstr "Produto"
diff --git a/payment_redsys/i18n/sl.po b/payment_redsys/i18n/sl.po
new file mode 100644
index 00000000000..e42e929b281
--- /dev/null
+++ b/payment_redsys/i18n/sl.po
@@ -0,0 +1,292 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_redsys
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: l10n-spain (8.0)\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-08-27 18:55+0000\n"
+"PO-Revision-Date: 2016-09-09 11:33+0000\n"
+"Last-Translator: OCA Transbot \n"
+"Language-Team: Slovenian (http://www.transifex.com/oca/OCA-l10n-spain-8-0/"
+"language/sl/)\n"
+"Language: sl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n"
+"%100==4 ? 2 : 3);\n"
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__005
+msgid "Alemán"
+msgstr ""
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Bank Error: %s (%s)"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_pay_method__z
+msgid "Bizum"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__001
+msgid "Castellano"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__003
+msgid "Catalán"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_currency
+msgid "Currency"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__display_name
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_transaction__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_pay_method__d
+msgid "Domiciliacion"
+msgstr ""
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Error: %s (%s)"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__013
+msgid "Euskera"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__004
+msgid "Francés"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__012
+msgid "Gallego"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_signature_version__hmac_sha256_v1
+msgid "HMAC SHA256 V1"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__006
+msgid "Holandés"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__id
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_transaction__id
+msgid "ID"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__002
+msgid "Inglés"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__007
+msgid "Italiano"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer____last_update
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_transaction____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_lang
+msgid "Merchant Consumer Language"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_data
+msgid "Merchant Data"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_name
+msgid "Merchant Name"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_code
+msgid "Merchant code"
+msgstr ""
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Ok: %s"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_pay_method__t
+msgid "Pago con Tarjeta"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_pay_method__r
+msgid "Pago por Transferencia"
+msgstr ""
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Partial payment percent must be between 0 and 100"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model,name:payment_redsys.model_payment_acquirer
+msgid "Payment Acquirer"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_pay_method
+msgid "Payment Method"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model,name:payment_redsys.model_payment_transaction
+msgid "Payment Transaction"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__011
+msgid "Polaco"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__009
+msgid "Portugués"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_merchant_description
+msgid "Product Description"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__provider
+msgid "Provider"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__provider__redsys
+#: model:payment.acquirer,name:payment_redsys.payment_acquirer_redsys
+msgid "Redsys"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_signature_version
+msgid "Redsys Signature Version"
+msgstr ""
+
+#. module: payment_redsys
+#: code:addons/payment_redsys/models/redsys.py:0
+#, python-format
+msgid "Redsys: feedback error %s (%s)"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_percent_partial
+msgid "Reduction percent"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_secret_key
+msgid "Secret Key"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__008
+msgid "Sueco"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_terminal
+msgid "Terminal"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_transaction__redsys_txnid
+msgid "Transaction ID"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,field_description:payment_redsys.field_payment_acquirer__redsys_transaction_type
+msgid "Transtaction Type"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields.selection,name:payment_redsys.selection__payment_acquirer__redsys_merchant_lang__010
+msgid "Valenciano"
+msgstr ""
+
+#. module: payment_redsys
+#: model:ir.model.fields,help:payment_redsys.field_payment_acquirer__redsys_percent_partial
+msgid ""
+"Write percent reduction payment, for this method payment.With this option "
+"you can allow partial payments in your shop online, the residual amount in "
+"pending for do a manual payment later."
+msgstr ""
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,pre_msg:payment_redsys.payment_acquirer_redsys
+msgid ""
+"You will be redirected to the Redsys payment gateway after clicking on the "
+"payment button."
+msgstr ""
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,auth_msg:payment_redsys.payment_acquirer_redsys
+msgid "Your payment has been authorized."
+msgstr ""
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,cancel_msg:payment_redsys.payment_acquirer_redsys
+msgid "Your payment has been cancelled."
+msgstr ""
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,pending_msg:payment_redsys.payment_acquirer_redsys
+msgid ""
+"Your payment has been successfully processed but is waiting for approval."
+msgstr ""
+
+#. module: payment_redsys
+#: model_terms:payment.acquirer,done_msg:payment_redsys.payment_acquirer_redsys
+msgid "Your payment has been successfully processed. Thank you!"
+msgstr ""
+
+#~ msgid "Order"
+#~ msgstr "Nalog"
+
+#~ msgid "Taxes:"
+#~ msgstr "Davki:"
+
+#~ msgid "Untaxed Amount:"
+#~ msgstr "Neobdavčeni znesek"
+
+#~ msgid "Product"
+#~ msgstr "Proizvod"
diff --git a/payment_redsys/models/__init__.py b/payment_redsys/models/__init__.py
new file mode 100644
index 00000000000..e8b59de0eac
--- /dev/null
+++ b/payment_redsys/models/__init__.py
@@ -0,0 +1,3 @@
+from . import account_payment_method
+from . import payment_acquirer
+from . import payment_transaction
diff --git a/payment_redsys/models/account_payment_method.py b/payment_redsys/models/account_payment_method.py
new file mode 100644
index 00000000000..5548145c5f9
--- /dev/null
+++ b/payment_redsys/models/account_payment_method.py
@@ -0,0 +1,14 @@
+# Copyright 2023 Planesnet - Luis Planes, Laia Espinosa, Raul Solana
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+from odoo import api, models
+
+
+class AccountPaymentMethod(models.Model):
+ _inherit = "account.payment.method"
+
+ @api.model
+ def _get_payment_method_information(self):
+ res = super()._get_payment_method_information()
+ res["redsys"] = {"mode": "multi", "domain": [("type", "=", "bank")]}
+ return res
diff --git a/payment_redsys/models/payment_acquirer.py b/payment_redsys/models/payment_acquirer.py
new file mode 100644
index 00000000000..9c3ca2a066d
--- /dev/null
+++ b/payment_redsys/models/payment_acquirer.py
@@ -0,0 +1,201 @@
+# Copyright 2016-2017 Tecnativa - Sergio Teruel
+# Copyright 2019 Ignacio Ibeas
+# Copyright 2020 Tecnativa - João Marques
+# Copyright 2023 Planesnet - Luis Planes, Laia Espinosa, Raul Solana
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+import base64
+import hashlib
+import hmac
+import json
+import logging
+import urllib
+
+from Crypto.Cipher import DES3 # pylint: disable=W7936 - No real warning
+from werkzeug import urls
+
+from odoo import api, fields, http, models
+from odoo.tools import config
+
+_logger = logging.getLogger(__name__)
+
+
+class AcquirerRedsys(models.Model):
+ _inherit = "payment.acquirer"
+
+ def _redsys_get_api_url(self):
+ if self.state == "enabled":
+ return "https://sis.redsys.es/sis/realizarPago/"
+ else: # test environment
+ return "https://sis-t.redsys.es:25443/sis/realizarPago/"
+
+ provider = fields.Selection(
+ selection_add=[("redsys", "Redsys")], ondelete={"redsys": "set default"}
+ )
+ redsys_merchant_name = fields.Char("Merchant Name", required_if_provider="redsys")
+ redsys_merchant_code = fields.Char("Merchant code", required_if_provider="redsys")
+ redsys_merchant_description = fields.Char(
+ "Product Description", required_if_provider="redsys"
+ )
+ redsys_secret_key = fields.Char("Secret Key", required_if_provider="redsys")
+ redsys_terminal = fields.Char(
+ "Terminal", default="1", required_if_provider="redsys"
+ )
+ redsys_currency = fields.Char(
+ "Currency", default="978", required_if_provider="redsys"
+ )
+ redsys_transaction_type = fields.Char(
+ "Transtaction Type", default="0", required_if_provider="redsys"
+ )
+ redsys_merchant_data = fields.Char("Merchant Data")
+ redsys_merchant_lang = fields.Selection(
+ [
+ ("001", "Castellano"),
+ ("002", "Inglés"),
+ ("003", "Catalán"),
+ ("004", "Francés"),
+ ("005", "Alemán"),
+ ("006", "Holandés"),
+ ("007", "Italiano"),
+ ("008", "Sueco"),
+ ("009", "Portugués"),
+ ("010", "Valenciano"),
+ ("011", "Polaco"),
+ ("012", "Gallego"),
+ ("013", "Euskera"),
+ ],
+ "Merchant Consumer Language",
+ default="001",
+ )
+ redsys_pay_method = fields.Selection(
+ [
+ ("T", "Pago con Tarjeta"),
+ ("R", "Pago por Transferencia"),
+ ("D", "Domiciliacion"),
+ ("z", "Bizum"),
+ ],
+ "Payment Method",
+ default="T",
+ )
+ redsys_signature_version = fields.Selection(
+ [("HMAC_SHA256_V1", "HMAC SHA256 V1")], default="HMAC_SHA256_V1"
+ )
+
+ @api.model
+ def _get_website_callback_url(self):
+ """For force a callback url from Redsys distinct to base url website,
+ only apply to a Redsys response.
+ """
+ get_param = self.env["ir.config_parameter"].sudo().get_param
+ return get_param("payment_redsys.callback_url")
+
+ @api.model
+ def _get_website_url(self):
+ """
+ For a single website setting the domain website name is not accesible
+ for the user, by default is localhost so the system get domain from
+ system parameters instead of domain of website record.
+ """
+ if config["test_enable"]:
+ return self.env["ir.config_parameter"].sudo().get_param("web.base.url")
+ # For a JSON request, there's no `website` attribute. Fallback to context if any
+ website = (
+ hasattr(http.request, "website")
+ and http.request.website
+ or self.env.context.get("website_id")
+ and self.env["website"].browse(self.env.context["website_id"])
+ )
+ domain = website and website.domain or ""
+ if domain and domain != "localhost":
+ # Check domain scheme as Odoo does in `website._get_http_domain()`
+ parsed_url = urls.url_parse(domain)
+ base_url = (
+ "{}://{}".format(
+ http.request.httprequest.environ["wsgi.url_scheme"], domain
+ )
+ if not parsed_url.scheme
+ else domain
+ )
+ else:
+ base_url = self.env["ir.config_parameter"].sudo().get_param("web.base.url")
+ return base_url or ""
+
+ def _prepare_merchant_parameters(self, tx_values):
+ # Check multi-website
+ base_url = self._get_website_url()
+ callback_url = self._get_website_callback_url()
+ values = {
+ "Ds_Sermepa_Url": self.redsys_get_form_action_url(),
+ "Ds_Merchant_Amount": str(int(round(tx_values["amount"] * 100))),
+ "Ds_Merchant_Currency": self.redsys_currency or "978",
+ "Ds_Merchant_Order": (
+ tx_values["reference"] and tx_values["reference"][-12:] or False
+ ),
+ "Ds_Merchant_MerchantCode": (
+ self.redsys_merchant_code and self.redsys_merchant_code[:9]
+ ),
+ "Ds_Merchant_Terminal": self.redsys_terminal or "1",
+ "Ds_Merchant_TransactionType": (self.redsys_transaction_type or "0"),
+ "Ds_Merchant_Titular": tx_values.get(
+ "billing_partner", self.env.user.partner_id
+ ).display_name[:60],
+ "Ds_Merchant_MerchantName": (
+ self.redsys_merchant_name and self.redsys_merchant_name[:25]
+ ),
+ "Ds_Merchant_MerchantUrl": (
+ "%s/payment/redsys/return" % (callback_url or base_url)
+ )[:250],
+ "Ds_Merchant_MerchantData": self.redsys_merchant_data or "",
+ "Ds_Merchant_ProductDescription": (
+ self._product_description(tx_values["reference"])
+ or self.redsys_merchant_description
+ and self.redsys_merchant_description[:125]
+ ),
+ "Ds_Merchant_ConsumerLanguage": (self.redsys_merchant_lang or "001"),
+ "Ds_Merchant_UrlOk": "%s/payment/redsys/result/redsys_result_ok" % base_url,
+ "Ds_Merchant_UrlKo": "%s/payment/redsys/result/redsys_result_ko" % base_url,
+ "Ds_Merchant_Paymethods": self.redsys_pay_method or "T",
+ }
+ return self._url_encode64(json.dumps(values)).decode("utf-8")
+
+ def _url_encode64(self, data):
+ data = base64.b64encode(data.encode())
+ return data
+
+ def _url_decode64(self, data):
+ return json.loads(base64.b64decode(data).decode())
+
+ def sign_parameters(self, secret_key, params64):
+ params_dic = self._url_decode64(params64)
+ if "Ds_Merchant_Order" in params_dic:
+ order = str(params_dic["Ds_Merchant_Order"])
+ else:
+ order = str(urllib.parse.unquote(params_dic.get("Ds_Order", "Not found")))
+ cipher = DES3.new(
+ key=base64.b64decode(secret_key), mode=DES3.MODE_CBC, IV=b"\0\0\0\0\0\0\0\0"
+ )
+ diff_block = len(order) % 8
+ zeros = diff_block and (b"\0" * (8 - diff_block)) or b""
+ key = cipher.encrypt(str.encode(order + zeros.decode()))
+ if isinstance(params64, str):
+ params64 = params64.encode()
+ dig = hmac.new(key=key, msg=params64, digestmod=hashlib.sha256).digest()
+ return base64.b64encode(dig).decode()
+
+ def redsys_get_form_action_url(self):
+ self.ensure_one()
+ return self._redsys_get_api_url()
+
+ def _product_description(self, order_ref):
+ sale_order = self.env["sale.order"].search([("name", "=", order_ref)])
+ res = ""
+ if sale_order:
+ description = "|".join(x.name for x in sale_order.order_line)
+ res = description[:125]
+ return res
+
+ def _get_default_payment_method_id(self):
+ self.ensure_one()
+ if self.provider != "redsys":
+ return super()._get_default_payment_method_id()
+ return self.env.ref("payment_redsys.payment_method_redsys").id
diff --git a/payment_redsys/models/payment_transaction.py b/payment_redsys/models/payment_transaction.py
new file mode 100644
index 00000000000..83cc792c67f
--- /dev/null
+++ b/payment_redsys/models/payment_transaction.py
@@ -0,0 +1,153 @@
+# Copyright 2016-2017 Tecnativa - Sergio Teruel
+# Copyright 2019 Ignacio Ibeas
+# Copyright 2020 Tecnativa - João Marques
+# Copyright 2023 Planesnet - Luis Planes, Laia Espinosa, Raul Solana
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+import base64
+import json
+import logging
+import urllib
+
+from odoo import _, api, fields, http, models
+from odoo.tools import config
+
+from odoo.addons.payment.models.payment_acquirer import ValidationError
+
+_logger = logging.getLogger(__name__)
+
+
+class TxRedsys(models.Model):
+ _inherit = "payment.transaction"
+
+ redsys_txnid = fields.Char("Transaction ID")
+
+ def merchant_params_json2dict(self, data):
+ parameters = data.get("Ds_MerchantParameters", "")
+ return json.loads(base64.b64decode(parameters).decode())
+
+ # --------------------------------------------------
+ # FORM RELATED METHODS
+ # --------------------------------------------------
+
+ @api.model
+ def _get_tx_from_feedback_data(self, provider, data):
+ """Given a data dict coming from redsys, verify it and
+ find the related transaction record."""
+ tx = super()._get_tx_from_feedback_data(provider, data)
+ if provider != "redsys":
+ return tx
+
+ parameters = data.get("Ds_MerchantParameters", "")
+ parameters_dic = json.loads(base64.b64decode(parameters).decode())
+ reference = urllib.parse.unquote(parameters_dic.get("Ds_Order", ""))
+ pay_id = parameters_dic.get("Ds_AuthorisationCode")
+ shasign = data.get("Ds_Signature", "").replace("_", "/").replace("-", "+")
+ test_env = config["test_enable"]
+ if not reference or not pay_id or not shasign:
+ error_msg = (
+ "Redsys: received data with missing reference"
+ " (%s) or pay_id (%s) or shashign (%s)" % (reference, pay_id, shasign)
+ )
+ if not test_env:
+ _logger.info(error_msg)
+ raise ValidationError(error_msg)
+ # For tests
+ http.OpenERPSession.tx_error = True
+ tx = self.search([("reference", "=", reference)])
+ if not tx or len(tx) > 1:
+ error_msg = "Redsys: received data for reference %s" % (reference)
+ if not tx:
+ error_msg += "; no order found"
+ else:
+ error_msg += "; multiple order found"
+ _logger.info(error_msg)
+ raise ValidationError(error_msg)
+ if tx and not test_env:
+ # verify shasign
+ shasign_check = tx.acquirer_id.sign_parameters(
+ tx.acquirer_id.redsys_secret_key, parameters
+ )
+ if shasign_check != shasign:
+ error_msg = (
+ "Redsys: invalid shasign, received %s, computed %s, "
+ "for data %s" % (shasign, shasign_check, data)
+ )
+ _logger.info(error_msg)
+ raise ValidationError(error_msg)
+ return tx
+
+ @api.model
+ def _get_redsys_state(self, status_code):
+ if 0 <= status_code <= 100:
+ return "done"
+ elif status_code <= 203:
+ return "pending"
+ elif 912 <= status_code <= 9912:
+ return "cancel"
+ else:
+ return "error"
+
+ def _process_feedback_data(self, data):
+ super()._process_feedback_data(data)
+ if self.provider != "redsys":
+ return
+
+ params = self.merchant_params_json2dict(data)
+ status_code = int(params.get("Ds_Response", "29999"))
+ state = self._get_redsys_state(status_code)
+
+ vals = {
+ "state": state,
+ "redsys_txnid": params.get("Ds_AuthorisationCode"),
+ "create_date": fields.Datetime.now(),
+ }
+
+ state_message = ""
+ feedback_error = False
+ if state == "done":
+ vals["state_message"] = _("Ok: %s") % params.get("Ds_Response")
+ self._set_done()
+ self._finalize_post_processing()
+ elif state == "pending": # 'Payment error: code: %s.'
+ state_message = _("Error: %(status_code)s (%(error_code)s)")
+ self._set_pending()
+ elif state == "cancel": # 'Payment error: bank unavailable.'
+ state_message = _("Bank Error: %(status_code)s (%(error_code)s)")
+ self._set_canceled()
+ else:
+ state_message = _(
+ "Redsys: feedback error: %(status_code)s (%(error_code)s)"
+ )
+ self._set_error(state_message)
+ feedback_error = True
+ if state_message:
+ vals["state_message"] = state_message % {
+ "status_code": params.get("Ds_Response"),
+ "error_code": params.get("Ds_ErrorCode"),
+ }
+ if state == "error":
+ _logger.warning(vals["state_message"])
+ if feedback_error:
+ self._set_error(state_message)
+ self.write(vals)
+
+ def _get_specific_rendering_values(self, processing_values):
+ res = super()._get_specific_rendering_values(processing_values)
+ if self.acquirer_id.provider != "redsys":
+ return res
+ redsys_values = dict(processing_values)
+ merchant_parameters = self.acquirer_id._prepare_merchant_parameters(
+ processing_values
+ )
+ redsys_values.update(
+ {
+ "api_url": self.acquirer_id._redsys_get_api_url(),
+ "Ds_SignatureVersion": str(self.acquirer_id.redsys_signature_version),
+ "Ds_MerchantParameters": merchant_parameters,
+ "Ds_Signature": self.acquirer_id.sign_parameters(
+ self.acquirer_id.redsys_secret_key, merchant_parameters
+ ),
+ }
+ )
+ return redsys_values
diff --git a/payment_redsys/readme/CONFIGURE.rst b/payment_redsys/readme/CONFIGURE.rst
new file mode 100644
index 00000000000..18d91cfbbaa
--- /dev/null
+++ b/payment_redsys/readme/CONFIGURE.rst
@@ -0,0 +1,46 @@
+Parámetros
+~~~~~~~~~~
+
+* **Nombre del comercio**: Indicaremos el nombre del comercio.
+
+* **Número de comercio (FUC)**: Indicaremos el número de comercio que
+ nuestra entidad nos ha comunicado.
+
+* **Clave secreta de encriptación**: Indicaremos la clave de encriptación
+ que tiene el comercio.
+
+* **Número de terminal**: Indicaremos el terminal del TPV.
+
+* **Tipo de firma**: Seleccionaremos el tipo de firma del comercio.
+
+* **Tipo de moneda**: Seleccionaremos la moneda de nuestro terminal TPV
+ (Normalmente EUR - Euros).
+
+* **Tipo de transacción**: Indicaremos el tipo de transacción, 0.
+
+* **Idioma TPV**: Indicaremos el idioma en el TPV.
+
+* **Método de pago**: Indicaremos qué tipo de pago se debe aceptar, pago con
+ tarjeta, Bizum u otro de los disponibles.
+
+* **Porcentaje de pago**: Indicar el porcentaje de pago que se permite, si
+ se deja a 0.0 se entiende 100%.
+
+Nota
+~~~~
+
+Se tiene que verificar la configuración del comercio en el
+módulo de administración de Redsys, donde la opción “Parámetros en las
+URLs” debe tener el valor “SI”.
+
+En caso de que exista más de una base de datos en la instalación, cuando la
+pasarela de pago envía el formulario a "/payment/redsys/return" odoo no sabe
+con que base de datos procesar esta información, por lo que hay que establecer
+los parametros **dbfilter** y **dbname** en el archivo de configuración.
+
+Para mostrar simultáneamente en el comercio electrónico varios de los métodos
+de pago que proporciona Redsys, como pago con tarjeta y Bizum por ejemplo,
+debemos duplicar el medio de pago y escoger en el campo método de pago el que
+corresponda en cada caso.
+
+En el caso de Bizum, el titular del TPV deberá solicitar al banco su activación.
diff --git a/payment_redsys/readme/CONTRIBUTORS.rst b/payment_redsys/readme/CONTRIBUTORS.rst
new file mode 100644
index 00000000000..331bd1d89aa
--- /dev/null
+++ b/payment_redsys/readme/CONTRIBUTORS.rst
@@ -0,0 +1,16 @@
+* `Tecnativa `_:
+
+ * Sergio Teruel
+ * Carlos Dauden
+ * Carlos Roca
+ * João Marques
+
+* Isaac Gallart
+
+* `Acysos S.L. `_:
+
+ * Ignacio Ibeas
+
+* `Planes Asesoria y Soluciones Informaticas S.L. `_:
+
+ * Luis Planes
diff --git a/payment_redsys/readme/DESCRIPTION.rst b/payment_redsys/readme/DESCRIPTION.rst
new file mode 100644
index 00000000000..bca0e2eac4a
--- /dev/null
+++ b/payment_redsys/readme/DESCRIPTION.rst
@@ -0,0 +1,3 @@
+Este módulo añade la opción de pago a través de la pasarela de Redsys, pudiendo
+seleccionar entre los métodos de pago: pago con tarjeta, pago por transferencia,
+domiciliación y Bizum.
diff --git a/payment_redsys/readme/INSTALL.rst b/payment_redsys/readme/INSTALL.rst
new file mode 100644
index 00000000000..5180b389c7a
--- /dev/null
+++ b/payment_redsys/readme/INSTALL.rst
@@ -0,0 +1,4 @@
+Para utilizar este módulo, necesita la biblioteca `pycryptodome
+`_ instalada en su sistema::
+
+ pip3 install pycryptodome
diff --git a/payment_redsys/readme/ROADMAP.rst b/payment_redsys/readme/ROADMAP.rst
new file mode 100644
index 00000000000..e7a4f6d6ae3
--- /dev/null
+++ b/payment_redsys/readme/ROADMAP.rst
@@ -0,0 +1,9 @@
+De acuerdo a los requisitos de Redsys, el tamaño máximo del número de pedido
+resultante (``Ds_Order``) es de 12 caracteres. Este addon trunca dicho
+dato en el comienzo de la transacción, con el resultado de que, aunque Redsys
+la aceptará, no se finalizará el pedido pedido en Odoo al retornar y entregará
+un Error 500 a Redsys.
+Para evitar esto, es recomendable seleccionar secuencias de pedido que se
+ajusten a esta limitación, en particular de 10 o menos caracteres, al ser la
+referencia un número extendido a partir del pedido, que incluye un guion y un
+número secuencial para posibles repeticiones de pago.
diff --git a/payment_redsys/static/description/icon.png b/payment_redsys/static/description/icon.png
new file mode 100644
index 00000000000..3d7100f0b78
Binary files /dev/null and b/payment_redsys/static/description/icon.png differ
diff --git a/payment_redsys/static/description/index.html b/payment_redsys/static/description/index.html
new file mode 100644
index 00000000000..12319209487
--- /dev/null
+++ b/payment_redsys/static/description/index.html
@@ -0,0 +1,500 @@
+
+
+
+
+
+
+Pasarela de pago Redsys
+
+
+
+
+
Pasarela de pago Redsys
+
+
+
+
Este módulo añade la opción de pago a través de la pasarela de Redsys, pudiendo
+seleccionar entre los métodos de pago: pago con tarjeta, pago por transferencia,
+domiciliación y Bizum.
+
Table of contents
+
+
+
+
Para utilizar este módulo, necesita la biblioteca pycryptodome instalada en su sistema:
+
+pip3 install pycryptodome
+
+
+
+
+
+
+
+- Nombre del comercio: Indicaremos el nombre del comercio.
+- Número de comercio (FUC): Indicaremos el número de comercio que
+nuestra entidad nos ha comunicado.
+- Clave secreta de encriptación: Indicaremos la clave de encriptación
+que tiene el comercio.
+- Número de terminal: Indicaremos el terminal del TPV.
+- Tipo de firma: Seleccionaremos el tipo de firma del comercio.
+- Tipo de moneda: Seleccionaremos la moneda de nuestro terminal TPV
+(Normalmente EUR - Euros).
+- Tipo de transacción: Indicaremos el tipo de transacción, 0.
+- Idioma TPV: Indicaremos el idioma en el TPV.
+- Método de pago: Indicaremos qué tipo de pago se debe aceptar, pago con
+tarjeta, Bizum u otro de los disponibles.
+- Porcentaje de pago: Indicar el porcentaje de pago que se permite, si
+se deja a 0.0 se entiende 100%.
+
+
+
+
+
Se tiene que verificar la configuración del comercio en el
+módulo de administración de Redsys, donde la opción “Parámetros en las
+URLs” debe tener el valor “SI”.
+
En caso de que exista más de una base de datos en la instalación, cuando la
+pasarela de pago envía el formulario a “/payment/redsys/return” odoo no sabe
+con que base de datos procesar esta información, por lo que hay que establecer
+los parametros dbfilter y dbname en el archivo de configuración.
+
Para mostrar simultáneamente en el comercio electrónico varios de los métodos
+de pago que proporciona Redsys, como pago con tarjeta y Bizum por ejemplo,
+debemos duplicar el medio de pago y escoger en el campo método de pago el que
+corresponda en cada caso.
+
En el caso de Bizum, el titular del TPV deberá solicitar al banco su activación.
+
+
+
+
+
De acuerdo a los requisitos de Redsys, el tamaño máximo del número de pedido
+resultante (Ds_Order) es de 12 caracteres. Este addon trunca dicho
+dato en el comienzo de la transacción, con el resultado de que, aunque Redsys
+la aceptará, no se finalizará el pedido pedido en Odoo al retornar y entregará
+un Error 500 a Redsys.
+Para evitar esto, es recomendable seleccionar secuencias de pedido que se
+ajusten a esta limitación, en particular de 10 o menos caracteres, al ser la
+referencia un número extendido a partir del pedido, que incluye un guion y un
+número secuencial para posibles repeticiones de pago.
+
+
+
+
Bugs are tracked on GitHub Issues.
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us smashing it by providing a detailed and welcomed
+feedback.
+
Do not contact contributors directly about support or help with technical issues.
+
+
+
+
+
+
+
+
This module is maintained by the OCA.
+
+
OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
This module is part of the OCA/l10n-spain project on GitHub.
+
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
+
+
+
+
+
diff --git a/payment_redsys/static/img/bizum.png b/payment_redsys/static/img/bizum.png
new file mode 100644
index 00000000000..8af46a769ce
Binary files /dev/null and b/payment_redsys/static/img/bizum.png differ
diff --git a/payment_redsys/static/src/img/redsys_icon.png b/payment_redsys/static/src/img/redsys_icon.png
new file mode 100644
index 00000000000..e9ddbae18a4
Binary files /dev/null and b/payment_redsys/static/src/img/redsys_icon.png differ
diff --git a/payment_redsys/tests/__init__.py b/payment_redsys/tests/__init__.py
new file mode 100644
index 00000000000..b6b8cd7d100
--- /dev/null
+++ b/payment_redsys/tests/__init__.py
@@ -0,0 +1,2 @@
+from . import common
+from . import test_redsys
diff --git a/payment_redsys/tests/common.py b/payment_redsys/tests/common.py
new file mode 100644
index 00000000000..3e4469f682a
--- /dev/null
+++ b/payment_redsys/tests/common.py
@@ -0,0 +1,27 @@
+# Copyright 2022 Planesnet - Luis Planes, Laia Espinosa, Raul Solana
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+from odoo.addons.payment.tests.common import PaymentCommon
+
+
+class RedsysCommon(PaymentCommon):
+ @classmethod
+ def setUpClass(cls, chart_template_ref=None):
+ super().setUpClass(chart_template_ref=chart_template_ref)
+ cls.redsys = cls._prepare_acquirer(
+ "redsys",
+ update_values={
+ # Set values for create a new acquirer Redsys
+ "redsys_merchant_name": "Redsys test acquirer",
+ "redsys_merchant_code": "069611024",
+ "redsys_merchant_description": "Product description for Redsys test acquirer",
+ "redsys_secret_key": "sq7HjrUOBfKmC576ILgskD5srU870gJ8",
+ "redsys_merchant_data": "Merchant data",
+ },
+ )
+ # Override default values
+ cls.acquirer = cls.redsys
+ cls.currency = cls.currency_euro
+ cls.country_spain = cls.env.ref("base.es")
+ cls.country = cls.country_spain
+ cls.company = cls.env.company
diff --git a/payment_redsys/tests/test_redsys.py b/payment_redsys/tests/test_redsys.py
new file mode 100644
index 00000000000..69ec71433b3
--- /dev/null
+++ b/payment_redsys/tests/test_redsys.py
@@ -0,0 +1,160 @@
+# Copyright 2016-2017 Tecnativa - Sergio Teruel
+# Copyright 2023 Planesnet - Luis Planes, Laia Espinosa, Raul Solana
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+import json
+import logging
+
+from odoo.exceptions import ValidationError
+from odoo.tests import tagged
+from odoo.tools import mute_logger
+
+from .common import RedsysCommon
+
+_logger = logging.getLogger(__name__)
+
+
+@tagged("post_install", "-at_install")
+class RedsysTest(RedsysCommon):
+ def _get_expected_values(self, reference=None):
+ if not reference:
+ reference = self.reference
+ values = {
+ "reference": reference,
+ "amount": self.amount,
+ }
+ rendering_values = self._get_tx(reference)._get_specific_rendering_values(
+ values
+ )
+ return {
+ "data_set": None,
+ "Ds_SignatureVersion": rendering_values["Ds_SignatureVersion"],
+ "Ds_MerchantParameters": rendering_values["Ds_MerchantParameters"],
+ "Ds_Signature": rendering_values["Ds_Signature"],
+ }
+
+ def test_compatible_acquirers(self):
+ acquirers = self.env["payment.acquirer"]._get_compatible_acquirers(
+ partner_id=self.partner.id,
+ currency_id=self.currency_euro.id,
+ company_id=self.company.id,
+ )
+ self.assertIn(self.redsys, acquirers)
+
+ def test_redirect_form_values(self):
+ tx = self.create_transaction(flow="redirect", reference="Valid transaction")
+ expected_values = self._get_expected_values(tx.reference)
+
+ with mute_logger("odoo.addons.payment.models.payment_transaction"):
+ processing_values = tx._get_processing_values()
+
+ form_info = self._extract_values_from_html_form(
+ processing_values["redirect_form_html"]
+ )
+
+ self.assertEqual(
+ form_info["action"], "https://sis-t.redsys.es:25443/sis/realizarPago/"
+ )
+ self.assertDictEqual(
+ expected_values,
+ form_info["inputs"],
+ "Redsys: invalid inputs specified in the redirect form.",
+ )
+
+ def _prepare_post_data(self, values):
+ # Simulate data received from Redsys
+ merchant_parameters = self.redsys._url_encode64(json.dumps(values))
+
+ return {
+ "Ds_MerchantParameters": merchant_parameters,
+ "Ds_Signature": self.redsys.sign_parameters(
+ self.redsys.redsys_secret_key, merchant_parameters.decode("utf8")
+ ),
+ }
+
+ def test_process_feedback_data(self):
+ tx = self.create_transaction(flow="redirect", reference="Valid transaction")
+ values = {
+ "Ds_Order": tx.reference,
+ "Ds_AuthorisationCode": "999999",
+ "Ds_Response": "100",
+ }
+ post_data = self._prepare_post_data(values)
+
+ tx = self.env["payment.transaction"]._get_tx_from_feedback_data(
+ "redsys", post_data
+ )
+ tx._process_feedback_data(post_data)
+ self.assertEqual(
+ tx.state, "done", "Redsys: validation did not put tx into done state"
+ )
+
+ def test_unknown_transaction(self):
+ # typical data posted by Redsys after client has successfully paid
+ # unknown transaction
+ values = {
+ "Ds_Order": "unknown transaction",
+ "Ds_AuthorisationCode": "999999",
+ }
+ post_data = self._prepare_post_data(values)
+ with self.assertRaises(ValidationError):
+ self.env["payment.transaction"]._handle_feedback_data("redsys", post_data)
+
+ def test_feedback_processing(self):
+ # typical data posted by Redsys after client has successfully paid
+
+ # redsys not authorisation code
+ values = {
+ "Ds_Order": "Valid transaction",
+ "Ds_AuthorisationCode": "",
+ }
+ post_data = self._prepare_post_data(values)
+ with self.assertRaises(ValidationError):
+ self.env["payment.transaction"]._handle_feedback_data("redsys", post_data)
+
+ # Valid transaction. status: done
+ tx = self.create_transaction(flow="redirect", reference="Valid transaction")
+ values = {
+ "Ds_Order": tx.reference,
+ "Ds_AuthorisationCode": "999999",
+ "Ds_Response": "100",
+ }
+ post_data = self._prepare_post_data(values)
+
+ tx._handle_feedback_data("redsys", post_data)
+ self.assertEqual(
+ tx.state, "done", "Redsys: validation did not put tx into done state"
+ )
+
+ # No valid card transaction. status: pending
+ tx = self.create_transaction(flow="redirect", reference="Pending transaction")
+ values = {
+ "Ds_Order": tx.reference,
+ "Ds_AuthorisationCode": "999999",
+ "Ds_Response": "203",
+ }
+ post_data = self._prepare_post_data(values)
+ tx._handle_feedback_data("redsys", post_data)
+ self.assertEqual(tx.state, "pending", "Redsys: pending transaction status")
+
+ # Cancel status
+ tx = self.create_transaction(flow="redirect", reference="Cancel transaction")
+ values = {
+ "Ds_Order": tx.reference,
+ "Ds_AuthorisationCode": "999999",
+ "Ds_Response": "913",
+ }
+ post_data = self._prepare_post_data(values)
+ tx._handle_feedback_data("redsys", post_data)
+ self.assertEqual(tx.state, "cancel", "Redsys: 913-9912 generic invalid card")
+
+ # Error transction status
+ tx = self.create_transaction(flow="redirect", reference="Error transaction")
+ values = {
+ "Ds_Order": tx.reference,
+ "Ds_AuthorisationCode": "999999",
+ "Ds_Response": "9999",
+ }
+ post_data = self._prepare_post_data(values)
+ tx._handle_feedback_data("redsys", post_data)
+ self.assertEqual(tx.state, "error", "Redsys: response error")
diff --git a/payment_redsys/views/payment_acquirer.xml b/payment_redsys/views/payment_acquirer.xml
new file mode 100644
index 00000000000..a143a86d172
--- /dev/null
+++ b/payment_redsys/views/payment_acquirer.xml
@@ -0,0 +1,70 @@
+
+
+
+
+ acquirer.form.redsys
+ payment.acquirer
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ acquirer.transaction.form.redsys
+ payment.transaction
+
+
+
+
+
+
+
+
diff --git a/payment_redsys/views/payment_redsys_templates.xml b/payment_redsys/views/payment_redsys_templates.xml
new file mode 100644
index 00000000000..3f2903eafdc
--- /dev/null
+++ b/payment_redsys/views/payment_redsys_templates.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
diff --git a/requirements.txt b/requirements.txt
index b187e714016..f2c8f66d86b 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -2,6 +2,7 @@
chardet
cryptography
pycountry
+pycryptodome
qrcode
requests
requests_pkcs12
diff --git a/setup/payment_redsys/odoo/addons/payment_redsys b/setup/payment_redsys/odoo/addons/payment_redsys
new file mode 120000
index 00000000000..142839d2fa2
--- /dev/null
+++ b/setup/payment_redsys/odoo/addons/payment_redsys
@@ -0,0 +1 @@
+../../../../payment_redsys
\ No newline at end of file
diff --git a/setup/payment_redsys/setup.py b/setup/payment_redsys/setup.py
new file mode 100644
index 00000000000..28c57bb6403
--- /dev/null
+++ b/setup/payment_redsys/setup.py
@@ -0,0 +1,6 @@
+import setuptools
+
+setuptools.setup(
+ setup_requires=['setuptools-odoo'],
+ odoo_addon=True,
+)