From c29a2eca4a51eddfb59f8bf01e5d6205f014769f Mon Sep 17 00:00:00 2001 From: sergio-incaser Date: Wed, 5 Nov 2014 19:05:29 +0100 Subject: [PATCH 01/52] [ADD] Nuevo modulo para pagos con tajeta (sermepa-redsys) --- payment_redsys/README.rst | 41 +++ payment_redsys/__init__.py | 23 ++ payment_redsys/__openerp__.py | 16 ++ payment_redsys/controllers/__init__.py | 3 + payment_redsys/controllers/main.py | 45 ++++ payment_redsys/data/redsys.xml | 17 ++ payment_redsys/models/__init__.py | 3 + payment_redsys/models/redsys.py | 255 ++++++++++++++++++ payment_redsys/static/description/icon.png | Bin 0 -> 8505 bytes payment_redsys/static/src/img/redsys_icon.png | Bin 0 -> 9137 bytes payment_redsys/views/payment_acquirer.xml | 47 ++++ payment_redsys/views/redsys.xml | 33 +++ 12 files changed, 483 insertions(+) create mode 100644 payment_redsys/README.rst create mode 100644 payment_redsys/__init__.py create mode 100644 payment_redsys/__openerp__.py create mode 100644 payment_redsys/controllers/__init__.py create mode 100644 payment_redsys/controllers/main.py create mode 100644 payment_redsys/data/redsys.xml create mode 100644 payment_redsys/models/__init__.py create mode 100644 payment_redsys/models/redsys.py create mode 100644 payment_redsys/static/description/icon.png create mode 100644 payment_redsys/static/src/img/redsys_icon.png create mode 100644 payment_redsys/views/payment_acquirer.xml create mode 100644 payment_redsys/views/redsys.xml diff --git a/payment_redsys/README.rst b/payment_redsys/README.rst new file mode 100644 index 00000000000..bfed019d2bb --- /dev/null +++ b/payment_redsys/README.rst @@ -0,0 +1,41 @@ +Pasarela de pago Redsys +======================= + +Este módulo añade la opción de pago a través de la pasarela de Redsys. + + +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. + +* **URL_OK/URL_KO**: Durante el proceso del pago, y una vez que + se muestra al cliente la pantalla con el resultado del mismo, es + posible redirigir su navegador a una URL para las transacciones + autorizadas y a otra si la transacción ha sido denegada. A éstas + se las denomina URL_OK y URL_KO, respectivamente. Se trata + de dos URLs que pueden ser proporcionadas por el comercio. + +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”. diff --git a/payment_redsys/__init__.py b/payment_redsys/__init__.py new file mode 100644 index 00000000000..625eb32b083 --- /dev/null +++ b/payment_redsys/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2013-Today OpenERP SA (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +from . import models +from . import controllers diff --git a/payment_redsys/__openerp__.py b/payment_redsys/__openerp__.py new file mode 100644 index 00000000000..d5505d355e8 --- /dev/null +++ b/payment_redsys/__openerp__.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- + +{ + 'name': 'Redsys Payment Acquirer', + 'category': 'Hidden', + 'summary': 'Payment Acquirer: Redsys Implementation', + 'version': '1.0', + 'author': 'Incaser Informatica S.L.', + 'depends': ['payment'], + 'data': [ + 'views/redsys.xml', + 'views/payment_acquirer.xml', + 'data/redsys.xml', + ], + 'installable': True, +} diff --git a/payment_redsys/controllers/__init__.py b/payment_redsys/controllers/__init__.py new file mode 100644 index 00000000000..65a8c12013d --- /dev/null +++ b/payment_redsys/controllers/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import main diff --git a/payment_redsys/controllers/main.py b/payment_redsys/controllers/main.py new file mode 100644 index 00000000000..b4105484a09 --- /dev/null +++ b/payment_redsys/controllers/main.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +import logging +import pprint +import werkzeug + +from openerp import http, SUPERUSER_ID +from openerp.http import request +from openerp.addons.website_sale.controllers.main import website_sale + +_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='none') + def redsys_return(self, **post): + """ Redsys.""" + _logger.info('Redsys: entering form_feedback with post data %s', + pprint.pformat(post)) + if post: + request.registry['payment.transaction'].form_feedback( + request.cr, SUPERUSER_ID, post, 'redsys', + context=request.context) + return_url = post.pop('return_url', '') + if not return_url: + return_url = '/shop' + return werkzeug.utils.redirect(return_url) + + +class website_sale(website_sale): + @http.route(['/shop/payment/transaction/'], type='json', + auth="public", website=True) + def payment_transaction(self, acquirer_id): + tx_id = super(website_sale, self).payment_transaction(acquirer_id) + request.website.sale_reset(context=request.context) + return tx_id diff --git a/payment_redsys/data/redsys.xml b/payment_redsys/data/redsys.xml new file mode 100644 index 00000000000..52fcbc6ce0f --- /dev/null +++ b/payment_redsys/data/redsys.xml @@ -0,0 +1,17 @@ + + + + + + Credit Card Redsys + redsys + + + test + You will be redirected to the redsys website after cliking on the payment button.

]]> +
+
+ +
+
diff --git a/payment_redsys/models/__init__.py b/payment_redsys/models/__init__.py new file mode 100644 index 00000000000..06f93b5c385 --- /dev/null +++ b/payment_redsys/models/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import redsys diff --git a/payment_redsys/models/redsys.py b/payment_redsys/models/redsys.py new file mode 100644 index 00000000000..8290682d42d --- /dev/null +++ b/payment_redsys/models/redsys.py @@ -0,0 +1,255 @@ +# -*- coding: utf-8 -*- +from hashlib import sha1 +import logging +import urlparse + +from openerp import models, fields, api, _ +from openerp.addons.payment.models.payment_acquirer import ValidationError +from openerp.tools.float_utils import float_compare +_logger = logging.getLogger(__name__) + + +class AcquirerRedsys(models.Model): + _inherit = 'payment.acquirer' + + def _get_redsys_urls(self, environment): + """ Redsys URLs + """ + if environment == 'prod': + return { + 'redsys_form_url': + 'https://sis.redsys.es/sis/realizarPago/', + } + else: + return { + 'redsys_form_url': + 'https://sis-t.redsys.es:25443/sis/realizarPago/', + } + + @api.model + def _get_providers(self): + providers = super(AcquirerRedsys, self)._get_providers() + providers.append(['redsys', 'Redsys']) + return providers + + redsys_merchant_url = fields.Char('Merchant URL', + required_if_provider='redsys') + redsys_merchant_name = fields.Char('Merchant Name', + required_if_provider='redsys') + redsys_merchant_titular = fields.Char('Merchant Titular', + 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'), + ('004', 'Frances'), + ], 'Merchant Consumer Language') + redsys_pay_method = fields.Selection([('T', 'Pago con Tarjeta'), + ('R', 'Pago por Transferencia'), + ('D', 'Domiciliacion'), + ], 'Payment Method', + default='T') + redsys_url_ok = fields.Char('URL OK') + redsys_url_ko = fields.Char('URL KO') + + def _redsys_generate_digital_sign(self, acquirer, inout, values): + """ Generate the shasign for incoming or outgoing communications. + :param browse acquirer: the payment.acquirer browse record. It should + have a shakey in shaky out + :param string inout: 'in' (encoding) or 'out' (decoding). + :param dict values: transaction values + + :return string: shasign + """ + assert acquirer.provider == 'redsys' + + def get_value(key): + if values.get(key): + return values[key] + return '' + + if inout == 'out': + keys = ['Ds_Amount', + 'Ds_Order', + 'Ds_MerchantCode', + 'Ds_Currency', + 'Ds_Response'] + else: + keys = ['Ds_Merchant_Amount', + 'Ds_Merchant_Order', + 'Ds_Merchant_MerchantCode', + 'Ds_Merchant_Currency', + 'Ds_Merchant_TransactionType', + 'Ds_Merchant_MerchantURL'] + sign = ''.join('%s' % (get_value(k)) for k in keys) + # Add the pre-shared secret key at the end of the signature + sign = sign + acquirer.redsys_secret_key + if isinstance(sign, str): + sign = urlparse.parse_qsl(sign) + shasign = sha1(sign).hexdigest().upper() + return shasign + + @api.model + def redsys_form_generate_values(self, id, partner_values, tx_values): + acquirer = self.browse(id) + redsys_tx_values = dict(tx_values) + redsys_tx_values.update({ + 'Ds_Sermepa_Url': + (self._get_redsys_urls(acquirer.environment) + ['redsys_form_url']), + 'Ds_Merchant_Amount': int(tx_values['amount'] * 100), + 'Ds_Merchant_Currency': acquirer.redsys_currency or '978', + 'Ds_Merchant_Order': tx_values['reference'][:12], + 'Ds_Merchant_MerchantCode': acquirer.redsys_merchant_code and + acquirer.redsys_merchant_code[:9], + 'Ds_Merchant_Terminal': acquirer.redsys_terminal or '1', + 'Ds_Merchant_TransactionType': ( + acquirer.redsys_transaction_type or '0'), + 'Ds_Merchant_Titular': acquirer.redsys_merchant_titular[:60] and + acquirer.redsys_merchant_titular[:60], + 'Ds_Merchant_MerchantName': acquirer.redsys_merchant_name and + acquirer.redsys_merchant_name[:25], + 'Ds_Merchant_MerchantURL': + (acquirer.redsys_merchant_url + and acquirer.redsys_merchant_url[:250] or ''), + 'Ds_Merchant_MerchantData': acquirer.redsys_merchant_data or '', + 'Ds_Merchant_ProductDescription': ( + acquirer.redsys_merchant_description and + acquirer.redsys_merchant_description[:125]), + 'Ds_Merchant_ConsumerLanguage': ( + acquirer.redsys_merchant_lang or '001'), + 'Ds_Merchant_UrlOK': acquirer.redsys_url_ok or '', + 'Ds_Merchant_UrlKO': acquirer.redsys_url_ko or '', + 'Ds_Merchant_PayMethods': acquirer.redsys_pay_method or 'T', + }) + + redsys_tx_values['Ds_Merchant_MerchantSignature'] = ( + self._redsys_generate_digital_sign( + acquirer, 'in', redsys_tx_values)) + return partner_values, redsys_tx_values + + @api.multi + def redsys_get_form_action_url(self): + return self._get_redsys_urls(self.environment)['redsys_form_url'] + + +class TxRedsys(models.Model): + _inherit = 'payment.transaction' + + redsys_txnid = fields.Char('Transaction ID') + + # -------------------------------------------------- + # FORM RELATED METHODS + # -------------------------------------------------- + + @api.model + def _redsys_form_get_tx_from_data(self, data): + """ Given a data dict coming from redsys, verify it and + find the related transaction record. """ + reference = data.get('Ds_Order', '') + pay_id = data.get('Ds_AuthorisationCode') + shasign = data.get('Ds_Signature') + 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) + _logger.error(error_msg) + raise ValidationError(error_msg) + + 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.error(error_msg) + raise ValidationError(error_msg) + + # verify shasign + acquirer = self.env['payment.acquirer'] + shasign_check = acquirer._redsys_generate_digital_sign( + tx.acquirer_id, 'out', data) + if shasign_check.upper() != shasign.upper(): + error_msg = 'Redsys: invalid shasign, received %s, computed %s,' \ + ' for data %s' % (shasign, shasign_check, data) + _logger.error(error_msg) + raise ValidationError(error_msg) + return tx + + @api.model + def _redsys_form_get_invalid_parameters(self, tx, data): + invalid_parameters = [] + + if (tx.acquirer_reference + and data.get('Ds_Order')) != tx.acquirer_reference: + invalid_parameters.append( + ('Transaction Id', data.get('Ds_Order'), + tx.acquirer_reference)) + # check what is buyed + if (float_compare(float(data.get('Ds_Amount', '0.0'))/100, + tx.amount, 2) != 0): + invalid_parameters.append(('Amount', data.get('Ds_Amount'), + '%.2f' % tx.amount)) + return invalid_parameters + + @api.model + def _redsys_form_validate(self, tx, data): + status_code = int(data.get('Ds_Response', '29999')) + if (status_code >= 0) and (status_code <= 99): + tx.write({ + 'state': 'done', + 'redsys_txnid': data.get('Ds_AuthorisationCode'), + 'state_message': _('Ok: %s') % data.get('Ds_Response'), + }) + email_act = tx.sale_order_id.action_quotation_send() + # send the email + if email_act and email_act.get('context'): + self.send_mail(email_act['context']) + return True + if (status_code >= 101) and (status_code <= 202): + # 'Payment error: code: %s.' + tx.write({ + 'state': 'pending', + 'redsys_txnid': data.get('Ds_AuthorisationCode'), + 'state_message': _('Error: %s') % data.get('Ds_Response'), + }) + return True + if (status_code == 912) and (status_code == 9912): + # 'Payment error: bank unavailable.' + tx.write({ + 'state': 'cancel', + 'redsys_txnid': data.get('Ds_AuthorisationCode'), + 'state_message': (_('Bank Error: %s') + % data.get('Ds_Response')), + }) + return True + else: + error = 'Redsys: feedback error' + _logger.info(error) + tx.write({ + 'state': 'error', + 'redsys_txnid': data.get('Ds_AuthorisationCode'), + 'state_message': error, + }) + return False + + def send_mail(self, email_ctx): + composer_values = {} + template = self.env.ref('sale.email_template_edi_sale', False) + if not template: + return True + email_ctx['default_template_id'] = template.id + composer_id = self.env['mail.compose.message'].with_context( + email_ctx).create(composer_values) + composer_id.with_context(email_ctx).send_mail() diff --git a/payment_redsys/static/description/icon.png b/payment_redsys/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3d7100f0b78729b2854bcad44463cf6ca45d9980 GIT binary patch literal 8505 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..a61bb7a3888827e77f843903e616e64fa45e6e7a GIT binary patch literal 9137 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 + + + + + acquirer.form.redsys + payment.acquirer + + + + + + + + + + + + + + + + + + + + + + + + + acquirer.transaction.form.redsys + payment.transaction + + + + + + + + + + + + + + diff --git a/payment_redsys/views/redsys.xml b/payment_redsys/views/redsys.xml new file mode 100644 index 00000000000..621a0e996be --- /dev/null +++ b/payment_redsys/views/redsys.xml @@ -0,0 +1,33 @@ + + + + + + + + From a14de7e42ff08829f4dd0a3bb069ca495f926d58 Mon Sep 17 00:00:00 2001 From: Roberto Lizana Date: Mon, 5 Jan 2015 20:48:47 +0100 Subject: [PATCH 02/52] [DEL] No crear un pago redsys por defecto al instalar --- payment_redsys/__openerp__.py | 3 +-- payment_redsys/data/redsys.xml | 17 ------------- payment_redsys/views/payment_acquirer.xml | 30 +++++++++++------------ 3 files changed, 16 insertions(+), 34 deletions(-) delete mode 100644 payment_redsys/data/redsys.xml diff --git a/payment_redsys/__openerp__.py b/payment_redsys/__openerp__.py index d5505d355e8..f03a4ed76c9 100644 --- a/payment_redsys/__openerp__.py +++ b/payment_redsys/__openerp__.py @@ -9,8 +9,7 @@ 'depends': ['payment'], 'data': [ 'views/redsys.xml', - 'views/payment_acquirer.xml', - 'data/redsys.xml', + 'views/payment_acquirer.xml' ], 'installable': True, } diff --git a/payment_redsys/data/redsys.xml b/payment_redsys/data/redsys.xml deleted file mode 100644 index 52fcbc6ce0f..00000000000 --- a/payment_redsys/data/redsys.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - Credit Card Redsys - redsys - - - test - You will be redirected to the redsys website after cliking on the payment button.

]]> -
-
- -
-
diff --git a/payment_redsys/views/payment_acquirer.xml b/payment_redsys/views/payment_acquirer.xml index 7b7f916c2c2..5c4c9589890 100644 --- a/payment_redsys/views/payment_acquirer.xml +++ b/payment_redsys/views/payment_acquirer.xml @@ -9,21 +9,21 @@ - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + From 4a5404f99d198d2c18150379446114f5cef9cb86 Mon Sep 17 00:00:00 2001 From: sergio-incaser Date: Wed, 21 Jan 2015 18:54:06 +0100 Subject: [PATCH 03/52] =?UTF-8?q?[FIX+IMP]=20payment=5Fredsys:=20Descripci?= =?UTF-8?q?=C3=B3n=20+=20error=20reference?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Corregido error en caso de que refence no este informado, al renderizar la plantilla del boton de pago. * Corregido error que no permite pagar por transferencia al instalar el modulo payment_redsys * Añadidas descripciones de los productos de la cesta a la clave 'DS_Merchant_ProductDescription'. --- payment_redsys/README.rst | 8 ++++++++ payment_redsys/__openerp__.py | 2 +- payment_redsys/controllers/main.py | 7 ++++++- payment_redsys/models/redsys.py | 24 +++++++++++++++++------- 4 files changed, 32 insertions(+), 9 deletions(-) diff --git a/payment_redsys/README.rst b/payment_redsys/README.rst index bfed019d2bb..fcd82159ddc 100644 --- a/payment_redsys/README.rst +++ b/payment_redsys/README.rst @@ -7,6 +7,8 @@ Este módulo añade la opción de pago a través de la pasarela de Redsys. Parámetros ---------- +* **Merchant URL**: http://[dominioweb]/payment/redsys/return + * **Nombre del comercio**: Indicaremos el nombre del comercio. * **Número de comercio (FUC)**: Indicaremos el número de comercio que @@ -39,3 +41,9 @@ 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 +**openerp-server.conf**. diff --git a/payment_redsys/__openerp__.py b/payment_redsys/__openerp__.py index f03a4ed76c9..b1e71c32e6f 100644 --- a/payment_redsys/__openerp__.py +++ b/payment_redsys/__openerp__.py @@ -5,7 +5,7 @@ 'category': 'Hidden', 'summary': 'Payment Acquirer: Redsys Implementation', 'version': '1.0', - 'author': 'Incaser Informatica S.L.', + 'author': "Incaser Informatica S.L.,Odoo Community Association (OCA)", 'depends': ['payment'], 'data': [ 'views/redsys.xml', diff --git a/payment_redsys/controllers/main.py b/payment_redsys/controllers/main.py index b4105484a09..8f309331643 100644 --- a/payment_redsys/controllers/main.py +++ b/payment_redsys/controllers/main.py @@ -41,5 +41,10 @@ class website_sale(website_sale): auth="public", website=True) def payment_transaction(self, acquirer_id): tx_id = super(website_sale, self).payment_transaction(acquirer_id) - request.website.sale_reset(context=request.context) + cr, context = request.cr, request.context + acquirer_obj = request.registry.get('payment.acquirer') + acquirer = acquirer_obj.browse( + cr, SUPERUSER_ID, acquirer_id, context=context) + if acquirer.provider == 'redsys': + request.website.sale_reset(context=request.context) return tx_id diff --git a/payment_redsys/models/redsys.py b/payment_redsys/models/redsys.py index 8290682d42d..eb1e34b3512 100644 --- a/payment_redsys/models/redsys.py +++ b/payment_redsys/models/redsys.py @@ -109,7 +109,8 @@ def redsys_form_generate_values(self, id, partner_values, tx_values): ['redsys_form_url']), 'Ds_Merchant_Amount': int(tx_values['amount'] * 100), 'Ds_Merchant_Currency': acquirer.redsys_currency or '978', - 'Ds_Merchant_Order': tx_values['reference'][:12], + 'Ds_Merchant_Order': tx_values['reference'] and + tx_values['reference'][:12] or False, 'Ds_Merchant_MerchantCode': acquirer.redsys_merchant_code and acquirer.redsys_merchant_code[:9], 'Ds_Merchant_Terminal': acquirer.redsys_terminal or '1', @@ -120,10 +121,11 @@ def redsys_form_generate_values(self, id, partner_values, tx_values): 'Ds_Merchant_MerchantName': acquirer.redsys_merchant_name and acquirer.redsys_merchant_name[:25], 'Ds_Merchant_MerchantURL': - (acquirer.redsys_merchant_url - and acquirer.redsys_merchant_url[:250] or ''), + (acquirer.redsys_merchant_url and + acquirer.redsys_merchant_url[:250] or ''), 'Ds_Merchant_MerchantData': acquirer.redsys_merchant_data or '', 'Ds_Merchant_ProductDescription': ( + self._product_description(tx_values['reference']) or acquirer.redsys_merchant_description and acquirer.redsys_merchant_description[:125]), 'Ds_Merchant_ConsumerLanguage': ( @@ -142,6 +144,14 @@ def redsys_form_generate_values(self, id, partner_values, tx_values): def redsys_get_form_action_url(self): return self._get_redsys_urls(self.environment)['redsys_form_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 + class TxRedsys(models.Model): _inherit = 'payment.transaction' @@ -191,16 +201,16 @@ def _redsys_form_get_tx_from_data(self, data): def _redsys_form_get_invalid_parameters(self, tx, data): invalid_parameters = [] - if (tx.acquirer_reference - and data.get('Ds_Order')) != tx.acquirer_reference: + if (tx.acquirer_reference and + data.get('Ds_Order')) != tx.acquirer_reference: invalid_parameters.append( ('Transaction Id', data.get('Ds_Order'), tx.acquirer_reference)) # check what is buyed - if (float_compare(float(data.get('Ds_Amount', '0.0'))/100, + if (float_compare(float(data.get('Ds_Amount', '0.0')) / 100, tx.amount, 2) != 0): invalid_parameters.append(('Amount', data.get('Ds_Amount'), - '%.2f' % tx.amount)) + '%.2f' % tx.amount)) return invalid_parameters @api.model From f8fcd3b14ebf217728a970f5abea3eeea6c3069a Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Fri, 3 Apr 2015 09:53:30 +0200 Subject: [PATCH 04/52] [FIX] payment_redsys: New module --- payment_redsys/__openerp__.py | 2 +- payment_redsys/i18n/en.po | 151 +++++++++++++++++++++++++++++++ payment_redsys/i18n/es.po | 154 ++++++++++++++++++++++++++++++++ payment_redsys/i18n/gl.po | 152 +++++++++++++++++++++++++++++++ payment_redsys/models/redsys.py | 32 ++++--- 5 files changed, 476 insertions(+), 15 deletions(-) create mode 100644 payment_redsys/i18n/en.po create mode 100644 payment_redsys/i18n/es.po create mode 100644 payment_redsys/i18n/gl.po diff --git a/payment_redsys/__openerp__.py b/payment_redsys/__openerp__.py index b1e71c32e6f..2cb6ce55572 100644 --- a/payment_redsys/__openerp__.py +++ b/payment_redsys/__openerp__.py @@ -4,7 +4,7 @@ 'name': 'Redsys Payment Acquirer', 'category': 'Hidden', 'summary': 'Payment Acquirer: Redsys Implementation', - 'version': '1.0', + 'version': '8.0.1.0.0', 'author': "Incaser Informatica S.L.,Odoo Community Association (OCA)", 'depends': ['payment'], 'data': [ diff --git a/payment_redsys/i18n/en.po b/payment_redsys/i18n/en.po new file mode 100644 index 00000000000..4589dda5e57 --- /dev/null +++ b/payment_redsys/i18n/en.po @@ -0,0 +1,151 @@ +# 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: 2015-08-14 00:52+0000\n" +"PO-Revision-Date: 2015-05-23 08:55+0000\n" +"Last-Translator: Pedro M. Baeza \n" +"Language-Team: English (http://www.transifex.com/oca/OCA-l10n-spain-8-0/language/en/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: en\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: payment_redsys +#: code:addons/payment_redsys/models/redsys.py:247 +#, python-format +msgid "Bank Error: %s" +msgstr "Bank Error: %s" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Castellano" +msgstr "Castellano" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_currency:0 +msgid "Currency" +msgstr "Currency" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_pay_method:0 +msgid "Domiciliacion" +msgstr "Domiciliacion" + +#. module: payment_redsys +#: code:addons/payment_redsys/models/redsys.py:239 +#, python-format +msgid "Error: %s" +msgstr "Error: %s" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Frances" +msgstr "Frances" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_merchant_lang:0 +msgid "Merchant Consumer Language" +msgstr "Merchant Consumer Language" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_merchant_data:0 +msgid "Merchant Data" +msgstr "Merchant Data" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_merchant_name:0 +msgid "Merchant Name" +msgstr "Merchant Name" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_merchant_titular:0 +msgid "Merchant Titular" +msgstr "Merchant Titular" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_merchant_url:0 +msgid "Merchant URL" +msgstr "Merchant URL" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_merchant_code:0 +msgid "Merchant code" +msgstr "Merchant code" + +#. module: payment_redsys +#: code:addons/payment_redsys/models/redsys.py:227 +#, python-format +msgid "Ok: %s" +msgstr "Ok: %s" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_pay_method:0 +msgid "Pago con Tarjeta" +msgstr "Pago con Tarjeta" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_pay_method:0 +msgid "Pago por Transferencia" +msgstr "Pago por Transferencia" + +#. module: payment_redsys +#: model:ir.model,name:payment_redsys.model_payment_acquirer +msgid "Payment Acquirer" +msgstr "Payment Acquirer" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_pay_method:0 +msgid "Payment Method" +msgstr "Payment Method" + +#. module: payment_redsys +#: model:ir.model,name:payment_redsys.model_payment_transaction +msgid "Payment Transaction" +msgstr "Payment Transaction" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_merchant_description:0 +msgid "Product Description" +msgstr "Product Description" + +#. module: payment_redsys +#: view:payment.transaction:payment_redsys.transaction_form_redsys +msgid "Redsys TX Details" +msgstr "Redsys TX Details" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_secret_key:0 +msgid "Secret Key" +msgstr "Secret Key" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_terminal:0 +msgid "Terminal" +msgstr "Terminal" + +#. module: payment_redsys +#: field:payment.transaction,redsys_txnid:0 +msgid "Transaction ID" +msgstr "Transaction ID" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_transaction_type:0 +msgid "Transtaction Type" +msgstr "Transtaction Type" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_url_ko:0 +msgid "URL KO" +msgstr "URL KO" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_url_ok:0 +msgid "URL OK" +msgstr "URL OK" diff --git a/payment_redsys/i18n/es.po b/payment_redsys/i18n/es.po new file mode 100644 index 00000000000..fd6533d7656 --- /dev/null +++ b/payment_redsys/i18n/es.po @@ -0,0 +1,154 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * payment_redsys +# +# Translators: +# Alejandro Santana , 2015 +# 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: 2015-09-09 15:09+0000\n" +"PO-Revision-Date: 2015-09-01 23:46+0000\n" +"Last-Translator: Alejandro Santana \n" +"Language-Team: Spanish (http://www.transifex.com/oca/OCA-l10n-spain-8-0/language/es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: payment_redsys +#: code:addons/payment_redsys/models/redsys.py:247 +#, python-format +msgid "Bank Error: %s" +msgstr "Error del banco: %s" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Castellano" +msgstr "Castellano" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_currency:0 +msgid "Currency" +msgstr "Moneda" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_pay_method:0 +msgid "Domiciliacion" +msgstr "Domiciliación" + +#. module: payment_redsys +#: code:addons/payment_redsys/models/redsys.py:239 +#, python-format +msgid "Error: %s" +msgstr "Error: %s" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Frances" +msgstr "Francés" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_merchant_lang:0 +msgid "Merchant Consumer Language" +msgstr "Idioma del consumidor del comerciante" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_merchant_data:0 +msgid "Merchant Data" +msgstr "Datos del comerciante" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_merchant_name:0 +msgid "Merchant Name" +msgstr "Nombre del comerciante" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_merchant_titular:0 +msgid "Merchant Titular" +msgstr "Titular del comerciante" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_merchant_url:0 +msgid "Merchant URL" +msgstr "URL del comerciante" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_merchant_code:0 +msgid "Merchant code" +msgstr "Código de comerciante" + +#. module: payment_redsys +#: code:addons/payment_redsys/models/redsys.py:227 +#, python-format +msgid "Ok: %s" +msgstr "Ok: %s" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_pay_method:0 +msgid "Pago con Tarjeta" +msgstr "Pago con Tarjeta" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_pay_method:0 +msgid "Pago por Transferencia" +msgstr "Pago por Transferencia" + +#. module: payment_redsys +#: model:ir.model,name:payment_redsys.model_payment_acquirer +msgid "Payment Acquirer" +msgstr "Método de pago" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_pay_method:0 +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 +#: field:payment.acquirer,redsys_merchant_description:0 +msgid "Product Description" +msgstr "Descripción del producto" + +#. module: payment_redsys +#: view:payment.transaction:payment_redsys.transaction_form_redsys +msgid "Redsys TX Details" +msgstr "Detalles de transmisión Redsys" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_secret_key:0 +msgid "Secret Key" +msgstr "Clave secreta" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_terminal:0 +msgid "Terminal" +msgstr "Terminal" + +#. module: payment_redsys +#: field:payment.transaction,redsys_txnid:0 +msgid "Transaction ID" +msgstr "ID de la transacción" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_transaction_type:0 +msgid "Transtaction Type" +msgstr "Tipo de transacción" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_url_ko:0 +msgid "URL KO" +msgstr "URL KO" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_url_ok:0 +msgid "URL OK" +msgstr "URL OK" diff --git a/payment_redsys/i18n/gl.po b/payment_redsys/i18n/gl.po new file mode 100644 index 00000000000..42dba221d86 --- /dev/null +++ b/payment_redsys/i18n/gl.po @@ -0,0 +1,152 @@ +# 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: 2015-08-14 00:52+0000\n" +"PO-Revision-Date: 2015-06-26 00:33+0000\n" +"Last-Translator: Alejandro Santana \n" +"Language-Team: Galician (http://www.transifex.com/oca/OCA-l10n-spain-8-0/language/gl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: gl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: payment_redsys +#: code:addons/payment_redsys/models/redsys.py:247 +#, python-format +msgid "Bank Error: %s" +msgstr "Erro do banco: %s" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Castellano" +msgstr "Castelán" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_currency:0 +msgid "Currency" +msgstr "Moeda" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_pay_method:0 +msgid "Domiciliacion" +msgstr "Domiciliación" + +#. module: payment_redsys +#: code:addons/payment_redsys/models/redsys.py:239 +#, python-format +msgid "Error: %s" +msgstr "Erro: %s" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Frances" +msgstr "Francés" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_merchant_lang:0 +msgid "Merchant Consumer Language" +msgstr "Linguaxe do comerciante" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_merchant_data:0 +msgid "Merchant Data" +msgstr "Datos do comerciante" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_merchant_name:0 +msgid "Merchant Name" +msgstr "Nome do comerciante" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_merchant_titular:0 +msgid "Merchant Titular" +msgstr "Comerciante titular" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_merchant_url:0 +msgid "Merchant URL" +msgstr "URL do comerciante" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_merchant_code:0 +msgid "Merchant code" +msgstr "Código do comerciante" + +#. module: payment_redsys +#: code:addons/payment_redsys/models/redsys.py:227 +#, python-format +msgid "Ok: %s" +msgstr "OK: %s" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_pay_method:0 +msgid "Pago con Tarjeta" +msgstr "Pagamento con tarxeta" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_pay_method:0 +msgid "Pago por Transferencia" +msgstr "Pagamento por transferencia" + +#. module: payment_redsys +#: model:ir.model,name:payment_redsys.model_payment_acquirer +msgid "Payment Acquirer" +msgstr "Medio de pagamento" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_pay_method:0 +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 +#: field:payment.acquirer,redsys_merchant_description:0 +msgid "Product Description" +msgstr "Descrición do produto" + +#. module: payment_redsys +#: view:payment.transaction:payment_redsys.transaction_form_redsys +msgid "Redsys TX Details" +msgstr "Detalles Redsys TX" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_secret_key:0 +msgid "Secret Key" +msgstr "Chave secreta" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_terminal:0 +msgid "Terminal" +msgstr "Terminal" + +#. module: payment_redsys +#: field:payment.transaction,redsys_txnid:0 +msgid "Transaction ID" +msgstr "ID da transacción" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_transaction_type:0 +msgid "Transtaction Type" +msgstr "Tipo de transacción" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_url_ko:0 +msgid "URL KO" +msgstr "URL KO" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_url_ok:0 +msgid "URL OK" +msgstr "URL OK" diff --git a/payment_redsys/models/redsys.py b/payment_redsys/models/redsys.py index eb1e34b3512..b00606269d4 100644 --- a/payment_redsys/models/redsys.py +++ b/payment_redsys/models/redsys.py @@ -104,25 +104,29 @@ def redsys_form_generate_values(self, id, partner_values, tx_values): acquirer = self.browse(id) redsys_tx_values = dict(tx_values) redsys_tx_values.update({ - 'Ds_Sermepa_Url': - (self._get_redsys_urls(acquirer.environment) - ['redsys_form_url']), + 'Ds_Sermepa_Url': ( + self._get_redsys_urls(acquirer.environment)[ + 'redsys_form_url']), 'Ds_Merchant_Amount': int(tx_values['amount'] * 100), 'Ds_Merchant_Currency': acquirer.redsys_currency or '978', - 'Ds_Merchant_Order': tx_values['reference'] and - tx_values['reference'][:12] or False, - 'Ds_Merchant_MerchantCode': acquirer.redsys_merchant_code and - acquirer.redsys_merchant_code[:9], + 'Ds_Merchant_Order': ( + tx_values['reference'] and tx_values['reference'][:12] or + False), + 'Ds_Merchant_MerchantCode': ( + acquirer.redsys_merchant_code and + acquirer.redsys_merchant_code[:9]), 'Ds_Merchant_Terminal': acquirer.redsys_terminal or '1', 'Ds_Merchant_TransactionType': ( acquirer.redsys_transaction_type or '0'), - 'Ds_Merchant_Titular': acquirer.redsys_merchant_titular[:60] and - acquirer.redsys_merchant_titular[:60], - 'Ds_Merchant_MerchantName': acquirer.redsys_merchant_name and - acquirer.redsys_merchant_name[:25], - 'Ds_Merchant_MerchantURL': - (acquirer.redsys_merchant_url and - acquirer.redsys_merchant_url[:250] or ''), + 'Ds_Merchant_Titular': ( + acquirer.redsys_merchant_titular[:60] and + acquirer.redsys_merchant_titular[:60]), + 'Ds_Merchant_MerchantName': ( + acquirer.redsys_merchant_name and + acquirer.redsys_merchant_name[:25]), + 'Ds_Merchant_MerchantURL': ( + acquirer.redsys_merchant_url and + acquirer.redsys_merchant_url[:250] or ''), 'Ds_Merchant_MerchantData': acquirer.redsys_merchant_data or '', 'Ds_Merchant_ProductDescription': ( self._product_description(tx_values['reference']) or From f2bf05f00b24df39d9c7b009c8ee5a2750aa5ac8 Mon Sep 17 00:00:00 2001 From: sergio-incaser Date: Fri, 13 Nov 2015 13:33:44 +0100 Subject: [PATCH 05/52] [IMP] payment_redsys: Migracion a HMAC SHA-256 --- payment_redsys/README.rst | 8 ++ payment_redsys/__openerp__.py | 7 + payment_redsys/controllers/main.py | 2 +- payment_redsys/models/redsys.py | 167 ++++++++++++---------- payment_redsys/views/payment_acquirer.xml | 1 + payment_redsys/views/redsys.xml | 46 +++--- 6 files changed, 127 insertions(+), 104 deletions(-) diff --git a/payment_redsys/README.rst b/payment_redsys/README.rst index fcd82159ddc..989a2a79481 100644 --- a/payment_redsys/README.rst +++ b/payment_redsys/README.rst @@ -47,3 +47,11 @@ 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 **openerp-server.conf**. + +Instalación +----------- + +Para utilizar este módulo, necesita la biblioteca `pycrypto +`_ instalada en su sistema:: + + pip install pycrypto diff --git a/payment_redsys/__openerp__.py b/payment_redsys/__openerp__.py index 2cb6ce55572..787579dc289 100644 --- a/payment_redsys/__openerp__.py +++ b/payment_redsys/__openerp__.py @@ -7,9 +7,16 @@ 'version': '8.0.1.0.0', 'author': "Incaser Informatica S.L.,Odoo Community Association (OCA)", 'depends': ['payment'], + "external_dependencies": { + "python": [ + "Crypto.Cipher.DES3", + ], + "bin": [], + }, 'data': [ 'views/redsys.xml', 'views/payment_acquirer.xml' ], + 'license': 'AGPL-3', 'installable': True, } diff --git a/payment_redsys/controllers/main.py b/payment_redsys/controllers/main.py index 8f309331643..2086cce14d0 100644 --- a/payment_redsys/controllers/main.py +++ b/payment_redsys/controllers/main.py @@ -36,7 +36,7 @@ def redsys_return(self, **post): return werkzeug.utils.redirect(return_url) -class website_sale(website_sale): +class WebsiteSale(website_sale): @http.route(['/shop/payment/transaction/'], type='json', auth="public", website=True) def payment_transaction(self, acquirer_id): diff --git a/payment_redsys/models/redsys.py b/payment_redsys/models/redsys.py index b00606269d4..a912f975861 100644 --- a/payment_redsys/models/redsys.py +++ b/payment_redsys/models/redsys.py @@ -1,13 +1,20 @@ # -*- coding: utf-8 -*- -from hashlib import sha1 +import hashlib +import hmac +import base64 import logging -import urlparse +import json from openerp import models, fields, api, _ from openerp.addons.payment.models.payment_acquirer import ValidationError from openerp.tools.float_utils import float_compare _logger = logging.getLogger(__name__) +try: + from Crypto.Cipher import DES3 +except ImportError: + _logger.info("Missing dependency (pycrypto). See README.") + class AcquirerRedsys(models.Model): _inherit = 'payment.acquirer' @@ -59,58 +66,20 @@ def _get_providers(self): ('D', 'Domiciliacion'), ], 'Payment Method', default='T') + redsys_signature_version = fields.Selection( + [('HMAC_SHA256_V1', 'HMAC SHA256 V1')], default='HMAC_SHA256_V1') redsys_url_ok = fields.Char('URL OK') redsys_url_ko = fields.Char('URL KO') - def _redsys_generate_digital_sign(self, acquirer, inout, values): - """ Generate the shasign for incoming or outgoing communications. - :param browse acquirer: the payment.acquirer browse record. It should - have a shakey in shaky out - :param string inout: 'in' (encoding) or 'out' (decoding). - :param dict values: transaction values - - :return string: shasign - """ - assert acquirer.provider == 'redsys' - - def get_value(key): - if values.get(key): - return values[key] - return '' - - if inout == 'out': - keys = ['Ds_Amount', - 'Ds_Order', - 'Ds_MerchantCode', - 'Ds_Currency', - 'Ds_Response'] - else: - keys = ['Ds_Merchant_Amount', - 'Ds_Merchant_Order', - 'Ds_Merchant_MerchantCode', - 'Ds_Merchant_Currency', - 'Ds_Merchant_TransactionType', - 'Ds_Merchant_MerchantURL'] - sign = ''.join('%s' % (get_value(k)) for k in keys) - # Add the pre-shared secret key at the end of the signature - sign = sign + acquirer.redsys_secret_key - if isinstance(sign, str): - sign = urlparse.parse_qsl(sign) - shasign = sha1(sign).hexdigest().upper() - return shasign - - @api.model - def redsys_form_generate_values(self, id, partner_values, tx_values): - acquirer = self.browse(id) - redsys_tx_values = dict(tx_values) - redsys_tx_values.update({ + def _prepare_merchant_parameters(self, acquirer, tx_values): + values = { 'Ds_Sermepa_Url': ( self._get_redsys_urls(acquirer.environment)[ 'redsys_form_url']), - 'Ds_Merchant_Amount': int(tx_values['amount'] * 100), + 'Ds_Merchant_Amount': str(int(tx_values['amount'] * 100)), 'Ds_Merchant_Currency': acquirer.redsys_currency or '978', 'Ds_Merchant_Order': ( - tx_values['reference'] and tx_values['reference'][:12] or + tx_values['reference'] and tx_values['reference'][-12:] or False), 'Ds_Merchant_MerchantCode': ( acquirer.redsys_merchant_code and @@ -124,7 +93,7 @@ def redsys_form_generate_values(self, id, partner_values, tx_values): 'Ds_Merchant_MerchantName': ( acquirer.redsys_merchant_name and acquirer.redsys_merchant_name[:25]), - 'Ds_Merchant_MerchantURL': ( + 'Ds_Merchant_MerchantUrl': ( acquirer.redsys_merchant_url and acquirer.redsys_merchant_url[:250] or ''), 'Ds_Merchant_MerchantData': acquirer.redsys_merchant_data or '', @@ -134,14 +103,51 @@ def redsys_form_generate_values(self, id, partner_values, tx_values): acquirer.redsys_merchant_description[:125]), 'Ds_Merchant_ConsumerLanguage': ( acquirer.redsys_merchant_lang or '001'), - 'Ds_Merchant_UrlOK': acquirer.redsys_url_ok or '', - 'Ds_Merchant_UrlKO': acquirer.redsys_url_ko or '', - 'Ds_Merchant_PayMethods': acquirer.redsys_pay_method or 'T', - }) + 'Ds_Merchant_UrlOk': acquirer.redsys_url_ok or '', + 'Ds_Merchant_UrlKo': acquirer.redsys_url_ko or '', + 'Ds_Merchant_Paymethods': acquirer.redsys_pay_method or 'T', + } + return self._url_encode64(json.dumps(values)) + + def _url_encode64(self, data): + data = unicode(base64.encodestring(data), 'utf-8') + return ''.join(data.splitlines()) - redsys_tx_values['Ds_Merchant_MerchantSignature'] = ( - self._redsys_generate_digital_sign( - acquirer, 'in', redsys_tx_values)) + def _url_decode64(self, data): + return json.loads(base64.b64decode(data)) + + 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(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 '' + key = cipher.encrypt(order + zeros.encode('UTF-8')) + dig = hmac.new( + key=key, + msg=params64, + digestmod=hashlib.sha256).digest() + return self._url_encode64(dig) + + @api.model + def redsys_form_generate_values(self, id, partner_values, tx_values): + acquirer = self.browse(id) + redsys_tx_values = dict(tx_values) + + merchant_parameters = self._prepare_merchant_parameters( + acquirer, tx_values) + redsys_tx_values.update({ + 'Ds_SignatureVersion': str(acquirer.redsys_signature_version), + 'Ds_MerchantParameters': merchant_parameters, + 'Ds_Signature': self.sign_parameters( + acquirer.redsys_secret_key, merchant_parameters), + }) return partner_values, redsys_tx_values @api.multi @@ -162,6 +168,10 @@ class TxRedsys(models.Model): redsys_txnid = fields.Char('Transaction ID') + def merchant_params_json2dict(self, data): + parameters = data.get('Ds_MerchantParameters', '').decode('base64') + return json.loads(parameters) + # -------------------------------------------------- # FORM RELATED METHODS # -------------------------------------------------- @@ -170,9 +180,13 @@ class TxRedsys(models.Model): def _redsys_form_get_tx_from_data(self, data): """ Given a data dict coming from redsys, verify it and find the related transaction record. """ - reference = data.get('Ds_Order', '') - pay_id = data.get('Ds_AuthorisationCode') - shasign = data.get('Ds_Signature') + parameters = data.get('Ds_MerchantParameters', '') + parameters_dic = json.loads(base64.b64decode(parameters)) + reference = parameters_dic.get('Ds_Order', '') + pay_id = parameters_dic.get('Ds_AuthorisationCode') + shasign = data.get( + 'Ds_Signature', '').replace('_', '/').replace('-', '+') + 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, @@ -191,10 +205,9 @@ def _redsys_form_get_tx_from_data(self, data): raise ValidationError(error_msg) # verify shasign - acquirer = self.env['payment.acquirer'] - shasign_check = acquirer._redsys_generate_digital_sign( - tx.acquirer_id, 'out', data) - if shasign_check.upper() != shasign.upper(): + 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.error(error_msg) @@ -204,27 +217,30 @@ def _redsys_form_get_tx_from_data(self, data): @api.model def _redsys_form_get_invalid_parameters(self, tx, data): invalid_parameters = [] - + parameters_dic = self.merchant_params_json2dict(data) if (tx.acquirer_reference and - data.get('Ds_Order')) != tx.acquirer_reference: + parameters_dic.get('Ds_Order')) != tx.acquirer_reference: invalid_parameters.append( - ('Transaction Id', data.get('Ds_Order'), + ('Transaction Id', parameters_dic.get('Ds_Order'), tx.acquirer_reference)) # check what is buyed - if (float_compare(float(data.get('Ds_Amount', '0.0')) / 100, + if (float_compare(float(parameters_dic.get('Ds_Amount', '0.0')) / 100, tx.amount, 2) != 0): - invalid_parameters.append(('Amount', data.get('Ds_Amount'), - '%.2f' % tx.amount)) + invalid_parameters.append( + ('Amount', parameters_dic.get('Ds_Amount'), + '%.2f' % tx.amount)) return invalid_parameters @api.model def _redsys_form_validate(self, tx, data): - status_code = int(data.get('Ds_Response', '29999')) + parameters_dic = self.merchant_params_json2dict(data) + status_code = int(parameters_dic.get('Ds_Response', '29999')) if (status_code >= 0) and (status_code <= 99): tx.write({ 'state': 'done', - 'redsys_txnid': data.get('Ds_AuthorisationCode'), - 'state_message': _('Ok: %s') % data.get('Ds_Response'), + 'redsys_txnid': parameters_dic.get('Ds_AuthorisationCode'), + 'state_message': _('Ok: %s') % parameters_dic.get( + 'Ds_Response'), }) email_act = tx.sale_order_id.action_quotation_send() # send the email @@ -235,17 +251,18 @@ def _redsys_form_validate(self, tx, data): # 'Payment error: code: %s.' tx.write({ 'state': 'pending', - 'redsys_txnid': data.get('Ds_AuthorisationCode'), - 'state_message': _('Error: %s') % data.get('Ds_Response'), + 'redsys_txnid': parameters_dic.get('Ds_AuthorisationCode'), + 'state_message': _('Error: %s') % parameters_dic.get( + 'Ds_Response'), }) return True if (status_code == 912) and (status_code == 9912): # 'Payment error: bank unavailable.' tx.write({ 'state': 'cancel', - 'redsys_txnid': data.get('Ds_AuthorisationCode'), + 'redsys_txnid': parameters_dic.get('Ds_AuthorisationCode'), 'state_message': (_('Bank Error: %s') - % data.get('Ds_Response')), + % parameters_dic.get('Ds_Response')), }) return True else: @@ -253,7 +270,7 @@ def _redsys_form_validate(self, tx, data): _logger.info(error) tx.write({ 'state': 'error', - 'redsys_txnid': data.get('Ds_AuthorisationCode'), + 'redsys_txnid': parameters_dic.get('Ds_AuthorisationCode'), 'state_message': error, }) return False diff --git a/payment_redsys/views/payment_acquirer.xml b/payment_redsys/views/payment_acquirer.xml index 5c4c9589890..e5207ad3e3c 100644 --- a/payment_redsys/views/payment_acquirer.xml +++ b/payment_redsys/views/payment_acquirer.xml @@ -21,6 +21,7 @@ + diff --git a/payment_redsys/views/redsys.xml b/payment_redsys/views/redsys.xml index 621a0e996be..3f87928d57a 100644 --- a/payment_redsys/views/redsys.xml +++ b/payment_redsys/views/redsys.xml @@ -1,33 +1,23 @@ - + - + - + From aa2a3bab8cc2fd0e83f8d64d7cb21533390d3b01 Mon Sep 17 00:00:00 2001 From: eantones Date: Mon, 23 Nov 2015 18:25:20 +0100 Subject: [PATCH 06/52] [FIX] payment_redsys: Renaming class name yields unwanted side effect. --- payment_redsys/controllers/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/payment_redsys/controllers/main.py b/payment_redsys/controllers/main.py index 2086cce14d0..3df21fd87f7 100644 --- a/payment_redsys/controllers/main.py +++ b/payment_redsys/controllers/main.py @@ -40,7 +40,7 @@ class WebsiteSale(website_sale): @http.route(['/shop/payment/transaction/'], type='json', auth="public", website=True) def payment_transaction(self, acquirer_id): - tx_id = super(website_sale, self).payment_transaction(acquirer_id) + tx_id = super(WebsiteSale, self).payment_transaction(acquirer_id) cr, context = request.cr, request.context acquirer_obj = request.registry.get('payment.acquirer') acquirer = acquirer_obj.browse( From 5daef2598ff4ccb88ce1cf48df622b8a814b78e8 Mon Sep 17 00:00:00 2001 From: sergio-incaser Date: Fri, 27 Nov 2015 11:03:38 +0100 Subject: [PATCH 07/52] [IMP] payment_redsys: Change payment logo --- payment_redsys/static/src/img/redsys_icon.png | Bin 9137 -> 5568 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/payment_redsys/static/src/img/redsys_icon.png b/payment_redsys/static/src/img/redsys_icon.png index a61bb7a3888827e77f843903e616e64fa45e6e7a..d47ef57cc1d43f47441b9d29bb52082f3fa26c38 100644 GIT binary patch literal 5568 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 O0000y!0000PbVXQnQ*UN; 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 Date: Mon, 30 Nov 2015 10:35:04 +0100 Subject: [PATCH 08/52] [IMP] payment_redsys: 3 enhancements: * Make quotation sending optional when a transaction ends without error website_sale module already sends an e-mail with the confirmed order, so it May not be necessary to send another e-mail with the same order unconfirmed. * Add more Redsys frontend languages * Remove options tab --- payment_redsys/i18n/en.po | 22 +++++++++++++------ payment_redsys/i18n/es.po | 22 +++++++++++++------ payment_redsys/i18n/gl.po | 22 +++++++++++++------ payment_redsys/models/redsys.py | 26 +++++++++++++++++------ payment_redsys/views/payment_acquirer.xml | 5 ++++- 5 files changed, 72 insertions(+), 25 deletions(-) diff --git a/payment_redsys/i18n/en.po b/payment_redsys/i18n/en.po index 4589dda5e57..e06c0f0ce8c 100644 --- a/payment_redsys/i18n/en.po +++ b/payment_redsys/i18n/en.po @@ -7,9 +7,9 @@ msgid "" msgstr "" "Project-Id-Version: l10n-spain (8.0)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-08-14 00:52+0000\n" -"PO-Revision-Date: 2015-05-23 08:55+0000\n" -"Last-Translator: Pedro M. Baeza \n" +"POT-Creation-Date: 2015-11-26 01:42+0000\n" +"PO-Revision-Date: 2015-11-23 07:53+0000\n" +"Last-Translator: OCA Transbot \n" "Language-Team: English (http://www.transifex.com/oca/OCA-l10n-spain-8-0/language/en/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,7 +18,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: payment_redsys -#: code:addons/payment_redsys/models/redsys.py:247 +#: code:addons/payment_redsys/models/redsys.py:264 #, python-format msgid "Bank Error: %s" msgstr "Bank Error: %s" @@ -39,7 +39,7 @@ msgid "Domiciliacion" msgstr "Domiciliacion" #. module: payment_redsys -#: code:addons/payment_redsys/models/redsys.py:239 +#: code:addons/payment_redsys/models/redsys.py:255 #, python-format msgid "Error: %s" msgstr "Error: %s" @@ -49,6 +49,11 @@ msgstr "Error: %s" msgid "Frances" msgstr "Frances" +#. module: payment_redsys +#: selection:payment.acquirer,redsys_signature_version:0 +msgid "HMAC SHA256 V1" +msgstr "HMAC SHA256 V1" + #. module: payment_redsys #: field:payment.acquirer,redsys_merchant_lang:0 msgid "Merchant Consumer Language" @@ -80,7 +85,7 @@ msgid "Merchant code" msgstr "Merchant code" #. module: payment_redsys -#: code:addons/payment_redsys/models/redsys.py:227 +#: code:addons/payment_redsys/models/redsys.py:242 #, python-format msgid "Ok: %s" msgstr "Ok: %s" @@ -120,6 +125,11 @@ msgstr "Product Description" msgid "Redsys TX Details" msgstr "Redsys TX Details" +#. module: payment_redsys +#: field:payment.acquirer,redsys_signature_version:0 +msgid "Redsys signature version" +msgstr "Redsys signature version" + #. module: payment_redsys #: field:payment.acquirer,redsys_secret_key:0 msgid "Secret Key" diff --git a/payment_redsys/i18n/es.po b/payment_redsys/i18n/es.po index fd6533d7656..f31e94e962f 100644 --- a/payment_redsys/i18n/es.po +++ b/payment_redsys/i18n/es.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: l10n-spain (8.0)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-09-09 15:09+0000\n" -"PO-Revision-Date: 2015-09-01 23:46+0000\n" -"Last-Translator: Alejandro Santana \n" +"POT-Creation-Date: 2015-11-26 01:42+0000\n" +"PO-Revision-Date: 2015-11-23 07:53+0000\n" +"Last-Translator: OCA Transbot \n" "Language-Team: Spanish (http://www.transifex.com/oca/OCA-l10n-spain-8-0/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,7 +21,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: payment_redsys -#: code:addons/payment_redsys/models/redsys.py:247 +#: code:addons/payment_redsys/models/redsys.py:264 #, python-format msgid "Bank Error: %s" msgstr "Error del banco: %s" @@ -42,7 +42,7 @@ msgid "Domiciliacion" msgstr "Domiciliación" #. module: payment_redsys -#: code:addons/payment_redsys/models/redsys.py:239 +#: code:addons/payment_redsys/models/redsys.py:255 #, python-format msgid "Error: %s" msgstr "Error: %s" @@ -52,6 +52,11 @@ msgstr "Error: %s" msgid "Frances" msgstr "Francés" +#. module: payment_redsys +#: selection:payment.acquirer,redsys_signature_version:0 +msgid "HMAC SHA256 V1" +msgstr "" + #. module: payment_redsys #: field:payment.acquirer,redsys_merchant_lang:0 msgid "Merchant Consumer Language" @@ -83,7 +88,7 @@ msgid "Merchant code" msgstr "Código de comerciante" #. module: payment_redsys -#: code:addons/payment_redsys/models/redsys.py:227 +#: code:addons/payment_redsys/models/redsys.py:242 #, python-format msgid "Ok: %s" msgstr "Ok: %s" @@ -123,6 +128,11 @@ msgstr "Descripción del producto" msgid "Redsys TX Details" msgstr "Detalles de transmisión Redsys" +#. module: payment_redsys +#: field:payment.acquirer,redsys_signature_version:0 +msgid "Redsys signature version" +msgstr "" + #. module: payment_redsys #: field:payment.acquirer,redsys_secret_key:0 msgid "Secret Key" diff --git a/payment_redsys/i18n/gl.po b/payment_redsys/i18n/gl.po index 42dba221d86..db8acac9b1f 100644 --- a/payment_redsys/i18n/gl.po +++ b/payment_redsys/i18n/gl.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: l10n-spain (8.0)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-08-14 00:52+0000\n" -"PO-Revision-Date: 2015-06-26 00:33+0000\n" -"Last-Translator: Alejandro Santana \n" +"POT-Creation-Date: 2015-11-26 01:42+0000\n" +"PO-Revision-Date: 2015-11-23 07:53+0000\n" +"Last-Translator: OCA Transbot \n" "Language-Team: Galician (http://www.transifex.com/oca/OCA-l10n-spain-8-0/language/gl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,7 +19,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: payment_redsys -#: code:addons/payment_redsys/models/redsys.py:247 +#: code:addons/payment_redsys/models/redsys.py:264 #, python-format msgid "Bank Error: %s" msgstr "Erro do banco: %s" @@ -40,7 +40,7 @@ msgid "Domiciliacion" msgstr "Domiciliación" #. module: payment_redsys -#: code:addons/payment_redsys/models/redsys.py:239 +#: code:addons/payment_redsys/models/redsys.py:255 #, python-format msgid "Error: %s" msgstr "Erro: %s" @@ -50,6 +50,11 @@ msgstr "Erro: %s" msgid "Frances" msgstr "Francés" +#. module: payment_redsys +#: selection:payment.acquirer,redsys_signature_version:0 +msgid "HMAC SHA256 V1" +msgstr "" + #. module: payment_redsys #: field:payment.acquirer,redsys_merchant_lang:0 msgid "Merchant Consumer Language" @@ -81,7 +86,7 @@ msgid "Merchant code" msgstr "Código do comerciante" #. module: payment_redsys -#: code:addons/payment_redsys/models/redsys.py:227 +#: code:addons/payment_redsys/models/redsys.py:242 #, python-format msgid "Ok: %s" msgstr "OK: %s" @@ -121,6 +126,11 @@ msgstr "Descrición do produto" msgid "Redsys TX Details" msgstr "Detalles Redsys TX" +#. module: payment_redsys +#: field:payment.acquirer,redsys_signature_version:0 +msgid "Redsys signature version" +msgstr "" + #. module: payment_redsys #: field:payment.acquirer,redsys_secret_key:0 msgid "Secret Key" diff --git a/payment_redsys/models/redsys.py b/payment_redsys/models/redsys.py index a912f975861..854f95e0b9d 100644 --- a/payment_redsys/models/redsys.py +++ b/payment_redsys/models/redsys.py @@ -59,8 +59,20 @@ def _get_providers(self): required_if_provider='redsys') redsys_merchant_data = fields.Char('Merchant Data') redsys_merchant_lang = fields.Selection([('001', 'Castellano'), - ('004', 'Frances'), - ], 'Merchant Consumer Language') + ('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'), @@ -70,6 +82,7 @@ def _get_providers(self): [('HMAC_SHA256_V1', 'HMAC SHA256 V1')], default='HMAC_SHA256_V1') redsys_url_ok = fields.Char('URL OK') redsys_url_ko = fields.Char('URL KO') + send_quotation = fields.Boolean('Send quotation', default=True) def _prepare_merchant_parameters(self, acquirer, tx_values): values = { @@ -242,10 +255,11 @@ def _redsys_form_validate(self, tx, data): 'state_message': _('Ok: %s') % parameters_dic.get( 'Ds_Response'), }) - email_act = tx.sale_order_id.action_quotation_send() - # send the email - if email_act and email_act.get('context'): - self.send_mail(email_act['context']) + if tx.acquirer_id.send_quotation: + email_act = tx.sale_order_id.action_quotation_send() + # send the email + if email_act and email_act.get('context'): + self.send_mail(email_act['context']) return True if (status_code >= 101) and (status_code <= 202): # 'Payment error: code: %s.' diff --git a/payment_redsys/views/payment_acquirer.xml b/payment_redsys/views/payment_acquirer.xml index e5207ad3e3c..9551e3e72ff 100644 --- a/payment_redsys/views/payment_acquirer.xml +++ b/payment_redsys/views/payment_acquirer.xml @@ -1,7 +1,6 @@ - acquirer.form.redsys payment.acquirer @@ -25,6 +24,9 @@ + + + @@ -46,3 +48,4 @@ + From 3453b6c1e7e893950909f922e147776fd5756555 Mon Sep 17 00:00:00 2001 From: Sergio Teruel Date: Mon, 30 Nov 2015 22:36:39 +0100 Subject: [PATCH 09/52] [IMP] payment_redsys: Change card icon in checkout process. --- payment_redsys/static/src/img/redsys_icon.png | Bin 5568 -> 21570 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/payment_redsys/static/src/img/redsys_icon.png b/payment_redsys/static/src/img/redsys_icon.png index d47ef57cc1d43f47441b9d29bb52082f3fa26c38..92724a7f8827fd09a1df56c4da76d439b20ce096 100644 GIT binary patch literal 21570 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 FV1kgiSUdm# delta 5558 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 Ef{IkWt^fc4 From a1ba06a2f597a7782e49f35196f44739d93e7167 Mon Sep 17 00:00:00 2001 From: Eric Antones Date: Tue, 1 Dec 2015 14:23:14 +0100 Subject: [PATCH 10/52] [FIX+IMP] payment_redsys: 2 things: * Send quotation e-mail invoking force_quotation_send() instead of action_quotation_send() + send_mail() * The function send_mail() does not respect the context language so the email is always sent in English. * It's not necessary to create the function send_mail() to sent an email when exists the method force_quotation_send(). * Add detailed error info --- payment_redsys/i18n/ca.po | 222 ++++++++++++++++++++++++++++++++ payment_redsys/i18n/en.po | 74 ++++++++++- payment_redsys/i18n/es.po | 79 ++++++++++-- payment_redsys/i18n/gl.po | 74 ++++++++++- payment_redsys/models/redsys.py | 32 ++--- 5 files changed, 439 insertions(+), 42 deletions(-) create mode 100644 payment_redsys/i18n/ca.po diff --git a/payment_redsys/i18n/ca.po b/payment_redsys/i18n/ca.po new file mode 100644 index 00000000000..e9f23365df6 --- /dev/null +++ b/payment_redsys/i18n/ca.po @@ -0,0 +1,222 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * payment_redsys +# +# Translators: +# Eric Antones , 2015 +msgid "" +msgstr "" +"Project-Id-Version: l10n-spain (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-12-05 01:43+0000\n" +"PO-Revision-Date: 2015-11-30 23:11+0000\n" +"Last-Translator: OCA Transbot \n" +"Language-Team: Catalan (http://www.transifex.com/oca/OCA-l10n-spain-8-0/language/ca/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ca\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Alemán" +msgstr "" + +#. module: payment_redsys +#: code:addons/payment_redsys/models/redsys.py:278 +#, python-format +msgid "Bank Error: %s" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Castellano" +msgstr "Castellà" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Catalán" +msgstr "" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_currency:0 +msgid "Currency" +msgstr "Moneda" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_pay_method:0 +msgid "Domiciliacion" +msgstr "Domiciliació" + +#. module: payment_redsys +#: code:addons/payment_redsys/models/redsys.py:269 +#, python-format +msgid "Error: %s" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Euskera" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Francés" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Gallego" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_signature_version:0 +msgid "HMAC SHA256 V1" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Holandés" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Inglés" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Italiano" +msgstr "" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_merchant_lang:0 +msgid "Merchant Consumer Language" +msgstr "" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_merchant_data:0 +msgid "Merchant Data" +msgstr "" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_merchant_name:0 +msgid "Merchant Name" +msgstr "" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_merchant_titular:0 +msgid "Merchant Titular" +msgstr "" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_merchant_url:0 +msgid "Merchant URL" +msgstr "" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_merchant_code:0 +msgid "Merchant code" +msgstr "" + +#. module: payment_redsys +#: code:addons/payment_redsys/models/redsys.py:255 +#, python-format +msgid "Ok: %s" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_pay_method:0 +msgid "Pago con Tarjeta" +msgstr "Pagament amb targeta" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_pay_method:0 +msgid "Pago por Transferencia" +msgstr "Pagament per transferència" + +#. module: payment_redsys +#: model:ir.model,name:payment_redsys.model_payment_acquirer +msgid "Payment Acquirer" +msgstr "" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_pay_method:0 +msgid "Payment Method" +msgstr "Mètode de pagament" + +#. module: payment_redsys +#: model:ir.model,name:payment_redsys.model_payment_transaction +msgid "Payment Transaction" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Polaco" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Portugués" +msgstr "" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_merchant_description:0 +msgid "Product Description" +msgstr "Descripció del producte" + +#. module: payment_redsys +#: view:payment.transaction:payment_redsys.transaction_form_redsys +msgid "Redsys TX Details" +msgstr "" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_signature_version:0 +msgid "Redsys signature version" +msgstr "Versió de signatura Redsys" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_secret_key:0 +msgid "Secret Key" +msgstr "Clau secreta" + +#. module: payment_redsys +#: field:payment.acquirer,send_quotation:0 +msgid "Send quotation" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Sueco" +msgstr "" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_terminal:0 +msgid "Terminal" +msgstr "Terminal" + +#. module: payment_redsys +#: field:payment.transaction,redsys_txnid:0 +msgid "Transaction ID" +msgstr "ID de transacció" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_transaction_type:0 +msgid "Transtaction Type" +msgstr "Tipus de transacció" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_url_ko:0 +msgid "URL KO" +msgstr "" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_url_ok:0 +msgid "URL OK" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Valenciano" +msgstr "" diff --git a/payment_redsys/i18n/en.po b/payment_redsys/i18n/en.po index e06c0f0ce8c..4dd6e889b33 100644 --- a/payment_redsys/i18n/en.po +++ b/payment_redsys/i18n/en.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: l10n-spain (8.0)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-11-26 01:42+0000\n" -"PO-Revision-Date: 2015-11-23 07:53+0000\n" +"POT-Creation-Date: 2015-12-05 01:43+0000\n" +"PO-Revision-Date: 2015-11-30 23:11+0000\n" "Last-Translator: OCA Transbot \n" "Language-Team: English (http://www.transifex.com/oca/OCA-l10n-spain-8-0/language/en/)\n" "MIME-Version: 1.0\n" @@ -18,7 +18,12 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: payment_redsys -#: code:addons/payment_redsys/models/redsys.py:264 +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Alemán" +msgstr "Alemán" + +#. module: payment_redsys +#: code:addons/payment_redsys/models/redsys.py:278 #, python-format msgid "Bank Error: %s" msgstr "Bank Error: %s" @@ -28,6 +33,11 @@ msgstr "Bank Error: %s" msgid "Castellano" msgstr "Castellano" +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Catalán" +msgstr "Catalán" + #. module: payment_redsys #: field:payment.acquirer,redsys_currency:0 msgid "Currency" @@ -39,21 +49,46 @@ msgid "Domiciliacion" msgstr "Domiciliacion" #. module: payment_redsys -#: code:addons/payment_redsys/models/redsys.py:255 +#: code:addons/payment_redsys/models/redsys.py:269 #, python-format msgid "Error: %s" msgstr "Error: %s" #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 -msgid "Frances" -msgstr "Frances" +msgid "Euskera" +msgstr "Euskera" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Francés" +msgstr "Francés" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Gallego" +msgstr "Gallego" #. module: payment_redsys #: selection:payment.acquirer,redsys_signature_version:0 msgid "HMAC SHA256 V1" msgstr "HMAC SHA256 V1" +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Holandés" +msgstr "Holandés" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Inglés" +msgstr "Inglés" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Italiano" +msgstr "Italiano" + #. module: payment_redsys #: field:payment.acquirer,redsys_merchant_lang:0 msgid "Merchant Consumer Language" @@ -85,7 +120,7 @@ msgid "Merchant code" msgstr "Merchant code" #. module: payment_redsys -#: code:addons/payment_redsys/models/redsys.py:242 +#: code:addons/payment_redsys/models/redsys.py:255 #, python-format msgid "Ok: %s" msgstr "Ok: %s" @@ -115,6 +150,16 @@ msgstr "Payment Method" msgid "Payment Transaction" msgstr "Payment Transaction" +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Polaco" +msgstr "Polaco" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Portugués" +msgstr "Portugués" + #. module: payment_redsys #: field:payment.acquirer,redsys_merchant_description:0 msgid "Product Description" @@ -135,6 +180,16 @@ msgstr "Redsys signature version" msgid "Secret Key" msgstr "Secret Key" +#. module: payment_redsys +#: field:payment.acquirer,send_quotation:0 +msgid "Send quotation" +msgstr "Send quotation" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Sueco" +msgstr "Sueco" + #. module: payment_redsys #: field:payment.acquirer,redsys_terminal:0 msgid "Terminal" @@ -159,3 +214,8 @@ msgstr "URL KO" #: field:payment.acquirer,redsys_url_ok:0 msgid "URL OK" msgstr "URL OK" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Valenciano" +msgstr "Valenciano" diff --git a/payment_redsys/i18n/es.po b/payment_redsys/i18n/es.po index f31e94e962f..03c4c171b7d 100644 --- a/payment_redsys/i18n/es.po +++ b/payment_redsys/i18n/es.po @@ -4,15 +4,16 @@ # # Translators: # Alejandro Santana , 2015 +# Eric Antones , 2015 # 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: 2015-11-26 01:42+0000\n" -"PO-Revision-Date: 2015-11-23 07:53+0000\n" -"Last-Translator: OCA Transbot \n" +"POT-Creation-Date: 2015-12-05 01:43+0000\n" +"PO-Revision-Date: 2015-12-01 16:17+0000\n" +"Last-Translator: Eric Antones \n" "Language-Team: Spanish (http://www.transifex.com/oca/OCA-l10n-spain-8-0/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,7 +22,12 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: payment_redsys -#: code:addons/payment_redsys/models/redsys.py:264 +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Alemán" +msgstr "" + +#. module: payment_redsys +#: code:addons/payment_redsys/models/redsys.py:278 #, python-format msgid "Bank Error: %s" msgstr "Error del banco: %s" @@ -31,6 +37,11 @@ msgstr "Error del banco: %s" msgid "Castellano" msgstr "Castellano" +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Catalán" +msgstr "" + #. module: payment_redsys #: field:payment.acquirer,redsys_currency:0 msgid "Currency" @@ -42,21 +53,46 @@ msgid "Domiciliacion" msgstr "Domiciliación" #. module: payment_redsys -#: code:addons/payment_redsys/models/redsys.py:255 +#: code:addons/payment_redsys/models/redsys.py:269 #, python-format msgid "Error: %s" msgstr "Error: %s" #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 -msgid "Frances" -msgstr "Francés" +msgid "Euskera" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Francés" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Gallego" +msgstr "" #. module: payment_redsys #: selection:payment.acquirer,redsys_signature_version:0 msgid "HMAC SHA256 V1" msgstr "" +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Holandés" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Inglés" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Italiano" +msgstr "" + #. module: payment_redsys #: field:payment.acquirer,redsys_merchant_lang:0 msgid "Merchant Consumer Language" @@ -88,7 +124,7 @@ msgid "Merchant code" msgstr "Código de comerciante" #. module: payment_redsys -#: code:addons/payment_redsys/models/redsys.py:242 +#: code:addons/payment_redsys/models/redsys.py:255 #, python-format msgid "Ok: %s" msgstr "Ok: %s" @@ -118,6 +154,16 @@ msgstr "Método de pago" msgid "Payment Transaction" msgstr "Transacción de pago" +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Polaco" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Portugués" +msgstr "" + #. module: payment_redsys #: field:payment.acquirer,redsys_merchant_description:0 msgid "Product Description" @@ -131,13 +177,23 @@ msgstr "Detalles de transmisión Redsys" #. module: payment_redsys #: field:payment.acquirer,redsys_signature_version:0 msgid "Redsys signature version" -msgstr "" +msgstr "Versión de la firma Redsys" #. module: payment_redsys #: field:payment.acquirer,redsys_secret_key:0 msgid "Secret Key" msgstr "Clave secreta" +#. module: payment_redsys +#: field:payment.acquirer,send_quotation:0 +msgid "Send quotation" +msgstr "Enviar presupuesto" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Sueco" +msgstr "" + #. module: payment_redsys #: field:payment.acquirer,redsys_terminal:0 msgid "Terminal" @@ -162,3 +218,8 @@ msgstr "URL KO" #: field:payment.acquirer,redsys_url_ok:0 msgid "URL OK" msgstr "URL OK" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Valenciano" +msgstr "" diff --git a/payment_redsys/i18n/gl.po b/payment_redsys/i18n/gl.po index db8acac9b1f..d64efced93a 100644 --- a/payment_redsys/i18n/gl.po +++ b/payment_redsys/i18n/gl.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: l10n-spain (8.0)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-11-26 01:42+0000\n" -"PO-Revision-Date: 2015-11-23 07:53+0000\n" +"POT-Creation-Date: 2015-12-05 01:43+0000\n" +"PO-Revision-Date: 2015-11-30 23:11+0000\n" "Last-Translator: OCA Transbot \n" "Language-Team: Galician (http://www.transifex.com/oca/OCA-l10n-spain-8-0/language/gl/)\n" "MIME-Version: 1.0\n" @@ -19,7 +19,12 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: payment_redsys -#: code:addons/payment_redsys/models/redsys.py:264 +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Alemán" +msgstr "" + +#. module: payment_redsys +#: code:addons/payment_redsys/models/redsys.py:278 #, python-format msgid "Bank Error: %s" msgstr "Erro do banco: %s" @@ -29,6 +34,11 @@ msgstr "Erro do banco: %s" msgid "Castellano" msgstr "Castelán" +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Catalán" +msgstr "" + #. module: payment_redsys #: field:payment.acquirer,redsys_currency:0 msgid "Currency" @@ -40,21 +50,46 @@ msgid "Domiciliacion" msgstr "Domiciliación" #. module: payment_redsys -#: code:addons/payment_redsys/models/redsys.py:255 +#: code:addons/payment_redsys/models/redsys.py:269 #, python-format msgid "Error: %s" msgstr "Erro: %s" #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 -msgid "Frances" -msgstr "Francés" +msgid "Euskera" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Francés" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Gallego" +msgstr "" #. module: payment_redsys #: selection:payment.acquirer,redsys_signature_version:0 msgid "HMAC SHA256 V1" msgstr "" +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Holandés" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Inglés" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Italiano" +msgstr "" + #. module: payment_redsys #: field:payment.acquirer,redsys_merchant_lang:0 msgid "Merchant Consumer Language" @@ -86,7 +121,7 @@ msgid "Merchant code" msgstr "Código do comerciante" #. module: payment_redsys -#: code:addons/payment_redsys/models/redsys.py:242 +#: code:addons/payment_redsys/models/redsys.py:255 #, python-format msgid "Ok: %s" msgstr "OK: %s" @@ -116,6 +151,16 @@ msgstr "Método de pagamento" msgid "Payment Transaction" msgstr "Transación de pagamento" +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Polaco" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Portugués" +msgstr "" + #. module: payment_redsys #: field:payment.acquirer,redsys_merchant_description:0 msgid "Product Description" @@ -136,6 +181,16 @@ msgstr "" msgid "Secret Key" msgstr "Chave secreta" +#. module: payment_redsys +#: field:payment.acquirer,send_quotation:0 +msgid "Send quotation" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Sueco" +msgstr "" + #. module: payment_redsys #: field:payment.acquirer,redsys_terminal:0 msgid "Terminal" @@ -160,3 +215,8 @@ msgstr "URL KO" #: field:payment.acquirer,redsys_url_ok:0 msgid "URL OK" msgstr "URL OK" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Valenciano" +msgstr "" diff --git a/payment_redsys/models/redsys.py b/payment_redsys/models/redsys.py index 854f95e0b9d..74892e0518f 100644 --- a/payment_redsys/models/redsys.py +++ b/payment_redsys/models/redsys.py @@ -256,18 +256,17 @@ def _redsys_form_validate(self, tx, data): 'Ds_Response'), }) if tx.acquirer_id.send_quotation: - email_act = tx.sale_order_id.action_quotation_send() - # send the email - if email_act and email_act.get('context'): - self.send_mail(email_act['context']) + tx.sale_order_id.force_quotation_send() return True if (status_code >= 101) and (status_code <= 202): # 'Payment error: code: %s.' tx.write({ 'state': 'pending', 'redsys_txnid': parameters_dic.get('Ds_AuthorisationCode'), - 'state_message': _('Error: %s') % parameters_dic.get( - 'Ds_Response'), + 'state_message': _('Error: %s (%s)') % ( + parameters_dic.get('Ds_Response'), + parameters_dic.get('Ds_ErrorCode') + ), }) return True if (status_code == 912) and (status_code == 9912): @@ -275,12 +274,17 @@ def _redsys_form_validate(self, tx, data): tx.write({ 'state': 'cancel', 'redsys_txnid': parameters_dic.get('Ds_AuthorisationCode'), - 'state_message': (_('Bank Error: %s') - % parameters_dic.get('Ds_Response')), + 'state_message': _('Bank Error: %s (%s)') % ( + parameters_dic.get('Ds_Response'), + parameters_dic.get('Ds_ErrorCode') + ), }) return True else: - error = 'Redsys: feedback error' + error = _('Redsys: feedback error %s (%s)') % ( + parameters_dic.get('Ds_Response'), + parameters_dic.get('Ds_ErrorCode') + ) _logger.info(error) tx.write({ 'state': 'error', @@ -288,13 +292,3 @@ def _redsys_form_validate(self, tx, data): 'state_message': error, }) return False - - def send_mail(self, email_ctx): - composer_values = {} - template = self.env.ref('sale.email_template_edi_sale', False) - if not template: - return True - email_ctx['default_template_id'] = template.id - composer_id = self.env['mail.compose.message'].with_context( - email_ctx).create(composer_values) - composer_id.with_context(email_ctx).send_mail() From 2aac4faa4bdd4610edcc75e009d5920d72e74235 Mon Sep 17 00:00:00 2001 From: sergio-incaser Date: Thu, 17 Dec 2015 11:00:41 +0100 Subject: [PATCH 11/52] [IMP+FIX] payment_redsys: Logo tarjetas + Show order information after payment + Default values for urk_KO and url_OK + option to print print sale report. Delete url_ok and url_ko fields + Redondeo de merchant_amount --- payment_redsys/__openerp__.py | 2 +- payment_redsys/controllers/main.py | 15 + payment_redsys/i18n/ca.po | 136 +++++-- payment_redsys/i18n/en.po | 116 +++++- payment_redsys/i18n/es.po | 146 ++++++-- payment_redsys/i18n/fr.po | 307 ++++++++++++++++ payment_redsys/i18n/gl.po | 116 +++++- payment_redsys/i18n/payment_redsys.pot | 335 ++++++++++++++++++ payment_redsys/models/redsys.py | 15 +- payment_redsys/static/src/img/redsys_icon.png | Bin 21570 -> 11108 bytes payment_redsys/views/payment_acquirer.xml | 2 - payment_redsys/views/redsys.xml | 184 +++++++++- 12 files changed, 1281 insertions(+), 93 deletions(-) create mode 100644 payment_redsys/i18n/fr.po create mode 100644 payment_redsys/i18n/payment_redsys.pot diff --git a/payment_redsys/__openerp__.py b/payment_redsys/__openerp__.py index 787579dc289..9b0ffc2d6c9 100644 --- a/payment_redsys/__openerp__.py +++ b/payment_redsys/__openerp__.py @@ -4,7 +4,7 @@ 'name': 'Redsys Payment Acquirer', 'category': 'Hidden', 'summary': 'Payment Acquirer: Redsys Implementation', - 'version': '8.0.1.0.0', + 'version': '8.0.1.0.2', 'author': "Incaser Informatica S.L.,Odoo Community Association (OCA)", 'depends': ['payment'], "external_dependencies": { diff --git a/payment_redsys/controllers/main.py b/payment_redsys/controllers/main.py index 3df21fd87f7..086476b1aa9 100644 --- a/payment_redsys/controllers/main.py +++ b/payment_redsys/controllers/main.py @@ -35,6 +35,21 @@ def redsys_return(self, **post): return_url = '/shop' return werkzeug.utils.redirect(return_url) + @http.route( + ['/payment/redsys/result/'], type='http', auth='user', + methods=['GET'], website=True) + def redsys_result(self, page, **vals): + try: + order_id = vals.get('order_id', 0) + sale_obj = request.env['sale.order'] + order = sale_obj.browse(int(order_id)) + res = { + 'order': order, + } + return request.render('payment_redsys.%s' % str(page), res) + except: + return request.render('website.404') + class WebsiteSale(website_sale): @http.route(['/shop/payment/transaction/'], type='json', diff --git a/payment_redsys/i18n/ca.po b/payment_redsys/i18n/ca.po index e9f23365df6..85b3a02e952 100644 --- a/payment_redsys/i18n/ca.po +++ b/payment_redsys/i18n/ca.po @@ -3,14 +3,14 @@ # * payment_redsys # # Translators: -# Eric Antones , 2015 +# Eric Antones , 2015-2016 msgid "" msgstr "" "Project-Id-Version: l10n-spain (8.0)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-12-05 01:43+0000\n" -"PO-Revision-Date: 2015-11-30 23:11+0000\n" -"Last-Translator: OCA Transbot \n" +"POT-Creation-Date: 2016-03-05 10:32+0000\n" +"PO-Revision-Date: 2016-02-29 13:37+0000\n" +"Last-Translator: Eric Antones \n" "Language-Team: Catalan (http://www.transifex.com/oca/OCA-l10n-spain-8-0/language/ca/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,12 +21,17 @@ msgstr "" #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 msgid "Alemán" -msgstr "" +msgstr "Alemany" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Back to shop" +msgstr "Tornar a la botiga" #. module: payment_redsys -#: code:addons/payment_redsys/models/redsys.py:278 +#: code:addons/payment_redsys/models/redsys.py:282 #, python-format -msgid "Bank Error: %s" +msgid "Bank Error: %s (%s)" msgstr "" #. module: payment_redsys @@ -37,22 +42,32 @@ msgstr "Castellà" #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 msgid "Catalán" -msgstr "" +msgstr "Català" #. module: payment_redsys #: field:payment.acquirer,redsys_currency:0 msgid "Currency" msgstr "Moneda" +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Date:" +msgstr "Data:" + #. module: payment_redsys #: selection:payment.acquirer,redsys_pay_method:0 msgid "Domiciliacion" msgstr "Domiciliació" #. module: payment_redsys -#: code:addons/payment_redsys/models/redsys.py:269 +#: view:website:payment_redsys.redsys_result_ko +msgid "En error ocurred." +msgstr "" + +#. module: payment_redsys +#: code:addons/payment_redsys/models/redsys.py:271 #, python-format -msgid "Error: %s" +msgid "Error: %s (%s)" msgstr "" #. module: payment_redsys @@ -63,12 +78,12 @@ msgstr "" #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 msgid "Francés" -msgstr "" +msgstr "Francès" #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 msgid "Gallego" -msgstr "" +msgstr "Gallec" #. module: payment_redsys #: selection:payment.acquirer,redsys_signature_version:0 @@ -78,17 +93,22 @@ msgstr "" #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 msgid "Holandés" -msgstr "" +msgstr "Holandès" #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 msgid "Inglés" -msgstr "" +msgstr "Anglès" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Invoicing Address" +msgstr "Adreça de facturació" #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 msgid "Italiano" -msgstr "" +msgstr "Italià" #. module: payment_redsys #: field:payment.acquirer,redsys_merchant_lang:0 @@ -121,11 +141,16 @@ msgid "Merchant code" msgstr "" #. module: payment_redsys -#: code:addons/payment_redsys/models/redsys.py:255 +#: code:addons/payment_redsys/models/redsys.py:260 #, python-format msgid "Ok: %s" msgstr "" +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Order" +msgstr "Comanda" + #. module: payment_redsys #: selection:payment.acquirer,redsys_pay_method:0 msgid "Pago con Tarjeta" @@ -151,21 +176,36 @@ msgstr "Mètode de pagament" msgid "Payment Transaction" msgstr "" +#. module: payment_redsys +#: view:website:payment_redsys.redsys_result_ko +msgid "Please contact with us and inform you about your order." +msgstr "" + #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 msgid "Polaco" -msgstr "" +msgstr "Polac" #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 msgid "Portugués" -msgstr "" +msgstr "Portuguès" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Product" +msgstr "Producte" #. module: payment_redsys #: field:payment.acquirer,redsys_merchant_description:0 msgid "Product Description" msgstr "Descripció del producte" +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Quantity" +msgstr "Quantitat" + #. module: payment_redsys #: view:payment.transaction:payment_redsys.transaction_form_redsys msgid "Redsys TX Details" @@ -176,6 +216,12 @@ msgstr "" msgid "Redsys signature version" msgstr "Versió de signatura Redsys" +#. module: payment_redsys +#: code:addons/payment_redsys/models/redsys.py:289 +#, python-format +msgid "Redsys: feedback error %s (%s)" +msgstr "" + #. module: payment_redsys #: field:payment.acquirer,redsys_secret_key:0 msgid "Secret Key" @@ -184,18 +230,48 @@ msgstr "Clau secreta" #. module: payment_redsys #: field:payment.acquirer,send_quotation:0 msgid "Send quotation" +msgstr "Enviar pressupost" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Shipping Address" +msgstr "Adreça d'enviament" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Subtotal" msgstr "" #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 msgid "Sueco" -msgstr "" +msgstr "Suec" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Taxes:" +msgstr "Impostos:" #. module: payment_redsys #: field:payment.acquirer,redsys_terminal:0 msgid "Terminal" msgstr "Terminal" +#. module: payment_redsys +#: view:website:payment_redsys.redsys_result_ok +msgid "Thanks for you order." +msgstr "Gràcies per la teva comanda." + +#. module: payment_redsys +#: view:website:payment_redsys.redsys_result_ko +msgid "The payment of your order has failed" +msgstr "" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Total:" +msgstr "Total:" + #. module: payment_redsys #: field:payment.transaction,redsys_txnid:0 msgid "Transaction ID" @@ -207,16 +283,26 @@ msgid "Transtaction Type" msgstr "Tipus de transacció" #. module: payment_redsys -#: field:payment.acquirer,redsys_url_ko:0 -msgid "URL KO" -msgstr "" +#: view:website:payment_redsys.order +msgid "Unit Price" +msgstr "Preu unitari" #. module: payment_redsys -#: field:payment.acquirer,redsys_url_ok:0 -msgid "URL OK" -msgstr "" +#: view:website:payment_redsys.order +msgid "Untaxed Amount:" +msgstr "Import sense impostos:" #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 msgid "Valenciano" +msgstr "Valencià" + +#. module: payment_redsys +#: view:website:payment_redsys.redsys_result_ok +msgid "We will inform you of your order status" +msgstr "" + +#. module: payment_redsys +#: view:website:payment_redsys.redsys_result_ok +msgid "Your order has been paid correctly" msgstr "" diff --git a/payment_redsys/i18n/en.po b/payment_redsys/i18n/en.po index 4dd6e889b33..1f3df01c2e5 100644 --- a/payment_redsys/i18n/en.po +++ b/payment_redsys/i18n/en.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: l10n-spain (8.0)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-12-05 01:43+0000\n" -"PO-Revision-Date: 2015-11-30 23:11+0000\n" +"POT-Creation-Date: 2016-02-26 01:41+0000\n" +"PO-Revision-Date: 2016-02-25 17:16+0000\n" "Last-Translator: OCA Transbot \n" "Language-Team: English (http://www.transifex.com/oca/OCA-l10n-spain-8-0/language/en/)\n" "MIME-Version: 1.0\n" @@ -23,10 +23,15 @@ msgid "Alemán" msgstr "Alemán" #. module: payment_redsys -#: code:addons/payment_redsys/models/redsys.py:278 +#: view:website:payment_redsys.order +msgid "Back to shop" +msgstr "Back to shop" + +#. module: payment_redsys +#: code:addons/payment_redsys/models/redsys.py:282 #, python-format -msgid "Bank Error: %s" -msgstr "Bank Error: %s" +msgid "Bank Error: %s (%s)" +msgstr "Bank Error: %s (%s)" #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 @@ -43,16 +48,26 @@ msgstr "Catalán" msgid "Currency" msgstr "Currency" +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Date:" +msgstr "Date:" + #. module: payment_redsys #: selection:payment.acquirer,redsys_pay_method:0 msgid "Domiciliacion" msgstr "Domiciliacion" #. module: payment_redsys -#: code:addons/payment_redsys/models/redsys.py:269 +#: view:website:payment_redsys.redsys_result_ko +msgid "En error ocurred." +msgstr "En error ocurred." + +#. module: payment_redsys +#: code:addons/payment_redsys/models/redsys.py:271 #, python-format -msgid "Error: %s" -msgstr "Error: %s" +msgid "Error: %s (%s)" +msgstr "Error: %s (%s)" #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 @@ -84,6 +99,11 @@ msgstr "Holandés" msgid "Inglés" msgstr "Inglés" +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Invoicing Address" +msgstr "Invoicing Address" + #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 msgid "Italiano" @@ -120,11 +140,16 @@ msgid "Merchant code" msgstr "Merchant code" #. module: payment_redsys -#: code:addons/payment_redsys/models/redsys.py:255 +#: code:addons/payment_redsys/models/redsys.py:260 #, python-format msgid "Ok: %s" msgstr "Ok: %s" +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Order" +msgstr "Order" + #. module: payment_redsys #: selection:payment.acquirer,redsys_pay_method:0 msgid "Pago con Tarjeta" @@ -150,6 +175,11 @@ msgstr "Payment Method" msgid "Payment Transaction" msgstr "Payment Transaction" +#. module: payment_redsys +#: view:website:payment_redsys.redsys_result_ko +msgid "Please contact with us and inform you about your order." +msgstr "Please contact with us and inform you about your order." + #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 msgid "Polaco" @@ -160,11 +190,21 @@ msgstr "Polaco" msgid "Portugués" msgstr "Portugués" +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Product" +msgstr "Product" + #. module: payment_redsys #: field:payment.acquirer,redsys_merchant_description:0 msgid "Product Description" msgstr "Product Description" +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Quantity" +msgstr "Quantity" + #. module: payment_redsys #: view:payment.transaction:payment_redsys.transaction_form_redsys msgid "Redsys TX Details" @@ -175,6 +215,12 @@ msgstr "Redsys TX Details" msgid "Redsys signature version" msgstr "Redsys signature version" +#. module: payment_redsys +#: code:addons/payment_redsys/models/redsys.py:289 +#, python-format +msgid "Redsys: feedback error %s (%s)" +msgstr "Redsys: feedback error %s (%s)" + #. module: payment_redsys #: field:payment.acquirer,redsys_secret_key:0 msgid "Secret Key" @@ -185,16 +231,46 @@ msgstr "Secret Key" msgid "Send quotation" msgstr "Send quotation" +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Shipping Address" +msgstr "Shipping Address" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Subtotal" +msgstr "Subtotal" + #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 msgid "Sueco" msgstr "Sueco" +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Taxes:" +msgstr "Taxes:" + #. module: payment_redsys #: field:payment.acquirer,redsys_terminal:0 msgid "Terminal" msgstr "Terminal" +#. module: payment_redsys +#: view:website:payment_redsys.redsys_result_ok +msgid "Thanks for you order." +msgstr "Thanks for you order." + +#. module: payment_redsys +#: view:website:payment_redsys.redsys_result_ko +msgid "The payment of your order has failed" +msgstr "The payment of your order has failed" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Total:" +msgstr "Total:" + #. module: payment_redsys #: field:payment.transaction,redsys_txnid:0 msgid "Transaction ID" @@ -206,16 +282,26 @@ msgid "Transtaction Type" msgstr "Transtaction Type" #. module: payment_redsys -#: field:payment.acquirer,redsys_url_ko:0 -msgid "URL KO" -msgstr "URL KO" +#: view:website:payment_redsys.order +msgid "Unit Price" +msgstr "Unit Price" #. module: payment_redsys -#: field:payment.acquirer,redsys_url_ok:0 -msgid "URL OK" -msgstr "URL OK" +#: view:website:payment_redsys.order +msgid "Untaxed Amount:" +msgstr "Untaxed Amount:" #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 msgid "Valenciano" msgstr "Valenciano" + +#. module: payment_redsys +#: view:website:payment_redsys.redsys_result_ok +msgid "We will inform you of your order status" +msgstr "We will inform you of your order status" + +#. module: payment_redsys +#: view:website:payment_redsys.redsys_result_ok +msgid "Your order has been paid correctly" +msgstr "Your order has been paid correctly" diff --git a/payment_redsys/i18n/es.po b/payment_redsys/i18n/es.po index 03c4c171b7d..feaad96c1f0 100644 --- a/payment_redsys/i18n/es.po +++ b/payment_redsys/i18n/es.po @@ -4,6 +4,8 @@ # # Translators: # Alejandro Santana , 2015 +# Antonio Trueba, 2016 +# Antonio Trueba, 2016 # Eric Antones , 2015 # Oihane Crucelaegui , 2015 # Pedro M. Baeza , 2015 @@ -11,9 +13,9 @@ msgid "" msgstr "" "Project-Id-Version: l10n-spain (8.0)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-12-05 01:43+0000\n" -"PO-Revision-Date: 2015-12-01 16:17+0000\n" -"Last-Translator: Eric Antones \n" +"POT-Creation-Date: 2016-02-26 01:41+0000\n" +"PO-Revision-Date: 2016-02-25 17:16+0000\n" +"Last-Translator: OCA Transbot \n" "Language-Team: Spanish (http://www.transifex.com/oca/OCA-l10n-spain-8-0/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -24,13 +26,18 @@ msgstr "" #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 msgid "Alemán" -msgstr "" +msgstr "Alemán" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Back to shop" +msgstr "Volver a tienda" #. module: payment_redsys -#: code:addons/payment_redsys/models/redsys.py:278 +#: code:addons/payment_redsys/models/redsys.py:282 #, python-format -msgid "Bank Error: %s" -msgstr "Error del banco: %s" +msgid "Bank Error: %s (%s)" +msgstr "" #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 @@ -40,58 +47,73 @@ msgstr "Castellano" #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 msgid "Catalán" -msgstr "" +msgstr "Catalán" #. module: payment_redsys #: field:payment.acquirer,redsys_currency:0 msgid "Currency" msgstr "Moneda" +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Date:" +msgstr "Fecha:" + #. module: payment_redsys #: selection:payment.acquirer,redsys_pay_method:0 msgid "Domiciliacion" msgstr "Domiciliación" #. module: payment_redsys -#: code:addons/payment_redsys/models/redsys.py:269 +#: view:website:payment_redsys.redsys_result_ko +msgid "En error ocurred." +msgstr "Ha ocurrido un error" + +#. module: payment_redsys +#: code:addons/payment_redsys/models/redsys.py:271 #, python-format -msgid "Error: %s" -msgstr "Error: %s" +msgid "Error: %s (%s)" +msgstr "" #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 msgid "Euskera" -msgstr "" +msgstr "Euskera" #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 msgid "Francés" -msgstr "" +msgstr "Francés" #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 msgid "Gallego" -msgstr "" +msgstr "Gallego" #. module: payment_redsys #: selection:payment.acquirer,redsys_signature_version:0 msgid "HMAC SHA256 V1" -msgstr "" +msgstr "HMAC SHA256 V1" #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 msgid "Holandés" -msgstr "" +msgstr "Holandés" #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 msgid "Inglés" -msgstr "" +msgstr "Inglés" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Invoicing Address" +msgstr "Dirección de facturación" #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 msgid "Italiano" -msgstr "" +msgstr "Italiano / Italiano" #. module: payment_redsys #: field:payment.acquirer,redsys_merchant_lang:0 @@ -124,11 +146,16 @@ msgid "Merchant code" msgstr "Código de comerciante" #. module: payment_redsys -#: code:addons/payment_redsys/models/redsys.py:255 +#: code:addons/payment_redsys/models/redsys.py:260 #, python-format msgid "Ok: %s" msgstr "Ok: %s" +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Order" +msgstr "Pedido" + #. module: payment_redsys #: selection:payment.acquirer,redsys_pay_method:0 msgid "Pago con Tarjeta" @@ -154,21 +181,36 @@ msgstr "Método de pago" msgid "Payment Transaction" msgstr "Transacción de pago" +#. module: payment_redsys +#: view:website:payment_redsys.redsys_result_ko +msgid "Please contact with us and inform you about your order." +msgstr "Por favor contacte con nosotros y le informaremos sobre su pedido" + #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 msgid "Polaco" -msgstr "" +msgstr "Polaco" #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 msgid "Portugués" -msgstr "" +msgstr "Portugués" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Product" +msgstr "Producto" #. module: payment_redsys #: field:payment.acquirer,redsys_merchant_description:0 msgid "Product Description" msgstr "Descripción del producto" +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Quantity" +msgstr "Cantidad" + #. module: payment_redsys #: view:payment.transaction:payment_redsys.transaction_form_redsys msgid "Redsys TX Details" @@ -179,6 +221,12 @@ msgstr "Detalles de transmisión Redsys" msgid "Redsys signature version" msgstr "Versión de la firma Redsys" +#. module: payment_redsys +#: code:addons/payment_redsys/models/redsys.py:289 +#, python-format +msgid "Redsys: feedback error %s (%s)" +msgstr "" + #. module: payment_redsys #: field:payment.acquirer,redsys_secret_key:0 msgid "Secret Key" @@ -189,16 +237,46 @@ msgstr "Clave secreta" msgid "Send quotation" msgstr "Enviar presupuesto" +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Shipping Address" +msgstr "Dirección de envío:" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Subtotal" +msgstr "Subtotal" + #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 msgid "Sueco" -msgstr "" +msgstr "Sueco" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Taxes:" +msgstr "Impuestos:" #. module: payment_redsys #: field:payment.acquirer,redsys_terminal:0 msgid "Terminal" msgstr "Terminal" +#. module: payment_redsys +#: view:website:payment_redsys.redsys_result_ok +msgid "Thanks for you order." +msgstr "¡Gracias por su pedido!" + +#. module: payment_redsys +#: view:website:payment_redsys.redsys_result_ko +msgid "The payment of your order has failed" +msgstr "El pago de su pedido ha fallado" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Total:" +msgstr "Total:" + #. module: payment_redsys #: field:payment.transaction,redsys_txnid:0 msgid "Transaction ID" @@ -210,16 +288,26 @@ msgid "Transtaction Type" msgstr "Tipo de transacción" #. module: payment_redsys -#: field:payment.acquirer,redsys_url_ko:0 -msgid "URL KO" -msgstr "URL KO" +#: view:website:payment_redsys.order +msgid "Unit Price" +msgstr "Precio unidad" #. module: payment_redsys -#: field:payment.acquirer,redsys_url_ok:0 -msgid "URL OK" -msgstr "URL OK" +#: view:website:payment_redsys.order +msgid "Untaxed Amount:" +msgstr "Base imponible" #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 msgid "Valenciano" -msgstr "" +msgstr "Valenciano" + +#. module: payment_redsys +#: view:website:payment_redsys.redsys_result_ok +msgid "We will inform you of your order status" +msgstr "Le informaremos sobre el estado de su pedido" + +#. module: payment_redsys +#: view:website:payment_redsys.redsys_result_ok +msgid "Your order has been paid correctly" +msgstr "Su pedido ha sido pagado correctamente" diff --git a/payment_redsys/i18n/fr.po b/payment_redsys/i18n/fr.po new file mode 100644 index 00000000000..25bc2e94d08 --- /dev/null +++ b/payment_redsys/i18n/fr.po @@ -0,0 +1,307 @@ +# 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-02-26 01:41+0000\n" +"PO-Revision-Date: 2016-02-25 17:16+0000\n" +"Last-Translator: OCA Transbot \n" +"Language-Team: French (http://www.transifex.com/oca/OCA-l10n-spain-8-0/language/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Alemán" +msgstr "" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Back to shop" +msgstr "Retour à la boutique" + +#. module: payment_redsys +#: code:addons/payment_redsys/models/redsys.py:282 +#, python-format +msgid "Bank Error: %s (%s)" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Castellano" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Catalán" +msgstr "" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_currency:0 +msgid "Currency" +msgstr "" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Date:" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_pay_method:0 +msgid "Domiciliacion" +msgstr "" + +#. module: payment_redsys +#: view:website:payment_redsys.redsys_result_ko +msgid "En error ocurred." +msgstr "En ocurred erreur." + +#. module: payment_redsys +#: code:addons/payment_redsys/models/redsys.py:271 +#, python-format +msgid "Error: %s (%s)" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Euskera" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Francés" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Gallego" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_signature_version:0 +msgid "HMAC SHA256 V1" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Holandés" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Inglés" +msgstr "" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Invoicing Address" +msgstr "Adresse de facturation" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Italiano" +msgstr "" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_merchant_lang:0 +msgid "Merchant Consumer Language" +msgstr "Merchant consommateurs Langue" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_merchant_data:0 +msgid "Merchant Data" +msgstr "Data Merchant" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_merchant_name:0 +msgid "Merchant Name" +msgstr "Nom du commerçant" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_merchant_titular:0 +msgid "Merchant Titular" +msgstr "Merchant titulaire" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_merchant_url:0 +msgid "Merchant URL" +msgstr "Merchant URL" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_merchant_code:0 +msgid "Merchant code" +msgstr "Code Merchant" + +#. module: payment_redsys +#: code:addons/payment_redsys/models/redsys.py:260 +#, python-format +msgid "Ok: %s" +msgstr "Ok: %s" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Order" +msgstr "Commande" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_pay_method:0 +msgid "Pago con Tarjeta" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_pay_method:0 +msgid "Pago por Transferencia" +msgstr "" + +#. module: payment_redsys +#: model:ir.model,name:payment_redsys.model_payment_acquirer +msgid "Payment Acquirer" +msgstr "Paiement acquéreur" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_pay_method:0 +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 +#: view:website:payment_redsys.redsys_result_ko +msgid "Please contact with us and inform you about your order." +msgstr "S'il vous plaît nous contacter et vous informer sur votre commande." + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Polaco" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Portugués" +msgstr "" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Product" +msgstr "Produit" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_merchant_description:0 +msgid "Product Description" +msgstr "Description du produit" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Quantity" +msgstr "Quantité" + +#. module: payment_redsys +#: view:payment.transaction:payment_redsys.transaction_form_redsys +msgid "Redsys TX Details" +msgstr "Redsys TX Détails" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_signature_version:0 +msgid "Redsys signature version" +msgstr "La version de la signature Redsys" + +#. module: payment_redsys +#: code:addons/payment_redsys/models/redsys.py:289 +#, python-format +msgid "Redsys: feedback error %s (%s)" +msgstr "" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_secret_key:0 +msgid "Secret Key" +msgstr "Clef secréte" + +#. module: payment_redsys +#: field:payment.acquirer,send_quotation:0 +msgid "Send quotation" +msgstr "Envoyer cotation" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Shipping Address" +msgstr "Adresse de livraison" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Subtotal" +msgstr "Subtotal" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Sueco" +msgstr "" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Taxes:" +msgstr "impôts:" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_terminal:0 +msgid "Terminal" +msgstr "Terminal" + +#. module: payment_redsys +#: view:website:payment_redsys.redsys_result_ok +msgid "Thanks for you order." +msgstr "Merci pour votre commande." + +#. module: payment_redsys +#: view:website:payment_redsys.redsys_result_ko +msgid "The payment of your order has failed" +msgstr "Le paiement de votre commande a échoué" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Total:" +msgstr "Total:" + +#. module: payment_redsys +#: field:payment.transaction,redsys_txnid:0 +msgid "Transaction ID" +msgstr "Identifiant de transaction" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_transaction_type:0 +msgid "Transtaction Type" +msgstr "Type de Transtaction" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Unit Price" +msgstr "Prix unitaire" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Untaxed Amount:" +msgstr "Montant non taxé:" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Valenciano" +msgstr "" + +#. module: payment_redsys +#: view:website:payment_redsys.redsys_result_ok +msgid "We will inform you of your order status" +msgstr "Nous allons vous informer de votre statut de la commande" + +#. module: payment_redsys +#: view:website:payment_redsys.redsys_result_ok +msgid "Your order has been paid correctly" +msgstr "Votre commande a été payée correctement" diff --git a/payment_redsys/i18n/gl.po b/payment_redsys/i18n/gl.po index d64efced93a..459d67d3806 100644 --- a/payment_redsys/i18n/gl.po +++ b/payment_redsys/i18n/gl.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: l10n-spain (8.0)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-12-05 01:43+0000\n" -"PO-Revision-Date: 2015-11-30 23:11+0000\n" +"POT-Creation-Date: 2016-02-26 01:41+0000\n" +"PO-Revision-Date: 2016-02-25 17:16+0000\n" "Last-Translator: OCA Transbot \n" "Language-Team: Galician (http://www.transifex.com/oca/OCA-l10n-spain-8-0/language/gl/)\n" "MIME-Version: 1.0\n" @@ -24,10 +24,15 @@ msgid "Alemán" msgstr "" #. module: payment_redsys -#: code:addons/payment_redsys/models/redsys.py:278 +#: view:website:payment_redsys.order +msgid "Back to shop" +msgstr "" + +#. module: payment_redsys +#: code:addons/payment_redsys/models/redsys.py:282 #, python-format -msgid "Bank Error: %s" -msgstr "Erro do banco: %s" +msgid "Bank Error: %s (%s)" +msgstr "" #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 @@ -44,16 +49,26 @@ msgstr "" msgid "Currency" msgstr "Moeda" +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Date:" +msgstr "" + #. module: payment_redsys #: selection:payment.acquirer,redsys_pay_method:0 msgid "Domiciliacion" msgstr "Domiciliación" #. module: payment_redsys -#: code:addons/payment_redsys/models/redsys.py:269 +#: view:website:payment_redsys.redsys_result_ko +msgid "En error ocurred." +msgstr "" + +#. module: payment_redsys +#: code:addons/payment_redsys/models/redsys.py:271 #, python-format -msgid "Error: %s" -msgstr "Erro: %s" +msgid "Error: %s (%s)" +msgstr "" #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 @@ -85,6 +100,11 @@ msgstr "" msgid "Inglés" msgstr "" +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Invoicing Address" +msgstr "" + #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 msgid "Italiano" @@ -121,11 +141,16 @@ msgid "Merchant code" msgstr "Código do comerciante" #. module: payment_redsys -#: code:addons/payment_redsys/models/redsys.py:255 +#: code:addons/payment_redsys/models/redsys.py:260 #, python-format msgid "Ok: %s" msgstr "OK: %s" +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Order" +msgstr "" + #. module: payment_redsys #: selection:payment.acquirer,redsys_pay_method:0 msgid "Pago con Tarjeta" @@ -151,6 +176,11 @@ msgstr "Método de pagamento" msgid "Payment Transaction" msgstr "Transación de pagamento" +#. module: payment_redsys +#: view:website:payment_redsys.redsys_result_ko +msgid "Please contact with us and inform you about your order." +msgstr "" + #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 msgid "Polaco" @@ -161,11 +191,21 @@ msgstr "" msgid "Portugués" msgstr "" +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Product" +msgstr "" + #. module: payment_redsys #: field:payment.acquirer,redsys_merchant_description:0 msgid "Product Description" msgstr "Descrición do produto" +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Quantity" +msgstr "" + #. module: payment_redsys #: view:payment.transaction:payment_redsys.transaction_form_redsys msgid "Redsys TX Details" @@ -176,6 +216,12 @@ msgstr "Detalles Redsys TX" msgid "Redsys signature version" msgstr "" +#. module: payment_redsys +#: code:addons/payment_redsys/models/redsys.py:289 +#, python-format +msgid "Redsys: feedback error %s (%s)" +msgstr "" + #. module: payment_redsys #: field:payment.acquirer,redsys_secret_key:0 msgid "Secret Key" @@ -186,16 +232,46 @@ msgstr "Chave secreta" msgid "Send quotation" msgstr "" +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Shipping Address" +msgstr "" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Subtotal" +msgstr "" + #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 msgid "Sueco" msgstr "" +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Taxes:" +msgstr "" + #. module: payment_redsys #: field:payment.acquirer,redsys_terminal:0 msgid "Terminal" msgstr "Terminal" +#. module: payment_redsys +#: view:website:payment_redsys.redsys_result_ok +msgid "Thanks for you order." +msgstr "" + +#. module: payment_redsys +#: view:website:payment_redsys.redsys_result_ko +msgid "The payment of your order has failed" +msgstr "" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Total:" +msgstr "" + #. module: payment_redsys #: field:payment.transaction,redsys_txnid:0 msgid "Transaction ID" @@ -207,16 +283,26 @@ msgid "Transtaction Type" msgstr "Tipo de transacción" #. module: payment_redsys -#: field:payment.acquirer,redsys_url_ko:0 -msgid "URL KO" -msgstr "URL KO" +#: view:website:payment_redsys.order +msgid "Unit Price" +msgstr "" #. module: payment_redsys -#: field:payment.acquirer,redsys_url_ok:0 -msgid "URL OK" -msgstr "URL OK" +#: view:website:payment_redsys.order +msgid "Untaxed Amount:" +msgstr "" #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 msgid "Valenciano" msgstr "" + +#. module: payment_redsys +#: view:website:payment_redsys.redsys_result_ok +msgid "We will inform you of your order status" +msgstr "" + +#. module: payment_redsys +#: view:website:payment_redsys.redsys_result_ok +msgid "Your order has been paid correctly" +msgstr "" diff --git a/payment_redsys/i18n/payment_redsys.pot b/payment_redsys/i18n/payment_redsys.pot new file mode 100644 index 00000000000..a07a65b651f --- /dev/null +++ b/payment_redsys/i18n/payment_redsys.pot @@ -0,0 +1,335 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * payment_redsys +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-12-17 17:05+0000\n" +"PO-Revision-Date: 2015-12-17 17:05+0000\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:payment.acquirer,pre_msg:payment_redsys.payment_acquirer_redsys +msgid "

