From f735951d5c3ba793cc3e421cd0e856cd94064535 Mon Sep 17 00:00:00 2001
From: Jinal Patel
Date: Thu, 15 Nov 2018 13:14:22 +0000
Subject: [PATCH] [ADD] payment_ccavenue: Add new payment acquirer for India
CCAvenue is the most popular payment provider in india.
Co-authored-by: Rohan Patel
Related Task ID : 58741
---
addons/payment/data/payment_acquirer_data.xml | 22 +++
addons/payment_ccavenue/__init__.py | 6 +
addons/payment_ccavenue/__manifest__.py | 17 ++
.../payment_ccavenue/controllers/__init__.py | 4 +
addons/payment_ccavenue/controllers/main.py | 24 +++
.../data/payment_ccavenue_data.xml | 15 ++
addons/payment_ccavenue/models/__init__.py | 4 +
addons/payment_ccavenue/models/payment.py | 163 ++++++++++++++++++
.../static/description/icon.png | Bin 0 -> 418009 bytes
.../static/src/img/ccavenue_icon.png | Bin 0 -> 27474 bytes
.../views/payment_acquirer.xml | 17 ++
.../views/payment_ccavenue_templates.xml | 10 ++
12 files changed, 282 insertions(+)
create mode 100644 addons/payment_ccavenue/__init__.py
create mode 100644 addons/payment_ccavenue/__manifest__.py
create mode 100644 addons/payment_ccavenue/controllers/__init__.py
create mode 100644 addons/payment_ccavenue/controllers/main.py
create mode 100644 addons/payment_ccavenue/data/payment_ccavenue_data.xml
create mode 100644 addons/payment_ccavenue/models/__init__.py
create mode 100755 addons/payment_ccavenue/models/payment.py
create mode 100644 addons/payment_ccavenue/static/description/icon.png
create mode 100644 addons/payment_ccavenue/static/src/img/ccavenue_icon.png
create mode 100644 addons/payment_ccavenue/views/payment_acquirer.xml
create mode 100644 addons/payment_ccavenue/views/payment_ccavenue_templates.xml
diff --git a/addons/payment/data/payment_acquirer_data.xml b/addons/payment/data/payment_acquirer_data.xml
index 27d27ea4258..4b4aa5f400e 100644
--- a/addons/payment/data/payment_acquirer_data.xml
+++ b/addons/payment/data/payment_acquirer_data.xml
@@ -265,4 +265,26 @@
ref("payment.payment_icon_cc_codensa_easy_credit")])]'/>
+
+ CCAvenue
+
+
+
+
+
+ CCAvenue provides complete, simple and secure online payment gateway services and e-business solutions to Indian websites, with real time Credit Card, Debit Card and Net Banking.
+
+
+ - Online Payment
+ - Payment Status Tracking
+
+
+
+
+
+
diff --git a/addons/payment_ccavenue/__init__.py b/addons/payment_ccavenue/__init__.py
new file mode 100644
index 00000000000..e52ad6f83e3
--- /dev/null
+++ b/addons/payment_ccavenue/__init__.py
@@ -0,0 +1,6 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from . import controllers
+from . import models
+from odoo.addons.payment.models.payment_acquirer import create_missing_journal_for_acquirers
diff --git a/addons/payment_ccavenue/__manifest__.py b/addons/payment_ccavenue/__manifest__.py
new file mode 100644
index 00000000000..ac51c2d7891
--- /dev/null
+++ b/addons/payment_ccavenue/__manifest__.py
@@ -0,0 +1,17 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+{
+ 'name': 'CCAvenue Payment Acquirer',
+ 'category': 'Accounting',
+ 'summary': 'Payment Acquirer: CCAvenue Implementation',
+ 'description': """CCAvenue Payment Acquirer""",
+ 'depends': ['payment'],
+ 'external_dependencies': {'python': ['Crypto']},
+ 'data': [
+ 'views/payment_acquirer.xml',
+ 'views/payment_ccavenue_templates.xml',
+ 'data/payment_ccavenue_data.xml',
+ ],
+ 'post_init_hook': 'create_missing_journal_for_acquirers',
+}
diff --git a/addons/payment_ccavenue/controllers/__init__.py b/addons/payment_ccavenue/controllers/__init__.py
new file mode 100644
index 00000000000..5d4b25db9c0
--- /dev/null
+++ b/addons/payment_ccavenue/controllers/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from . import main
diff --git a/addons/payment_ccavenue/controllers/main.py b/addons/payment_ccavenue/controllers/main.py
new file mode 100644
index 00000000000..957df9864b5
--- /dev/null
+++ b/addons/payment_ccavenue/controllers/main.py
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+import logging
+import pprint
+import werkzeug
+
+from odoo import http
+from odoo.http import request
+
+
+_logger = logging.getLogger(__name__)
+
+
+class CCAvenueController(http.Controller):
+ _return_url = '/payment/ccavenue/return/'
+ _cancel_url = '/payment/ccavenue/cancel/'
+
+ @http.route(['/payment/ccavenue/return', '/payment/ccavenue/cancel'], type='http', auth='public', csrf=False)
+ def ccavenue_return(self, **post):
+ _logger.info('CCAvenue: Entering form_feedback with post data %s', pprint.pformat(post))
+ if post:
+ request.env['payment.transaction'].sudo().form_feedback(post, 'ccavenue')
+ return werkzeug.utils.redirect('/payment/process')
diff --git a/addons/payment_ccavenue/data/payment_ccavenue_data.xml b/addons/payment_ccavenue/data/payment_ccavenue_data.xml
new file mode 100644
index 00000000000..63220392c8a
--- /dev/null
+++ b/addons/payment_ccavenue/data/payment_ccavenue_data.xml
@@ -0,0 +1,15 @@
+
+
+
+ ccavenue
+
+
+ test
+ You will be redirected to the CCAvenue website after clicking on the payment button.
]]>
+
+ dummy
+ dummy
+ dummy
+
+
diff --git a/addons/payment_ccavenue/models/__init__.py b/addons/payment_ccavenue/models/__init__.py
new file mode 100644
index 00000000000..2ec5b9cd2f6
--- /dev/null
+++ b/addons/payment_ccavenue/models/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from . import payment
diff --git a/addons/payment_ccavenue/models/payment.py b/addons/payment_ccavenue/models/payment.py
new file mode 100755
index 00000000000..2f3ed126548
--- /dev/null
+++ b/addons/payment_ccavenue/models/payment.py
@@ -0,0 +1,163 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+import logging
+
+from binascii import hexlify, unhexlify
+from hashlib import md5
+from werkzeug import urls
+
+from odoo import api, fields, models, _
+from odoo.addons.payment.models.payment_acquirer import ValidationError
+from odoo.addons.payment_ccavenue.controllers.main import CCAvenueController
+from odoo.tools.float_utils import float_compare
+
+
+_logger = logging.getLogger(__name__)
+
+try:
+ from Crypto.Cipher import AES
+except ImportError:
+ _logger.info('pyCrypto library not found. If you plan to use payment_ccavenue, please install the library from https://pypi.python.org/pypi/pyCrypto')
+
+
+class PaymentAcquirer(models.Model):
+ _inherit = 'payment.acquirer'
+
+ provider = fields.Selection(selection_add=[('ccavenue', 'CCAvenue')])
+ ccavenue_merchant_id = fields.Char(string='CCAvenue Merchant ID', required_if_provider='ccavenue', groups='base.group_user')
+ ccavenue_access_code = fields.Char(string='Access Code', required_if_provider='ccavenue', groups='base.group_user')
+ ccavenue_working_key = fields.Char(string='Working Key', required_if_provider='ccavenue', groups='base.group_user')
+
+ def _get_ccavenue_urls(self, environment):
+ """ CCAvenue URLs"""
+ if environment == 'prod':
+ return {'ccavenue_form_url': 'https://secure.ccavenue.com/transaction/transaction.do?command=initiateTransaction'}
+ else:
+ return {'ccavenue_form_url': 'https://test.ccavenue.com/transaction/transaction.do?command=initiateTransaction'}
+
+ def _ccavenue_pad(self, data):
+ length = 16 - (len(data) % 16)
+ data += chr(length) * length
+ return data
+
+ @api.multi
+ def _ccavenue_encrypt_text(self, plaintext):
+ self.ensure_one()
+ iv = '\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f'
+ plaintext = self._ccavenue_pad(plaintext)
+ dec_digest = md5(self.ccavenue_working_key.encode('utf-8')).digest()
+ enc_cipher = AES.new(dec_digest, AES.MODE_CBC, iv)
+ encrypted_text = hexlify(enc_cipher.encrypt(plaintext)).decode('utf-8')
+ return encrypted_text
+
+ @api.multi
+ def _ccavenue_decrypt_text(self, ciphertext):
+ self.ensure_one()
+ iv = '\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f'
+ dec_digest = md5(self.ccavenue_working_key.encode('utf-8')).digest()
+ dec_cipher = AES.new(dec_digest, AES.MODE_CBC, iv)
+ decrypted_text = dec_cipher.decrypt(unhexlify(ciphertext)).decode('utf-8')
+ return decrypted_text
+
+ @api.multi
+ def ccavenue_form_generate_values(self, values):
+ self.ensure_one()
+ base_url = self.env['ir.config_parameter'].get_param('web.base.url')
+ ccavenue_values = dict(access_code=self.ccavenue_access_code,
+ merchant_id=self.ccavenue_merchant_id,
+ order_id=values.get('reference'),
+ currency=values.get('currency').name,
+ amount=values.get('amount'),
+ redirect_url=urls.url_join(base_url, CCAvenueController._return_url),
+ cancel_url=urls.url_join(base_url, CCAvenueController._cancel_url),
+ language='EN',
+ customer_identifier=values.get('partner_email'),
+ delivery_name=values.get('partner_name'),
+ delivery_address=values.get('partner_address'),
+ delivery_city=values.get('partner_city'),
+ delivery_state=values.get('partner_state').name,
+ delivery_zip=values.get('partner_zip'),
+ delivery_country=values.get('partner_country').name,
+ delivery_tel=values.get('partner_phone'),
+ billing_name=values.get('billing_partner_name'),
+ billing_address=values.get('billing_partner_address'),
+ billing_city=values.get('billing_partner_city'),
+ billing_state=values.get('billing_partner_state').name,
+ billing_zip=values.get('billing_partner_zip'),
+ billing_country=values.get('billing_partner_country').name,
+ billing_tel=values.get('billing_partner_phone'),
+ billing_email=values.get('billing_partner_email'),
+ )
+ ccavenue_values['encRequest'] = self._ccavenue_encrypt_text(urls.url_encode(ccavenue_values))
+ return ccavenue_values
+
+ @api.multi
+ def ccavenue_get_form_action_url(self):
+ self.ensure_one()
+ return self._get_ccavenue_urls(self.environment)['ccavenue_form_url']
+
+
+class PaymentTransaction(models.Model):
+ _inherit = 'payment.transaction'
+
+ # Override form_feedback
+ @api.model
+ def form_feedback(self, data, acquirer_name):
+ if acquirer_name == 'ccavenue':
+ acquirer = self.env['payment.acquirer'].search([('provider', '=', 'ccavenue')], limit=1)
+ data = acquirer._ccavenue_decrypt_text(data.get('encResp'))
+ data = urls.url_decode(data)
+ return super(PaymentTransaction, self).form_feedback(data=data, acquirer_name=acquirer_name)
+
+ @api.model
+ def _ccavenue_form_get_tx_from_data(self, data):
+ """ Given a data dict coming from ccavenue, verify it and find the related
+ transaction record. """
+ reference = data.get('order_id')
+ if not reference:
+ raise ValidationError(_('CCAvenue: received data with missing reference (%s)') % (reference))
+
+ transaction = self.search([('reference', '=', reference)])
+ if not transaction or len(transaction) > 1:
+ error_msg = _('CCAvenue: received data for reference %s') % (reference)
+ if not transaction:
+ error_msg += _('; no order found')
+ else:
+ error_msg += _('; multiple order found')
+ raise ValidationError(error_msg)
+ return transaction
+
+ @api.model
+ def _ccavenue_form_get_invalid_parameters(self, data):
+ invalid_parameters = []
+ if self.acquirer_reference and data.get('order_id') != self.acquirer_reference:
+ invalid_parameters.append(
+ ('Transaction Id', data.get('order_id'), self.acquirer_reference))
+ # check what is buyed
+ if float_compare(float(data.get('amount', '0.0')), self.amount, precision_digits=2) != 0:
+ invalid_parameters.append(('Amount', data.get('amount'), '%.2f' % self.amount))
+ return invalid_parameters
+
+ @api.model
+ def _ccavenue_form_validate(self, data):
+ if self.state == 'done':
+ _logger.warning('CCAvenue: trying to validate an already validated tx (ref %s)' % self.reference)
+ return True
+ status_code = data.get('order_status')
+ if status_code == "Success":
+ _logger.info('Validated CCAvenue payment for tx %s: set as done' % (self.reference))
+ self.write({'acquirer_reference': data.get('tracking_id')})
+ self._set_transaction_done()
+ return True
+ elif status_code == "Aborted":
+ _logger.info('Aborted CCAvenue payment for tx %s: set as cancel' % (self.reference))
+ self.write({'acquirer_reference': data.get('tracking_id'), 'state_message': data.get('status_message')})
+ self._set_transaction_cancel()
+ return False
+ else:
+ error = data.get('failure_message') or data.get('status_message')
+ _logger.info(error)
+ self.write({'acquirer_reference': data.get('tracking_id')})
+ self._set_transaction_error(error)
+ return False
diff --git a/addons/payment_ccavenue/static/description/icon.png b/addons/payment_ccavenue/static/description/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..368376d35385f4a0367c29442af7c7840986bc6e
GIT binary patch
literal 418009
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