From d22e515d528620abc37f13d42769f99bf8a492dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 27 May 2014 16:57:31 +0200 Subject: [PATCH] [MERGE] [ADD] module: payment_buckaroo acquirer: manage payments using Buckaroo. --- addons/payment/models/res_config.py | 3 + addons/payment/views/res_config_view.xml | 4 + addons/payment_buckaroo/__init__.py | 23 +++ addons/payment_buckaroo/__openerp__.py | 17 ++ .../payment_buckaroo/controllers/__init__.py | 3 + addons/payment_buckaroo/controllers/main.py | 38 ++++ addons/payment_buckaroo/data/buckaroo.xml | 18 ++ addons/payment_buckaroo/models/__init__.py | 3 + addons/payment_buckaroo/models/buckaroo.py | 191 ++++++++++++++++++ .../static/description/icon.png | Bin 0 -> 34335 bytes .../static/src/img/buckaroo_icon.png | Bin 0 -> 15242 bytes .../payment_buckaroo/static/src/img/logo.png | Bin 0 -> 34335 bytes addons/payment_buckaroo/tests/__init__.py | 7 + .../payment_buckaroo/tests/test_buckaroo.py | 178 ++++++++++++++++ addons/payment_buckaroo/views/buckaroo.xml | 34 ++++ .../views/payment_acquirer.xml | 35 ++++ 16 files changed, 554 insertions(+) create mode 100644 addons/payment_buckaroo/__init__.py create mode 100644 addons/payment_buckaroo/__openerp__.py create mode 100644 addons/payment_buckaroo/controllers/__init__.py create mode 100644 addons/payment_buckaroo/controllers/main.py create mode 100644 addons/payment_buckaroo/data/buckaroo.xml create mode 100644 addons/payment_buckaroo/models/__init__.py create mode 100644 addons/payment_buckaroo/models/buckaroo.py create mode 100644 addons/payment_buckaroo/static/description/icon.png create mode 100644 addons/payment_buckaroo/static/src/img/buckaroo_icon.png create mode 100644 addons/payment_buckaroo/static/src/img/logo.png create mode 100644 addons/payment_buckaroo/tests/__init__.py create mode 100644 addons/payment_buckaroo/tests/test_buckaroo.py create mode 100644 addons/payment_buckaroo/views/buckaroo.xml create mode 100644 addons/payment_buckaroo/views/payment_acquirer.xml diff --git a/addons/payment/models/res_config.py b/addons/payment/models/res_config.py index 70668a296da..a74e595b52e 100644 --- a/addons/payment/models/res_config.py +++ b/addons/payment/models/res_config.py @@ -16,4 +16,7 @@ class AccountPaymentConfig(osv.TransientModel): 'module_payment_adyen': fields.boolean( 'Manage Payments Using Adyen', help='-It installs the module payment_adyen.'), + 'module_payment_buckaroo': fields.boolean( + 'Manage Payments Using Buckaroo', + help='-It installs the module payment_buckaroo.'), } diff --git a/addons/payment/views/res_config_view.xml b/addons/payment/views/res_config_view.xml index 101acb7c9ee..45c0a3d168e 100644 --- a/addons/payment/views/res_config_view.xml +++ b/addons/payment/views/res_config_view.xml @@ -20,6 +20,10 @@ diff --git a/addons/payment_buckaroo/__init__.py b/addons/payment_buckaroo/__init__.py new file mode 100644 index 00000000000..1f4b1b74e57 --- /dev/null +++ b/addons/payment_buckaroo/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2014-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 . +# +############################################################################## + +import models +import controllers diff --git a/addons/payment_buckaroo/__openerp__.py b/addons/payment_buckaroo/__openerp__.py new file mode 100644 index 00000000000..526f7c38612 --- /dev/null +++ b/addons/payment_buckaroo/__openerp__.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- + +{ + 'name': 'Buckaroo Payment Acquirer', + 'category': 'Hidden', + 'summary': 'Payment Acquirer: Buckaroo Implementation', + 'version': '1.0', + 'description': """Buckaroo Payment Acquirer""", + 'author': 'OpenERP SA', + 'depends': ['payment'], + 'data': [ + 'views/buckaroo.xml', + 'views/payment_acquirer.xml', + 'data/buckaroo.xml', + ], + 'installable': True, +} diff --git a/addons/payment_buckaroo/controllers/__init__.py b/addons/payment_buckaroo/controllers/__init__.py new file mode 100644 index 00000000000..bbd183e955b --- /dev/null +++ b/addons/payment_buckaroo/controllers/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +import main diff --git a/addons/payment_buckaroo/controllers/main.py b/addons/payment_buckaroo/controllers/main.py new file mode 100644 index 00000000000..d3fe5b196fc --- /dev/null +++ b/addons/payment_buckaroo/controllers/main.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +try: + import simplejson as json +except ImportError: + import json + +import logging +import pprint +import werkzeug + +from openerp import http, SUPERUSER_ID +from openerp.http import request + +_logger = logging.getLogger(__name__) + + +class BuckarooController(http.Controller): + _return_url = '/payment/buckaroo/return' + _cancel_url = '/payment/buckaroo/cancel' + _exception_url = '/payment/buckaroo/error' + _reject_url = '/payment/buckaroo/reject' + + @http.route([ + '/payment/buckaroo/return', + '/payment/buckaroo/cancel', + '/payment/buckaroo/error', + '/payment/buckaroo/reject', + ], type='http', auth='none') + def buckaroo_return(self, **post): + """ Buckaroo.""" + _logger.info('Buckaroo: entering form_feedback with post data %s', pprint.pformat(post)) # debug + request.registry['payment.transaction'].form_feedback(request.cr, SUPERUSER_ID, post, 'buckaroo', context=request.context) + return_url = post.pop('return_url', '') + if not return_url: + data ='' + post.pop('ADD_RETURNDATA', '{}').replace("'", "\"") + custom = json.loads(data) + return_url = custom.pop('return_url', '/') + return werkzeug.utils.redirect(return_url) diff --git a/addons/payment_buckaroo/data/buckaroo.xml b/addons/payment_buckaroo/data/buckaroo.xml new file mode 100644 index 00000000000..9d100a59191 --- /dev/null +++ b/addons/payment_buckaroo/data/buckaroo.xml @@ -0,0 +1,18 @@ + + + + + + Buckaroo + buckaroo + + + test + You will be redirected to the Buckaroo website after cliking on the payment button.

]]>
+ dummy + dummy +
+ +
+
diff --git a/addons/payment_buckaroo/models/__init__.py b/addons/payment_buckaroo/models/__init__.py new file mode 100644 index 00000000000..7e1780a0059 --- /dev/null +++ b/addons/payment_buckaroo/models/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +import buckaroo diff --git a/addons/payment_buckaroo/models/buckaroo.py b/addons/payment_buckaroo/models/buckaroo.py new file mode 100644 index 00000000000..5b576a24c3b --- /dev/null +++ b/addons/payment_buckaroo/models/buckaroo.py @@ -0,0 +1,191 @@ +# -*- coding: utf-'8' "-*-" +from hashlib import sha1 +import logging +import urlparse + +from openerp.addons.payment.models.payment_acquirer import ValidationError +from openerp.addons.payment_buckaroo.controllers.main import BuckarooController +from openerp.osv import osv, fields +from openerp.tools.float_utils import float_compare + +_logger = logging.getLogger(__name__) + + +class AcquirerBuckaroo(osv.Model): + _inherit = 'payment.acquirer' + + def _get_buckaroo_urls(self, cr, uid, environment, context=None): + """ Buckaroo URLs + """ + if environment == 'prod': + return { + 'buckaroo_form_url': 'https://checkout.buckaroo.nl/html/', + } + else: + return { + 'buckaroo_form_url': 'https://testcheckout.buckaroo.nl/html/', + } + + def _get_providers(self, cr, uid, context=None): + providers = super(AcquirerBuckaroo, self)._get_providers(cr, uid, context=context) + providers.append(['buckaroo', 'Buckaroo']) + return providers + + _columns = { + 'brq_websitekey': fields.char('WebsiteKey', required_if_provider='buckaroo'), + 'brq_secretkey': fields.char('SecretKey', required_if_provider='buckaroo'), + } + + def _buckaroo_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' (openerp contacting buckaroo) or 'out' (buckaroo + contacting openerp). + :param dict values: transaction values + + :return string: shasign + """ + assert inout in ('in', 'out') + assert acquirer.provider == 'buckaroo' + + keys = "add_returndata Brq_amount Brq_culture Brq_currency Brq_invoicenumber Brq_return Brq_returncancel Brq_returnerror Brq_returnreject brq_test Brq_websitekey".split() + + def get_value(key): + if values.get(key): + return values[key] + return '' + + if inout == 'out': + if 'BRQ_SIGNATURE' in values: + del values['BRQ_SIGNATURE'] + items = sorted((k.upper(), v) for k, v in values.items()) + sign = ''.join('%s=%s' % (k, v) for k, v in items) + else: + sign = ''.join('%s=%s' % (k,get_value(k)) for k in keys) + #Add the pre-shared secret key at the end of the signature + sign = sign + acquirer.brq_secretkey + if isinstance(sign, str): + sign = urlparse.parse_qsl(sign) + shasign = sha1(sign).hexdigest() + return shasign + + + def buckaroo_form_generate_values(self, cr, uid, id, partner_values, tx_values, context=None): + base_url = self.pool['ir.config_parameter'].get_param(cr, uid, 'web.base.url') + acquirer = self.browse(cr, uid, id, context=context) + buckaroo_tx_values = dict(tx_values) + buckaroo_tx_values.update({ + 'Brq_websitekey': acquirer.brq_websitekey, + 'Brq_amount': tx_values['amount'], + 'Brq_currency': tx_values['currency'] and tx_values['currency'].name or '', + 'Brq_invoicenumber': tx_values['reference'], + 'brq_test' : True, + 'Brq_return': '%s' % urlparse.urljoin(base_url, BuckarooController._return_url), + 'Brq_returncancel': '%s' % urlparse.urljoin(base_url, BuckarooController._cancel_url), + 'Brq_returnerror': '%s' % urlparse.urljoin(base_url, BuckarooController._exception_url), + 'Brq_returnreject': '%s' % urlparse.urljoin(base_url, BuckarooController._reject_url), + 'Brq_culture': 'en-US', + }) + if buckaroo_tx_values.get('return_url'): + buckaroo_tx_values['add_returndata'] = {'return_url': '%s' % buckaroo_tx_values.pop('return_url')} + else: + buckaroo_tx_values['add_returndata'] = '' + buckaroo_tx_values['Brq_signature'] = self._buckaroo_generate_digital_sign(acquirer, 'in', buckaroo_tx_values) + return partner_values, buckaroo_tx_values + + def buckaroo_get_form_action_url(self, cr, uid, id, context=None): + acquirer = self.browse(cr, uid, id, context=context) + return self._get_buckaroo_urls(cr, uid, acquirer.environment, context=context)['buckaroo_form_url'] + +class TxBuckaroo(osv.Model): + _inherit = 'payment.transaction' + + # buckaroo status + _buckaroo_valid_tx_status = [190] + _buckaroo_pending_tx_status = [790, 791, 792, 793] + _buckaroo_cancel_tx_status = [890, 891] + _buckaroo_error_tx_status = [490, 491, 492] + _buckaroo_reject_tx_status = [690] + + _columns = { + 'buckaroo_txnid': fields.char('Transaction ID'), + } + + + # -------------------------------------------------- + # FORM RELATED METHODS + # -------------------------------------------------- + + def _buckaroo_form_get_tx_from_data(self, cr, uid, data, context=None): + """ Given a data dict coming from buckaroo, verify it and find the related + transaction record. """ + reference, pay_id, shasign = data.get('BRQ_INVOICENUMBER'), data.get('BRQ_PAYMENT'), data.get('BRQ_SIGNATURE') + if not reference or not pay_id or not shasign: + error_msg = 'Buckaroo: 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_ids = self.search(cr, uid, [('reference', '=', reference)], context=context) + if not tx_ids or len(tx_ids) > 1: + error_msg = 'Buckaroo: received data for reference %s' % (reference) + if not tx_ids: + error_msg += '; no order found' + else: + error_msg += '; multiple order found' + _logger.error(error_msg) + raise ValidationError(error_msg) + tx = self.pool['payment.transaction'].browse(cr, uid, tx_ids[0], context=context) + + #verify shasign + shasign_check = self.pool['payment.acquirer']._buckaroo_generate_digital_sign(tx.acquirer_id, 'out' ,data) + if shasign_check.upper() != shasign.upper(): + error_msg = 'Buckaroo: invalid shasign, received %s, computed %s, for data %s' % (shasign, shasign_check, data) + _logger.error(error_msg) + raise ValidationError(error_msg) + + return tx + + def _buckaroo_form_get_invalid_parameters(self, cr, uid, tx, data, context=None): + invalid_parameters = [] + + if tx.acquirer_reference and data.get('BRQ_TRANSACTIONS') != tx.acquirer_reference: + invalid_parameters.append(('Transaction Id', data.get('BRQ_TRANSACTIONS'), tx.acquirer_reference)) + # check what is buyed + if float_compare(float(data.get('BRQ_AMOUNT', '0.0')), tx.amount, 2) != 0: + invalid_parameters.append(('Amount', data.get('BRQ_AMOUNT'), '%.2f' % tx.amount)) + if data.get('BRQ_CURRENCY') != tx.currency_id.name: + invalid_parameters.append(('Currency', data.get('BRQ_CURRENCY'), tx.currency_id.name)) + + return invalid_parameters + + def _buckaroo_form_validate(self, cr, uid, tx, data, context=None): + status_code = int(data.get('BRQ_STATUSCODE','0')) + if status_code in self._buckaroo_valid_tx_status: + tx.write({ + 'state': 'done', + 'buckaroo_txnid': data.get('BRQ_TRANSACTIONS'), + }) + return True + elif status_code in self._buckaroo_pending_tx_status: + tx.write({ + 'state': 'pending', + 'buckaroo_txnid': data.get('BRQ_TRANSACTIONS'), + }) + return True + elif status_code in self._buckaroo_cancel_tx_status: + tx.write({ + 'state': 'cancel', + 'buckaroo_txnid': data.get('BRQ_TRANSACTIONS'), + }) + return True + else: + error = 'Buckaroo: feedback error' + _logger.info(error) + tx.write({ + 'state': 'error', + 'state_message': error, + 'buckaroo_txnid': data.get('BRQ_TRANSACTIONS'), + }) + return False diff --git a/addons/payment_buckaroo/static/description/icon.png b/addons/payment_buckaroo/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..663fcad1d6db4403ee7c55878cf485ab0eece5eb GIT binary patch literal 34335 zcmV)yK$5?SP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 literal 0 HcmV?d00001 diff --git a/addons/payment_buckaroo/static/src/img/buckaroo_icon.png b/addons/payment_buckaroo/static/src/img/buckaroo_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..819606db73013d832f80e7db4b93a2687726c368 GIT binary patch literal 15242 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 literal 0 HcmV?d00001 diff --git a/addons/payment_buckaroo/static/src/img/logo.png b/addons/payment_buckaroo/static/src/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..663fcad1d6db4403ee7c55878cf485ab0eece5eb GIT binary patch literal 34335 zcmV)yK$5?SP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 literal 0 HcmV?d00001 diff --git a/addons/payment_buckaroo/tests/__init__.py b/addons/payment_buckaroo/tests/__init__.py new file mode 100644 index 00000000000..d245ab8339d --- /dev/null +++ b/addons/payment_buckaroo/tests/__init__.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- + +from openerp.addons.payment_buckaroo.tests import test_buckaroo + +checks = [ + test_buckaroo, +] diff --git a/addons/payment_buckaroo/tests/test_buckaroo.py b/addons/payment_buckaroo/tests/test_buckaroo.py new file mode 100644 index 00000000000..b826f3b920e --- /dev/null +++ b/addons/payment_buckaroo/tests/test_buckaroo.py @@ -0,0 +1,178 @@ +# -*- coding: utf-8 -*- + +from lxml import objectify +import urlparse + +import openerp +from openerp.addons.payment.models.payment_acquirer import ValidationError +from openerp.addons.payment.tests.common import PaymentAcquirerCommon +from openerp.addons.payment_buckaroo.controllers.main import BuckarooController +from openerp.tools import mute_logger + + +@openerp.tests.common.at_install(False) +@openerp.tests.common.post_install(False) +class BuckarooCommon(PaymentAcquirerCommon): + + def setUp(self): + super(BuckarooCommon, self).setUp() + cr, uid = self.cr, self.uid + self.base_url = self.registry('ir.config_parameter').get_param(cr, uid, 'web.base.url') + + # get the buckaroo account + model, self.buckaroo_id = self.registry('ir.model.data').get_object_reference(cr, uid, 'payment_buckaroo', 'payment_acquirer_buckaroo') + + +@openerp.tests.common.at_install(False) +@openerp.tests.common.post_install(False) +class BuckarooForm(BuckarooCommon): + + def test_10_Buckaroo_form_render(self): + cr, uid, context = self.cr, self.uid, {} + # be sure not to do stupid things + buckaroo = self.payment_acquirer.browse(self.cr, self.uid, self.buckaroo_id, None) + self.assertEqual(buckaroo.environment, 'test', 'test without test environment') + + # ---------------------------------------- + # Test: button direct rendering + # ---------------------------------------- + + form_values = { + 'add_returndata': None, + 'Brq_websitekey': buckaroo.brq_websitekey, + 'Brq_amount': '2240.0', + 'Brq_currency': 'EUR', + 'Brq_invoicenumber': 'SO004', + 'Brq_signature': '1b8c10074c622d965272a91a9e88b5b3777d2474', # update me + 'brq_test': 'True', + 'Brq_return': '%s' % urlparse.urljoin(self.base_url, BuckarooController._return_url), + 'Brq_returncancel': '%s' % urlparse.urljoin(self.base_url, BuckarooController._cancel_url), + 'Brq_returnerror': '%s' % urlparse.urljoin(self.base_url, BuckarooController._exception_url), + 'Brq_returnreject': '%s' % urlparse.urljoin(self.base_url, BuckarooController._reject_url), + 'Brq_culture': 'en-US', + } + + # render the button + res = self.payment_acquirer.render( + cr, uid, self.buckaroo_id, + 'SO004', 2240.0, self.currency_euro_id, + partner_id=None, + partner_values=self.buyer_values, + context=context) + + # check form result + tree = objectify.fromstring(res) + self.assertEqual(tree.get('action'), 'https://testcheckout.buckaroo.nl/html/', 'Buckaroo: wrong form POST url') + for form_input in tree.input: + if form_input.get('name') in ['submit']: + continue + self.assertEqual( + form_input.get('value'), + form_values[form_input.get('name')], + 'Buckaroo: wrong value for input %s: received %s instead of %s' % (form_input.get('name'), form_input.get('value'), form_values[form_input.get('name')]) + ) + + # ---------------------------------------- + # Test2: button using tx + validation + # ---------------------------------------- + + # create a new draft tx + tx_id = self.payment_transaction.create( + cr, uid, { + 'amount': 2240.0, + 'acquirer_id': self.buckaroo_id, + 'currency_id': self.currency_euro_id, + 'reference': 'SO004', + 'partner_id': self.buyer_id, + }, context=context + ) + + # render the button + res = self.payment_acquirer.render( + cr, uid, self.buckaroo_id, + 'should_be_erased', 2240.0, self.currency_euro, + tx_id=tx_id, + partner_id=None, + partner_values=self.buyer_values, + context=context) + + # check form result + tree = objectify.fromstring(res) + self.assertEqual(tree.get('action'), 'https://testcheckout.buckaroo.nl/html/', 'Buckaroo: wrong form POST url') + for form_input in tree.input: + if form_input.get('name') in ['submit']: + continue + self.assertEqual( + form_input.get('value'), + form_values[form_input.get('name')], + 'Buckaroo: wrong value for form input %s: received %s instead of %s' % (form_input.get('name'), form_input.get('value'), form_values[form_input.get('name')]) + ) + + @mute_logger('openerp.addons.payment_buckaroo.models.buckaroo', 'ValidationError') + def test_20_buckaroo_form_management(self): + cr, uid, context = self.cr, self.uid, {} + # be sure not to do stupid thing + buckaroo = self.payment_acquirer.browse(self.cr, self.uid, self.buckaroo_id, None) + self.assertEqual(buckaroo.environment, 'test', 'test without test environment') + + # typical data posted by buckaroo after client has successfully paid + buckaroo_post_data = { + 'BRQ_RETURNDATA': u'', + 'BRQ_AMOUNT': u'2240.00', + 'BRQ_CURRENCY': u'EUR', + 'BRQ_CUSTOMER_NAME': u'Jan de Tester', + 'BRQ_INVOICENUMBER': u'SO004', + 'BRQ_PAYMENT': u'573311D081B04069BD6336001611DBD4', + 'BRQ_PAYMENT_METHOD': u'paypal', + 'BRQ_SERVICE_PAYPAL_PAYERCOUNTRY': u'NL', + 'BRQ_SERVICE_PAYPAL_PAYEREMAIL': u'fhe@openerp.com', + 'BRQ_SERVICE_PAYPAL_PAYERFIRSTNAME': u'Jan', + 'BRQ_SERVICE_PAYPAL_PAYERLASTNAME': u'Tester', + 'BRQ_SERVICE_PAYPAL_PAYERMIDDLENAME': u'de', + 'BRQ_SERVICE_PAYPAL_PAYERSTATUS': u'verified', + 'BRQ_SIGNATURE': u'175d82dd53a02bad393fee32cb1eafa3b6fbbd91', + 'BRQ_STATUSCODE': u'190', + 'BRQ_STATUSCODE_DETAIL': u'S001', + 'BRQ_STATUSMESSAGE': u'Transaction successfully processed', + 'BRQ_TEST': u'true', + 'BRQ_TIMESTAMP': u'2014-05-08 12:41:21', + 'BRQ_TRANSACTIONS': u'D6106678E1D54EEB8093F5B3AC42EA7B', + 'BRQ_WEBSITEKEY': u'5xTGyGyPyl', + } + + # should raise error about unknown tx + with self.assertRaises(ValidationError): + self.payment_transaction.form_feedback(cr, uid, buckaroo_post_data, 'buckaroo', context=context) + + tx_id = self.payment_transaction.create( + cr, uid, { + 'amount': 2240.0, + 'acquirer_id': self.buckaroo_id, + 'currency_id': self.currency_euro_id, + 'reference': 'SO004', + 'partner_name': 'Norbert Buyer', + 'partner_country_id': self.country_france_id, + }, context=context + ) + # validate it + self.payment_transaction.form_feedback(cr, uid, buckaroo_post_data, 'buckaroo', context=context) + # check state + tx = self.payment_transaction.browse(cr, uid, tx_id, context=context) + self.assertEqual(tx.state, 'done', 'Buckaroo: validation did not put tx into done state') + self.assertEqual(tx.buckaroo_txnid, buckaroo_post_data.get('BRQ_TRANSACTIONS'), 'Buckaroo: validation did not update tx payid') + + # reset tx + tx.write({'state': 'draft', 'date_validate': False, 'buckaroo_txnid': False}) + + # now buckaroo post is ok: try to modify the SHASIGN + buckaroo_post_data['BRQ_SIGNATURE'] = '54d928810e343acf5fb0c3ee75fd747ff159ef7a' + with self.assertRaises(ValidationError): + self.payment_transaction.form_feedback(cr, uid, buckaroo_post_data, 'buckaroo', context=context) + + # simulate an error + buckaroo_post_data['BRQ_STATUSCODE'] = 2 + buckaroo_post_data['BRQ_SIGNATURE'] = '4164b52adb1e6a2221d3d8a39d8c3e18a9ecb90b' + self.payment_transaction.form_feedback(cr, uid, buckaroo_post_data, 'buckaroo', context=context) + # check state + tx = self.payment_transaction.browse(cr, uid, tx_id, context=context) + self.assertEqual(tx.state, 'error', 'Buckaroo: erroneous validation did not put tx into error state') diff --git a/addons/payment_buckaroo/views/buckaroo.xml b/addons/payment_buckaroo/views/buckaroo.xml new file mode 100644 index 00000000000..567a2691b00 --- /dev/null +++ b/addons/payment_buckaroo/views/buckaroo.xml @@ -0,0 +1,34 @@ + + + + + + + + diff --git a/addons/payment_buckaroo/views/payment_acquirer.xml b/addons/payment_buckaroo/views/payment_acquirer.xml new file mode 100644 index 00000000000..4eb294e49c3 --- /dev/null +++ b/addons/payment_buckaroo/views/payment_acquirer.xml @@ -0,0 +1,35 @@ + + + + + + acquirer.form.buckaroo + payment.acquirer + + + + + + + + + + + + + acquirer.transaction.form.buckaroo + payment.transaction + + + + + + + + + + + + + +