Vous allez être dirigé vers le site web sécurisé redsys

" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Alemán" +msgstr "" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Back to shop" +msgstr "" + +#. module: payment_redsys +#: code:addons/payment_redsys/models/redsys.py:285 +#, python-format +msgid "Bank Error: %s" +msgstr "" + +#. module: payment_redsys +#: model:payment.acquirer,name:payment_redsys.payment_acquirer_redsys +msgid "Carte de crédit" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Castellano" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Catalán" +msgstr "" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_currency:0 +msgid "Currency" +msgstr "" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Date:" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_pay_method:0 +msgid "Domiciliacion" +msgstr "" + +#. module: payment_redsys +#: view:website:payment_redsys.redsys_result_ko +msgid "En error ocurred." +msgstr "" + +#. module: payment_redsys +#: code:addons/payment_redsys/models/redsys.py:276 +#, python-format +msgid "Error: %s" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Euskera" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Francés" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Gallego" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_signature_version:0 +msgid "HMAC SHA256 V1" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Holandés" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Inglés" +msgstr "" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Invoices" +msgstr "" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Invoicing Address" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Italiano" +msgstr "" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_merchant_lang:0 +msgid "Merchant Consumer Language" +msgstr "" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_merchant_data:0 +msgid "Merchant Data" +msgstr "" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_merchant_name:0 +msgid "Merchant Name" +msgstr "" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_merchant_titular:0 +msgid "Merchant Titular" +msgstr "" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_merchant_url:0 +msgid "Merchant URL" +msgstr "" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_merchant_code:0 +msgid "Merchant code" +msgstr "" + +#. module: payment_redsys +#: code:addons/payment_redsys/models/redsys.py:262 +#, python-format +msgid "Ok: %s" +msgstr "" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Order" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_pay_method:0 +msgid "Pago con Tarjeta" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_pay_method:0 +msgid "Pago por Transferencia" +msgstr "" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Paid" +msgstr "" + +#. module: payment_redsys +#: model:ir.model,name:payment_redsys.model_payment_acquirer +msgid "Payment Acquirer" +msgstr "" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_pay_method:0 +msgid "Payment Method" +msgstr "" + +#. module: payment_redsys +#: model:ir.model,name:payment_redsys.model_payment_transaction +msgid "Payment Transaction" +msgstr "" + +#. module: payment_redsys +#: view:website:payment_redsys.redsys_result_ko +msgid "Please contact with us and inform you about your order." +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Polaco" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Portugués" +msgstr "" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Product" +msgstr "" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_merchant_description:0 +msgid "Product Description" +msgstr "" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Quantity" +msgstr "" + +#. module: payment_redsys +#: view:payment.transaction:payment_redsys.transaction_form_redsys +msgid "Redsys TX Details" +msgstr "" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_signature_version:0 +msgid "Redsys signature version" +msgstr "" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_secret_key:0 +msgid "Secret Key" +msgstr "" + +#. module: payment_redsys +#: field:payment.acquirer,send_quotation:0 +msgid "Send quotation" +msgstr "" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Shipping Address" +msgstr "" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Subtotal" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Sueco" +msgstr "" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Taxes:" +msgstr "" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_terminal:0 +msgid "Terminal" +msgstr "" + +#. module: payment_redsys +#: view:website:payment_redsys.redsys_result_ok +msgid "Thanks for you order." +msgstr "" + +#. module: payment_redsys +#: view:website:payment_redsys.redsys_result_ko +msgid "The payment of your order has failed" +msgstr "" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Total:" +msgstr "" + +#. module: payment_redsys +#: field:payment.transaction,redsys_txnid:0 +msgid "Transaction ID" +msgstr "" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_transaction_type:0 +msgid "Transtaction Type" +msgstr "" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_url_ko:0 +msgid "URL KO" +msgstr "" + +#. module: payment_redsys +#: field:payment.acquirer,redsys_url_ok:0 +msgid "URL OK" +msgstr "" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Unit Price" +msgstr "" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Untaxed Amount:" +msgstr "" + +#. module: payment_redsys +#: selection:payment.acquirer,redsys_merchant_lang:0 +msgid "Valenciano" +msgstr "" + +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Waiting" +msgstr "" + +#. module: payment_redsys +#: view:website:payment_redsys.redsys_result_ok +msgid "We will inform you of your order status" +msgstr "" + +#. module: payment_redsys +#: view:website:payment_redsys.redsys_result_ok +msgid "Your order has been paid correctly" +msgstr "" + diff --git a/payment_redsys/models/redsys.py b/payment_redsys/models/redsys.py index 74892e0518f..ca249e1226d 100644 --- a/payment_redsys/models/redsys.py +++ b/payment_redsys/models/redsys.py @@ -80,16 +80,17 @@ def _get_providers(self): default='T') redsys_signature_version = fields.Selection( [('HMAC_SHA256_V1', 'HMAC SHA256 V1')], default='HMAC_SHA256_V1') - redsys_url_ok = fields.Char('URL OK') - redsys_url_ko = fields.Char('URL KO') send_quotation = fields.Boolean('Send quotation', default=True) def _prepare_merchant_parameters(self, acquirer, tx_values): + base_url = self.env['ir.config_parameter'].get_param('web.base.url') + sale_order = self.env['sale.order'].search( + [('name', '=', tx_values['reference'])]) values = { 'Ds_Sermepa_Url': ( self._get_redsys_urls(acquirer.environment)[ 'redsys_form_url']), - 'Ds_Merchant_Amount': str(int(tx_values['amount'] * 100)), + 'Ds_Merchant_Amount': str(int(round(tx_values['amount'] * 100))), 'Ds_Merchant_Currency': acquirer.redsys_currency or '978', 'Ds_Merchant_Order': ( tx_values['reference'] and tx_values['reference'][-12:] or @@ -116,8 +117,12 @@ def _prepare_merchant_parameters(self, acquirer, tx_values): acquirer.redsys_merchant_description[:125]), 'Ds_Merchant_ConsumerLanguage': ( acquirer.redsys_merchant_lang or '001'), - 'Ds_Merchant_UrlOk': acquirer.redsys_url_ok or '', - 'Ds_Merchant_UrlKo': acquirer.redsys_url_ko or '', + 'Ds_Merchant_UrlOk': + '%s/payment/redsys/result/redsys_result_ok?order_id=%s' % ( + base_url, sale_order.id), + 'Ds_Merchant_UrlKo': + '%s/payment/redsys/result/redsys_result_ko?order_id=%s' % ( + base_url, sale_order.id), 'Ds_Merchant_Paymethods': acquirer.redsys_pay_method or 'T', } return self._url_encode64(json.dumps(values)) diff --git a/payment_redsys/static/src/img/redsys_icon.png b/payment_redsys/static/src/img/redsys_icon.png index 92724a7f8827fd09a1df56c4da76d439b20ce096..e9ddbae18a4b23b8ad990eb8147e43222dc184e7 100644 GIT binary patch literal 11108 zcmV-qE1T4bP)hewb^C83Xd28J(NBN+ z(_e7A-D?0-f8YDw_o4gmzyBlc?d^VDzbtUGK?s3i7*thNd4s`VTTf3XR znYg86abXiX2{M7h^(;MIbAw(!=k3XyMLK6AW|-nZuZf`xV(9_}Tb0gvOpSosDA`ot z*jKicM3Z^O6Iqg(0!k^|E`tico2oK5UYCvnX0!IwIg3m|0*-(fnnsz|KoiVy$Lvr_ zA*C$+z6euAAo7D~laC?N$Dj~JsOGz z+{0hJXB%FZ!JmHnAcN5~LI{LX+_R&V`)^rODo?>y9POXv@mB^o*cD-DGD9j`Kq+vW zI^lqu4NXBlb;kx))|Q`B4+T7TVw4B>bTJ;!qKb8`F8A=6cW|auko7tcx^5%y^ zdDddruK{Zckv@u;e1!b?Be>Kk1`2^fq>rIIt5BZROt-KA4t7QOf6tyKn#?1FQ}|Eb zzMjTPKL<}oc=FXDQaK9%O%uH14J*+!fmDj#@f834`-j=}$^eCH|>kMu?P&9CfbFq%f!M2S#S*SLFoD~%O?ma460lD$YHxp+0(h_7gAH?79d1o2FsMLK6W zBQOwfn>1GVO6HHt(D=wLYxv`PH?y`rSbC>J2nLH~f9B}cbO?9Q0=WW4bN3wi# zPZuW!W9UVbqrJ9_U%SB>VUPztcnjb7 z#P!^LWi!5FR~AB0uq6*Z*Ub<2_W_D{rofkQ0Y8fdEYmAYT9 zVAD6AI%|}ns1JK7_n1(WE)*r5R^~Cet)qb}+benC$&>u^6DLd0&s&nyBXN`v9PEy; z|8xXRJF7>JoSEYH|K9-=j=`SI%hDi}%oI2_7~_hzv)y?qFy`vdi-LfT)-Y@9%Xz6M z3Ic{>8HiCbSl85-@&4=E(2B}i2#6-KbPmVQvA@>V2MKr#as`{`PL5F*^3YNh!0XZx zLLhC0$JA-6^ke86mUKp9T@%y=y-Xx>Jn&Q}@pPfo6BKZ4aEfDtQ)i1TM2Wn-EqU?O zIPciea!y(1!?H=9QV{mL*xV9!$m3j3Q2@7Ws;8yutQ({W!SG~;SUO+2PS-TrY69pQ z#4`o{;nCxaCbDd54za4XjBvn>l!~sg1Wz9wAzL(Ilv31&yj;DynwPsLN)0#-x1n9& zQc0yK6xD?QPL0HgX9`pVTub≧$%#Xo8(v>iOQj-gCSKDHUrP%K0xhti&i9!4!*p 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 FV1kgiSUdm# diff --git a/payment_redsys/views/payment_acquirer.xml b/payment_redsys/views/payment_acquirer.xml index 9551e3e72ff..d420c165e56 100644 --- a/payment_redsys/views/payment_acquirer.xml +++ b/payment_redsys/views/payment_acquirer.xml @@ -21,8 +21,6 @@ - - diff --git a/payment_redsys/views/redsys.xml b/payment_redsys/views/redsys.xml index 3f87928d57a..59555ee1ec6 100644 --- a/payment_redsys/views/redsys.xml +++ b/payment_redsys/views/redsys.xml @@ -1,6 +1,6 @@ - + + + + + + + + + From 26276006bb9520700825872f21b792c73105697d Mon Sep 17 00:00:00 2001 From: Eric Antones Date: Mon, 7 Mar 2016 15:40:30 +0100 Subject: [PATCH 12/52] [IMP] payment_redsys: Add the discount on the order summary The discount is shown on the order summary if the current user is a member of sale.group_discount_per_so_line group OCA Transbot updated translations from Transifex OCA Transbot updated translations from Transifex OCA Transbot updated translations from Transifex --- payment_redsys/i18n/ca.po | 37 ++++++++++++++++++++------------- payment_redsys/i18n/en.po | 9 ++++++-- payment_redsys/i18n/es.po | 13 ++++++++---- payment_redsys/views/redsys.xml | 15 +++++++++++-- 4 files changed, 51 insertions(+), 23 deletions(-) diff --git a/payment_redsys/i18n/ca.po b/payment_redsys/i18n/ca.po index 85b3a02e952..11fa154cc53 100644 --- a/payment_redsys/i18n/ca.po +++ b/payment_redsys/i18n/ca.po @@ -3,14 +3,16 @@ # * 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-03-05 10:32+0000\n" -"PO-Revision-Date: 2016-02-29 13:37+0000\n" -"Last-Translator: Eric Antones \n" +"POT-Creation-Date: 2016-08-02 07:30+0000\n" +"PO-Revision-Date: 2016-08-15 20:22+0000\n" +"Last-Translator: Carles Antoli \n" "Language-Team: Catalan (http://www.transifex.com/oca/OCA-l10n-spain-8-0/language/ca/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -32,7 +34,7 @@ msgstr "Tornar a la botiga" #: code:addons/payment_redsys/models/redsys.py:282 #, python-format msgid "Bank Error: %s (%s)" -msgstr "" +msgstr "Error del banc: %s (%s)" #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 @@ -54,6 +56,11 @@ msgstr "Moneda" msgid "Date:" msgstr "Data:" +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Discount (%)" +msgstr "Descompte (%)" + #. module: payment_redsys #: selection:payment.acquirer,redsys_pay_method:0 msgid "Domiciliacion" @@ -62,18 +69,18 @@ msgstr "Domiciliació" #. module: payment_redsys #: view:website:payment_redsys.redsys_result_ko msgid "En error ocurred." -msgstr "" +msgstr "S'ha produït un error." #. module: payment_redsys #: code:addons/payment_redsys/models/redsys.py:271 #, python-format msgid "Error: %s (%s)" -msgstr "" +msgstr "Error: %s (%s)" #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 msgid "Euskera" -msgstr "" +msgstr "Basc" #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 @@ -88,7 +95,7 @@ msgstr "Gallec" #. module: payment_redsys #: selection:payment.acquirer,redsys_signature_version:0 msgid "HMAC SHA256 V1" -msgstr "" +msgstr "HMAC SHA256 V1" #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 @@ -144,7 +151,7 @@ msgstr "" #: code:addons/payment_redsys/models/redsys.py:260 #, python-format msgid "Ok: %s" -msgstr "" +msgstr "Ok: %s" #. module: payment_redsys #: view:website:payment_redsys.order @@ -174,12 +181,12 @@ msgstr "Mètode de pagament" #. module: payment_redsys #: model:ir.model,name:payment_redsys.model_payment_transaction msgid "Payment Transaction" -msgstr "" +msgstr "Transacció de pagament" #. module: payment_redsys #: view:website:payment_redsys.redsys_result_ko msgid "Please contact with us and inform you about your order." -msgstr "" +msgstr "Si us plau, poseu-vos en contacte amb nosaltres i l'informarem sobre la seva comanda." #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 @@ -240,7 +247,7 @@ msgstr "Adreça d'enviament" #. module: payment_redsys #: view:website:payment_redsys.order msgid "Subtotal" -msgstr "" +msgstr "Subtotal" #. module: payment_redsys #: selection:payment.acquirer,redsys_merchant_lang:0 @@ -265,7 +272,7 @@ msgstr "Gràcies per la teva comanda." #. module: payment_redsys #: view:website:payment_redsys.redsys_result_ko msgid "The payment of your order has failed" -msgstr "" +msgstr "El pagament de la teva comanda ha fallat" #. module: payment_redsys #: view:website:payment_redsys.order @@ -300,9 +307,9 @@ msgstr "Valencià" #. module: payment_redsys #: view:website:payment_redsys.redsys_result_ok msgid "We will inform you of your order status" -msgstr "" +msgstr "T'informarem sobre l'estat de la comanda" #. module: payment_redsys #: view:website:payment_redsys.redsys_result_ok msgid "Your order has been paid correctly" -msgstr "" +msgstr "La teva comanda s'ha pagat correctament" diff --git a/payment_redsys/i18n/en.po b/payment_redsys/i18n/en.po index 1f3df01c2e5..21a404e1627 100644 --- a/payment_redsys/i18n/en.po +++ b/payment_redsys/i18n/en.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: l10n-spain (8.0)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-02-26 01:41+0000\n" -"PO-Revision-Date: 2016-02-25 17:16+0000\n" +"POT-Creation-Date: 2016-03-09 09:11+0000\n" +"PO-Revision-Date: 2016-03-08 09:39+0000\n" "Last-Translator: OCA Transbot \n" "Language-Team: English (http://www.transifex.com/oca/OCA-l10n-spain-8-0/language/en/)\n" "MIME-Version: 1.0\n" @@ -53,6 +53,11 @@ msgstr "Currency" msgid "Date:" msgstr "Date:" +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Discount (%)" +msgstr "Discount (%)" + #. module: payment_redsys #: selection:payment.acquirer,redsys_pay_method:0 msgid "Domiciliacion" diff --git a/payment_redsys/i18n/es.po b/payment_redsys/i18n/es.po index feaad96c1f0..c8f0fe51be4 100644 --- a/payment_redsys/i18n/es.po +++ b/payment_redsys/i18n/es.po @@ -6,16 +6,16 @@ # Alejandro Santana , 2015 # Antonio Trueba, 2016 # Antonio Trueba, 2016 -# Eric Antones , 2015 +# 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-02-26 01:41+0000\n" -"PO-Revision-Date: 2016-02-25 17:16+0000\n" -"Last-Translator: OCA Transbot \n" +"POT-Creation-Date: 2016-03-18 01:42+0000\n" +"PO-Revision-Date: 2016-03-14 16:06+0000\n" +"Last-Translator: Eric Antones \n" "Language-Team: Spanish (http://www.transifex.com/oca/OCA-l10n-spain-8-0/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -59,6 +59,11 @@ msgstr "Moneda" msgid "Date:" msgstr "Fecha:" +#. module: payment_redsys +#: view:website:payment_redsys.order +msgid "Discount (%)" +msgstr "Descuento (%)" + #. module: payment_redsys #: selection:payment.acquirer,redsys_pay_method:0 msgid "Domiciliacion" diff --git a/payment_redsys/views/redsys.xml b/payment_redsys/views/redsys.xml index 59555ee1ec6..a7900d008ef 100644 --- a/payment_redsys/views/redsys.xml +++ b/payment_redsys/views/redsys.xml @@ -79,6 +79,7 @@