From e70b977c09f817e3fffd53751ed1ae00aeb2c329 Mon Sep 17 00:00:00 2001 From: Abdurrahman Saber Date: Sun, 13 Apr 2025 10:42:18 +0200 Subject: [PATCH] [MIG] payment_hyperpay: v14 --- .../payment_hyperpay/.idea/.gitignore | 3 - .../inspectionProfiles/profiles_settings.xml | 6 - .../payment_hyperpay/.idea/misc.xml | 4 - .../payment_hyperpay/.idea/modules.xml | 8 - .../.idea/payment_hyperpay.iml | 8 - .../payment_hyperpay/__manifest__.py | 55 ++-- .../payment_hyperpay/controllers/main.py | 261 +++++++++--------- .../controllers/main_before_email_patch.py | 136 --------- .../data/payment_acquirer_data.xml | 16 +- .../payment_hyperpay/models/__init__.py | 1 - .../models/acount_payment_method.py | 13 - .../payment_hyperpay/models/payment.py | 106 +++---- .../static/src/js/hyperpay.js | 15 - .../static/src/js/payment_hyperpay.js | 139 +++++----- .../static/src/xml/hyperpay.xml | 20 -- .../views/payment_hyperpay_templates.xml | 68 ++--- .../payment_hyperpay/views/payment_views.xml | 10 +- .../payment_hyperpay/views/website_assets.xml | 1 - 18 files changed, 299 insertions(+), 571 deletions(-) delete mode 100644 odex25_donation/payment_hyperpay/.idea/.gitignore delete mode 100644 odex25_donation/payment_hyperpay/.idea/inspectionProfiles/profiles_settings.xml delete mode 100644 odex25_donation/payment_hyperpay/.idea/misc.xml delete mode 100644 odex25_donation/payment_hyperpay/.idea/modules.xml delete mode 100644 odex25_donation/payment_hyperpay/.idea/payment_hyperpay.iml delete mode 100644 odex25_donation/payment_hyperpay/controllers/main_before_email_patch.py delete mode 100644 odex25_donation/payment_hyperpay/models/acount_payment_method.py delete mode 100644 odex25_donation/payment_hyperpay/static/src/js/hyperpay.js delete mode 100644 odex25_donation/payment_hyperpay/static/src/xml/hyperpay.xml diff --git a/odex25_donation/payment_hyperpay/.idea/.gitignore b/odex25_donation/payment_hyperpay/.idea/.gitignore deleted file mode 100644 index 26d33521a..000000000 --- a/odex25_donation/payment_hyperpay/.idea/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml diff --git a/odex25_donation/payment_hyperpay/.idea/inspectionProfiles/profiles_settings.xml b/odex25_donation/payment_hyperpay/.idea/inspectionProfiles/profiles_settings.xml deleted file mode 100644 index 105ce2da2..000000000 --- a/odex25_donation/payment_hyperpay/.idea/inspectionProfiles/profiles_settings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/odex25_donation/payment_hyperpay/.idea/misc.xml b/odex25_donation/payment_hyperpay/.idea/misc.xml deleted file mode 100644 index f662c2b3e..000000000 --- a/odex25_donation/payment_hyperpay/.idea/misc.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/odex25_donation/payment_hyperpay/.idea/modules.xml b/odex25_donation/payment_hyperpay/.idea/modules.xml deleted file mode 100644 index bae327838..000000000 --- a/odex25_donation/payment_hyperpay/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/odex25_donation/payment_hyperpay/.idea/payment_hyperpay.iml b/odex25_donation/payment_hyperpay/.idea/payment_hyperpay.iml deleted file mode 100644 index d0876a78d..000000000 --- a/odex25_donation/payment_hyperpay/.idea/payment_hyperpay.iml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/odex25_donation/payment_hyperpay/__manifest__.py b/odex25_donation/payment_hyperpay/__manifest__.py index 5a585364d..034b737a3 100644 --- a/odex25_donation/payment_hyperpay/__manifest__.py +++ b/odex25_donation/payment_hyperpay/__manifest__.py @@ -14,16 +14,16 @@ # If not, see ################################################################################# { - "name" : "Hyperpay Payment Acquirer", - "summary" : """Website Hyper Pay Payment Acquirer""", - "category" : "Website", - "version" : "1.0.0", - "sequence" : 1, - "author" : "Webkul Software Pvt. Ltd.", - "license" : "Other proprietary", - "maintainer" : "Anuj Kumar Chhetri", - "website" : "https://store.webkul.com/odoo-hyperpay-payment-acquirer.html", - "description" : """Odoo Hyperpay Payment Gateway + "name": "Hyperpay Payment Acquirer", + "summary": """Website Hyper Pay Payment Acquirer""", + "category": "Website", + "version": "1.0.0", + "sequence": 1, + "author": "Webkul Software Pvt. Ltd.", + "license": "Other proprietary", + "maintainer": "Anuj Kumar Chhetri", + "website": "https://store.webkul.com/odoo-hyperpay-payment-acquirer.html", + "description": """Odoo Hyperpay Payment Gateway Payment Gateway Hyperpay hyper pay @@ -38,23 +38,20 @@ Customer payment Integrate hyperpay payment acquirer in Odoo Integrate hyperpay payment gateway in Odoo""", - "live_test_url" : "http://odoodemo.webkul.com/?module=payment_hyperpay", - "depends" : ['account', - 'payment', - 'website_sale', - ], - "data" : [ - 'views/payment_views.xml', - 'views/payment_hyperpay_templates.xml', - 'data/payment_acquirer_data.xml', - ], - 'assets' : { - 'web.assets_frontend': ['payment_hyperpay/static/src/css/loader.css'] - }, - "demo" : [], - "images" : ['static/description/banner.gif'], - "application" : True, - "installable" : True, - "price" : 99.0, - "currency" : "USD", + "live_test_url": "http://odoodemo.webkul.com/?module=payment_hyperpay", + "depends": ['account', + 'payment', + 'website_sale'], + "data": [ + 'views/payment_views.xml', + 'views/payment_hyperpay_templates.xml', + 'data/payment_acquirer_data.xml', + 'views/website_assets.xml', + ], + "demo": [], + "images": ['static/description/banner.gif'], + "application": True, + "installable": True, + "price": 99.0, + "currency": "USD", } diff --git a/odex25_donation/payment_hyperpay/controllers/main.py b/odex25_donation/payment_hyperpay/controllers/main.py index ea0d56e90..716d446a4 100644 --- a/odex25_donation/payment_hyperpay/controllers/main.py +++ b/odex25_donation/payment_hyperpay/controllers/main.py @@ -1,137 +1,124 @@ -# -*- coding: utf-8 -*- -################################################################################# -# -# Copyright (c) 2015-Present Webkul Software Pvt. Ltd. () -# -################################################################################# - -import requests -import werkzeug -from werkzeug import urls -import json -from odoo import http -import urllib -import random -# from odoo.addons.portal.controllers.portal import _build_url_w_params - -#from odoo.addons.payment.controllers.portal import PaymentProcessing -from odoo.addons.website_sale.controllers.main import WebsiteSale -from odoo.http import request -from odoo.addons.payment_hyperpay.data.payment_icon import payment_icon - -import logging -_logger = logging.getLogger(__name__) - -# test_domain = "https://test.oppwa.com" -# live_domain = "https://oppwa.com" -test_domain = "https://eu-test.oppwa.com" -live_domain = "https://eu-prod.oppwa.com" - -def _get_checkout_id(**params): - auth = params.pop('auth', '') - env = params.pop('env') - if env == 'enabled': - domain = live_domain - else: - domain = test_domain - # params['testMode'] = 'EXTERNAL' - url_string = domain + "/v1/checkouts" - - # url = _build_url_w_params(url_string, params) - headers = { - "Authorization" : auth, - } - try: - r = requests.post(url=url_string, data=params, headers=headers) - r = r.json() - if 'parameterErrors' in r.get('result'): - raise Exception - return r - except Exception as e: - return {} - -class HyperPayController(http.Controller): - - @http.route('/payment/hyperpay/checkout/create', type='json', auth='public', csrf=False, website=True) - def create_hyperpay_checkout(self, **post): - _logger.info('--post---%r', post) - tx = request.env['payment.transaction'].sudo().search([('id','=',int(post.get('txId', 0)))]) - final_response = {} - if tx: - base_url = request.env['ir.config_parameter'].sudo().get_param('web.base.url') - acq = tx.provider_id - partner_id = tx.partner_id - order_no = tx.reference.split('-', 1) - partner_name = partner_id.name or 'Guest' - partner_mobile = partner_id.mobile or '' - if order_no: - order_id = request.env['sale.order'].sudo().search([('name', '=', order_no[0])], limit=1) - if order_id: - partner_mobile = order_id.order_mobile_number - partner_name = order_id.order_name - kwargs = { - "auth": "Bearer " + acq.hyperpay_authorization, - "entityId": acq.hyperpay_merchant_id, - "amount": '%.2f'%tx.amount, - "currency": tx.currency_id and tx.sudo().currency_id.name or '', - "paymentType": "DB", - "env": acq.state, - "customParameters[SHOPPER_tx_id]": tx.id, - "merchantTransactionId": tx.reference, - "billing.street1": partner_id.street or 'Riyadh', - "billing.street2": partner_id.street2 or '', - "billing.city": partner_id.city or 'Riyadh', - "billing.state": partner_id.state_id.name or 'Riyadh', - "billing.postcode": partner_id.zip or '', - "billing.country": partner_id.country_id.code or 'SA', - "customer.givenName": partner_name, - "customer.surname": '', - "customer.email": '{seq}@ensan.sa'.format(seq=random.randint(0,10000)), - "customer.mobile": partner_mobile, - "customer.phone": partner_id and partner_id.phone or partner_id.mobile or '', - } - resp = _get_checkout_id(**kwargs) - tx.hyperpay_checkout_id = resp.get('id') - domain = live_domain if acq.state == 'enabled' else test_domain - #payment_acq = request.env['payment.acquirer'].sudo() - #hyperpay =payment_acq.search([('name','=','HyperPay')]) - payment_icons = acq.payment_icon_ids.mapped('name') - data_brands = "VISA" - if(len(payment_icon)>1): - brands = [payment_icon[i.upper()] for i in payment_icons if i.upper() in payment_icon.keys()] - data_brands = brands and " ".join(brands) or data_brands - - final_response = { - "checkoutId": resp.get('id',''), - 'domain': domain, - 'base_url': base_url, - 'data_brands':data_brands, - 'acq':acq.id - } - return final_response - - - @http.route('/payment/hyperpay/result', type='http', auth='public', csrf=False,website=True ,save_session=True) - def hyperpay_shopper_result(self, **post): - acq = request.env['payment.provider'].sudo().search([('id', '=', post.get('acq'))]) - if acq.state == 'enabled': - url = live_domain - else: - url = test_domain - url += '/' + post.get('resourcePath')+"?entityId=%s"%(acq.hyperpay_merchant_id) - headers = { - "Authorization" : "Bearer " + acq.hyperpay_authorization, - } - resp = requests.get(url=url, headers=headers).json() - - _logger.info("-----/payment/hyperpay/result-----response------------%r----", resp) - - payment = request.env['payment.transaction'].sudo() - tx_id = payment.search([('hyperpay_checkout_id', '=', post.get('id',''))]) - tx = resp.get('customParameters',{}).get('SHOPPER_tx_id') or tx_id and tx_id.id or '' - resp.update({'tx_id': tx}) - #if tx: - # PaymentProcessing.add_payment_transaction(payment.browse(int(tx))) - - res = tx_id._handle_notification_data('hyperpay',resp) - return werkzeug.utils.redirect(f'/payment/status') +# -*- coding: utf-8 -*- +################################################################################# +# +# Copyright (c) 2015-Present Webkul Software Pvt. Ltd. () +# +################################################################################# + +import requests +from odoo import http +import random + +from odoo.http import request +from odoo.addons.payment_hyperpay.data.payment_icon import payment_icon + +import logging +_logger = logging.getLogger(__name__) + +# test_domain = "https://test.oppwa.com" +# live_domain = "https://oppwa.com" +test_domain = "https://eu-test.oppwa.com" +live_domain = "https://eu-prod.oppwa.com" + +def _get_checkout_id(**params): + auth = params.pop('auth', '') + env = params.pop('env') + if env == 'enabled': + domain = live_domain + else: + domain = test_domain + url_string = domain + "/v1/checkouts" + + headers = { + "Authorization": auth, + } + try: + r = requests.post(url=url_string, data=params, headers=headers) + r = r.json() + if 'parameterErrors' in r.get('result'): + raise Exception + return r + except Exception as e: + return {} + +class HyperPayController(http.Controller): + + @http.route('/payment/hyperpay/checkout/create', type='json', auth='public', csrf=False, website=True) + def create_hyperpay_checkout(self, **post): + _logger.info('--post---%r', post) + tx = request.env['payment.transaction'].sudo().search([('id', '=', int(post.get('txId', 0)))]) + final_response = {} + if tx: + base_url = request.env['ir.config_parameter'].sudo().get_param('web.base.url') + acq = tx.acquirer_id + partner_id = tx.partner_id + order_id = tx.sale_order_ids[0] if tx.sale_order_ids else None + partner_name = partner_id.name or 'Guest' + partner_mobile = partner_id.mobile or '' + if order_id: + partner_mobile = order_id.order_mobile_number + partner_name = order_id.order_name + kwargs = { + "auth": "Bearer " + acq.hyperpay_authorization, + "entityId": acq.hyperpay_merchant_id, + "amount": '%.2f' % tx.amount, + "currency": tx.currency_id and tx.sudo().currency_id.name or '', + "paymentType": "DB", + "env": acq.state, + "customParameters[SHOPPER_tx_id]": tx.id, + "merchantTransactionId": tx.reference, + "billing.street1": partner_id.street or 'Riyadh', + "billing.street2": partner_id.street2 or '', + "billing.city": partner_id.city or 'Riyadh', + "billing.state": partner_id.state_id.name or 'Riyadh', + "billing.postcode": partner_id.zip or '', + "billing.country": partner_id.country_id.code or 'SA', + "customer.givenName": partner_name, + "customer.surname": '', + "customer.email": '{seq}@ensan.sa'.format(seq=random.randint(0, 10000)), + "customer.mobile": partner_mobile, + "customer.phone": partner_id and partner_id.phone or partner_id.mobile or '', + } + resp = _get_checkout_id(**kwargs) + tx.hyperpay_checkout_id = resp.get('id') + domain = live_domain if acq.state == 'enabled' else test_domain + + payment_icons = acq.payment_icon_ids.mapped('name') + data_brands = "VISA" + if (len(payment_icon) > 1): + brands = [payment_icon[i.upper()] for i in payment_icons if i.upper() in payment_icon.keys()] + data_brands = brands and " ".join(brands) or data_brands + + final_response = { + "checkoutId": resp.get('id', ''), + 'domain': domain, + 'base_url': base_url, + 'data_brands': data_brands, + 'acq': acq.id + } + return final_response + + @http.route('/payment/hyperpay/result', type='http', auth='public', csrf=False, website=True, save_session=True) + def hyperpay_shopper_result(self, **post): + acq = request.env['payment.acquirer'].sudo().search([('id', '=', post.get('acq'))]) + if acq.state == 'enabled': + url = live_domain + else: + url = test_domain + url += '/' + post.get('resourcePath') + "?entityId=%s" % (acq.hyperpay_merchant_id) + headers = { + "Authorization": "Bearer " + acq.hyperpay_authorization, + } + resp = requests.get(url=url, headers=headers).json() + + _logger.info("-----/payment/hyperpay/result-----response------------%r----", resp) + + payment = request.env['payment.transaction'].sudo() + tx_id = payment.search([('hyperpay_checkout_id', '=', post.get('id', ''))]) + tx = resp.get('customParameters', {}).get('SHOPPER_tx_id') or tx_id and tx_id.id or '' + resp.update({'tx_id': tx}) + + res = request.env['payment.transaction'].sudo().form_feedback(resp, "hyperpay") + ids = tx_id.sale_order_ids.sudo().ids + request.session['sale_last_order_id'] = ids[0] if len(ids) else None + return request.redirect('/payment/process') diff --git a/odex25_donation/payment_hyperpay/controllers/main_before_email_patch.py b/odex25_donation/payment_hyperpay/controllers/main_before_email_patch.py deleted file mode 100644 index f10c7272b..000000000 --- a/odex25_donation/payment_hyperpay/controllers/main_before_email_patch.py +++ /dev/null @@ -1,136 +0,0 @@ -# -*- coding: utf-8 -*- -################################################################################# -# -# Copyright (c) 2015-Present Webkul Software Pvt. Ltd. () -# -################################################################################# - -import requests -import werkzeug -from werkzeug import urls -import json -from odoo import http -import urllib -# from odoo.addons.portal.controllers.portal import _build_url_w_params - -#from odoo.addons.payment.controllers.portal import PaymentProcessing -from odoo.addons.website_sale.controllers.main import WebsiteSale -from odoo.http import request -from odoo.addons.payment_hyperpay.data.payment_icon import payment_icon - -import logging -_logger = logging.getLogger(__name__) - -# test_domain = "https://test.oppwa.com" -# live_domain = "https://oppwa.com" -test_domain = "https://eu-test.oppwa.com" -live_domain = "https://eu-prod.oppwa.com" - -def _get_checkout_id(**params): - auth = params.pop('auth', '') - env = params.pop('env') - if env == 'enabled': - domain = live_domain - else: - domain = test_domain - # params['testMode'] = 'EXTERNAL' - url_string = domain + "/v1/checkouts" - - # url = _build_url_w_params(url_string, params) - headers = { - "Authorization" : auth, - } - try: - r = requests.post(url=url_string, data=params, headers=headers) - r = r.json() - if 'parameterErrors' in r.get('result'): - raise Exception - return r - except Exception as e: - return {} - -class HyperPayController(http.Controller): - - @http.route('/payment/hyperpay/checkout/create', type='json', auth='public', csrf=False, website=True) - def create_hyperpay_checkout(self, **post): - _logger.info('--post---%r', post) - tx = request.env['payment.transaction'].sudo().search([('id','=',int(post.get('txId', 0)))]) - final_response = {} - if tx: - base_url = request.env['ir.config_parameter'].sudo().get_param('web.base.url') - acq = tx.provider_id - partner_id = tx.partner_id - order_no = tx.reference.split('-', 1) - partner_name = partner_id.name or 'Guest' - partner_mobile = partner_id.mobile or '' - if order_no: - order_id = request.env['sale.order'].sudo().search([('name', '=', order_no[0])], limit=1) - if order_id: - partner_mobile = order_id.order_mobile_number - partner_name = order_id.order_name - kwargs = { - "auth": "Bearer " + acq.hyperpay_authorization, - "entityId": acq.hyperpay_merchant_id, - "amount": '%.2f'%tx.amount, - "currency": tx.currency_id and tx.sudo().currency_id.name or '', - "paymentType": "DB", - "env": acq.state, - "customParameters[SHOPPER_tx_id]": tx.id, - "merchantTransactionId": tx.reference, - "billing.street1": partner_id.street or 'Riyadh', - "billing.street2": partner_id.street2 or '', - "billing.city": partner_id.city or 'Riyadh', - "billing.state": partner_id.state_id.name or 'Riyadh', - "billing.postcode": partner_id.zip or '', - "billing.country": partner_id.country_id.code or 'SA', - "customer.givenName": partner_name, - "customer.surname": '', - "customer.email": partner_id and partner_id.email or '', - "customer.mobile": partner_mobile, - "customer.phone": partner_id and partner_id.phone or partner_id.mobile or '', - } - resp = _get_checkout_id(**kwargs) - tx.hyperpay_checkout_id = resp.get('id') - domain = live_domain if acq.state == 'enabled' else test_domain - #payment_acq = request.env['payment.acquirer'].sudo() - #hyperpay =payment_acq.search([('name','=','HyperPay')]) - payment_icons = acq.payment_icon_ids.mapped('name') - data_brands = "VISA" - if(len(payment_icon)>1): - brands = [payment_icon[i.upper()] for i in payment_icons if i.upper() in payment_icon.keys()] - data_brands = brands and " ".join(brands) or data_brands - - final_response = { - "checkoutId": resp.get('id',''), - 'domain': domain, - 'base_url': base_url, - 'data_brands':data_brands, - 'acq':acq.id - } - return final_response - - - @http.route('/payment/hyperpay/result', type='http', auth='public', csrf=False,website=True ,save_session=True) - def hyperpay_shopper_result(self, **post): - acq = request.env['payment.provider'].sudo().search([('id', '=', post.get('acq'))]) - if acq.state == 'enabled': - url = live_domain - else: - url = test_domain - url += '/' + post.get('resourcePath')+"?entityId=%s"%(acq.hyperpay_merchant_id) - headers = { - "Authorization" : "Bearer " + acq.hyperpay_authorization, - } - resp = requests.get(url=url, headers=headers).json() - - _logger.info("-----/payment/hyperpay/result-----response------------%r----", resp) - - payment = request.env['payment.transaction'].sudo() - tx_id = payment.search([('hyperpay_checkout_id', '=', post.get('id',''))]) - tx = resp.get('customParameters',{}).get('SHOPPER_tx_id') or tx_id and tx_id.id or '' - resp.update({'tx_id': tx}) - #if tx: - # PaymentProcessing.add_payment_transaction(payment.browse(int(tx))) - - res = tx_id._handle_notification_data('hyperpay',resp) - return werkzeug.utils.redirect(f'/payment/status') diff --git a/odex25_donation/payment_hyperpay/data/payment_acquirer_data.xml b/odex25_donation/payment_hyperpay/data/payment_acquirer_data.xml index 1d05140fc..8c7e2219a 100644 --- a/odex25_donation/payment_hyperpay/data/payment_acquirer_data.xml +++ b/odex25_donation/payment_hyperpay/data/payment_acquirer_data.xml @@ -1,13 +1,11 @@ - + HyperPay - hyperpay - + hyperpay + - - test OGE4Mjk0MTc0ZDA1OTViYjAxNGQwNWQ4MjllNzAxZDF8OVRuSlBjMm45aA== 8a8294174d0595bb014d05d82e5b01d2 @@ -18,11 +16,9 @@
Expiry Date : any date after today
]]>
-
- - HyperPay - hyperpay - inbound +
diff --git a/odex25_donation/payment_hyperpay/models/__init__.py b/odex25_donation/payment_hyperpay/models/__init__.py index abf027f7c..7cf45f5a1 100644 --- a/odex25_donation/payment_hyperpay/models/__init__.py +++ b/odex25_donation/payment_hyperpay/models/__init__.py @@ -5,4 +5,3 @@ # ################################################################################# from . import payment -from . import acount_payment_method diff --git a/odex25_donation/payment_hyperpay/models/acount_payment_method.py b/odex25_donation/payment_hyperpay/models/acount_payment_method.py deleted file mode 100644 index bba00c83e..000000000 --- a/odex25_donation/payment_hyperpay/models/acount_payment_method.py +++ /dev/null @@ -1,13 +0,0 @@ -from odoo import api, models -import logging -_logger = logging.getLogger(__name__) - -class AccountPaymentMethod(models.Model): - _inherit = 'account.payment.method' - - @api.model - def _get_payment_method_information(self): - res = super()._get_payment_method_information() - _logger.info("this is res %r",res) - res['hyperpay'] = {'mode': 'unique', 'domain': [('type', '=', 'bank')]} - return res diff --git a/odex25_donation/payment_hyperpay/models/payment.py b/odex25_donation/payment_hyperpay/models/payment.py index 5497c0351..646e04ccb 100644 --- a/odex25_donation/payment_hyperpay/models/payment.py +++ b/odex25_donation/payment_hyperpay/models/payment.py @@ -10,29 +10,20 @@ import logging import dateutil.parser import pytz from odoo import api, fields, models, _ -from odoo.addons.payment.models.payment_provider import ValidationError -import pprint -from odoo.fields import Datetime +from odoo.exceptions import ValidationError _logger = logging.getLogger(__name__) class AcquirerHyperPay(models.Model): - _inherit = 'payment.provider' + _inherit = 'payment.acquirer' - code = fields.Selection(selection_add=[('hyperpay', 'HyperPay')],ondelete={'hyperpay': 'set default'}) + provider = fields.Selection(selection_add=[('hyperpay', 'HyperPay')], ondelete={'hyperpay': 'set default'}) hyperpay_authorization = fields.Char('Authorization', required_if_provider='hyperpay', groups='base.group_user', help='Authorization header with Bearer authentication scheme') hyperpay_merchant_id = fields.Char( 'Merchant Id', groups='base.group_user', help='The Merchant ID is required to authorize the request') - #New method added to core - def _get_default_payment_method_id(self,code): - provider_method_id = self._get_provider_payment_method(code) - if provider_method_id: - return provider_method_id.id - return self.env.ref('account.account_payment_method_manual_in').id - def hyperpay_form_generate_values(self, values): hyperpay_tx_values = dict(values) if values.get('reference','/') != "/": @@ -47,76 +38,51 @@ class HyperPayPaymentTransaction(models.Model): hyperpay_checkout_id = fields.Char('Checkout Id', groups='base.group_user', help='Unique checkout id for every hyper transasction') - - def _get_specific_rendering_values(self, processing_values): - """ Override of payment to return Alipay-specific rendering values. - Note: self.ensure_one() from `_get_processing_values` - :param dict processing_values: The generic and specific processing values of the transaction - :return: The dict of acquirer-specific processing values - :rtype: dict - """ - res = super()._get_specific_rendering_values(processing_values) - if self.provider_code != 'hyperpay': - return res - - _logger.info('--specific------%r',(processing_values,self.reference)) - hyperpay_tx_values={} - tx = self.env['payment.transaction'].sudo().search([('reference', '=', self.reference)]) - _logger.info('--specific------%r',(processing_values,self.reference,tx.id)) - hyperpay_tx_values.update({ - "txId": tx.id, - 'reference':self.reference - }) - return hyperpay_tx_values - - @api.model - def _get_tx_from_notification_data(self,provider, data): - reference = data.get('ndc') - tx_id = data.get('tx_id') - tx = tx_id and self.sudo().browse(int(tx_id)) - if not tx or len(tx) > 1: - error_msg = _('received data for reference %s') % (pprint.pformat(reference)) - if not tx: - error_msg += _('; no order found') - else: - error_msg += _('; multiple order found') + def _hyperpay_form_get_tx_from_data(self, data): + reference, txn_id = data.get('ndc'), data.get('tx_id') + if not reference or not txn_id: + error_msg = _('HyperPay: received data with missing reference (%s) or txn_id (%s)') % (reference, txn_id) _logger.info(error_msg) raise ValidationError(error_msg) - return tx - - def _process_notification_data(self, data): - - res = super()._process_notification_data(data) - if self.provider_code != 'hyperpay': - return res - - _logger.info('Validated transfer payment for tx %s: set as pending' % (self.reference)) + txs = self.env['payment.transaction'].search([('id', '=', int(txn_id))]) + if not txs or len(txs) > 1: + error_msg = 'HyperPay: received data for reference %s' % (reference) + if not txs: + error_msg += '; no order found' + else: + error_msg += '; multiple order found' + _logger.info(error_msg) + raise ValidationError(error_msg) + return txs[0] + + def _hyperpay_form_validate(self, data): + _logger.info('Validated HyperPay payment for tx %s: set as pending' % (self.reference)) result = data.get('result') result_code = result.get('code') - res ={} + res = { + 'acquirer_reference': data.get('id'), + 'state_message': result.get('description', '') + } success_pattern = [ - '^(000\.000\.|000\.100\.1|000\.[36])', - '^(000\.400\.0[^3]|000\.400\.100)' + '^(000\.000\.|000\.100\.1|000\.[36])', + '^(000\.400\.0[^3]|000\.400\.100)' ] - pending_pattern =[ - '^(000\.200)', - '^(800\.400\.5|100\.400\.500)' + pending_pattern = [ + '^(000\.200)', + '^(800\.400\.5|100\.400\.500)' ] - _logger.info('------feedback-%r',result) if re.match(success_pattern[0], result_code) or re.match(success_pattern[1], result_code): date_validate = dateutil.parser.parse(data.get('timestamp')).astimezone(pytz.utc).replace(tzinfo=None) - res.update(provider_reference=data.get('id'), last_state_change=date_validate, state_message= result.get('description','')) - self._set_done() + res.update(provider_reference=data.get('id'), date=date_validate) + self._set_transaction_done() elif re.match(pending_pattern[0], result_code) or re.match(pending_pattern[1], result_code): - res.update(state_message= result.get('description','')) - self._set_pending() + self._set_transaction_pending() elif re.match('/^(000\.100\.2)/', result_code): - res.update(state_message= result.get('description','')) - self._set_error(result.get('description','')) + self._set_transaction_error() else: - res.update(state_message= result.get('description','')) - self._set_canceled() - _logger.info('------feedback-%r',(res,self.write(res),self)) + error = 'Received unrecognized status for HyperPay payment %s: %s, set as error' % (self.reference, result_code) + _logger.info(error) + self._set_transaction_cancel() return self.write(res) diff --git a/odex25_donation/payment_hyperpay/static/src/js/hyperpay.js b/odex25_donation/payment_hyperpay/static/src/js/hyperpay.js deleted file mode 100644 index a8041916a..000000000 --- a/odex25_donation/payment_hyperpay/static/src/js/hyperpay.js +++ /dev/null @@ -1,15 +0,0 @@ -var wpwlOptions = { - onReady: function(){ - var shopOrigin = $('input[name="shopOrigin"]'); - var origin = parent.window.location.origin; - parent_iframe = $('#hyperpay_iframe', window.parent.document); - parent_iframe.css({"width":"100%", "height":"21em", "border":"none", "display":""}); - $('.hyperpay_loader', window.parent.document).remove(); - $('#hyperpay_close', window.parent.document).on('click', function(){ - parent.window.location.reload(true); - }); - if (shopOrigin.length != 0 && shopOrigin.val() == 'null'){ - shopOrigin.val(origin); - } - } - } diff --git a/odex25_donation/payment_hyperpay/static/src/js/payment_hyperpay.js b/odex25_donation/payment_hyperpay/static/src/js/payment_hyperpay.js index fa46b82d7..3b7d9e700 100644 --- a/odex25_donation/payment_hyperpay/static/src/js/payment_hyperpay.js +++ b/odex25_donation/payment_hyperpay/static/src/js/payment_hyperpay.js @@ -1,31 +1,28 @@ -odoo.define('payment_hyperpay.payment_hyperpay', function (require) { - "use strict"; +odoo.define("payment_hyperpay.payment_hyperpay", function (require) { + "use strict"; - var core = require('web.core'); - var Dialog = require('web.Dialog'); - var publicWidget = require('web.public.widget'); - var ajax = require('web.ajax'); - const {assets} = require('@web/core/assets'); + var core = require("web.core"); + var publicWidget = require("web.public.widget"); + var ajax = require("web.ajax"); - var qweb = core.qweb; - var _t = core._t; + var _t = core._t; - if ($.blockUI) { - $.blockUI.defaults.css.border = '0'; - $.blockUI.defaults.css["background-color"] = ''; - $.blockUI.defaults.overlayCSS["opacity"] = '0.5'; - $.blockUI.defaults.overlayCSS["z-index"] = '1050'; + if ($.blockUI) { + $.blockUI.defaults.css.border = "0"; + $.blockUI.defaults.css["background-color"] = ""; + $.blockUI.defaults.overlayCSS["opacity"] = "0.5"; + $.blockUI.defaults.overlayCSS["z-index"] = "1050"; } // Reference // https://dev.to/pulljosh/how-to-load-html-css-and-js-code-into-an-iframe-2blc - const getGeneratedPageURL = ({ html, css, js}) => { - const getBlobURL = (code, type) => { - const blob = new Blob([code], { type }) - return URL.createObjectURL(blob) - } + const getGeneratedPageURL = ({ html, css, js }) => { + const getBlobURL = (code, type) => { + const blob = new Blob([code], { type }); + return URL.createObjectURL(blob); + }; - const source = ` + const source = ` ${css} @@ -82,79 +79,79 @@ odoo.define('payment_hyperpay.payment_hyperpay', function (require) { } } - ${html || ''} + ${html || ""} - ` + `; - return getBlobURL(source, 'text/html') - } + return getBlobURL(source, "text/html"); + }; - var HyperpayPaymentForm = publicWidget.Widget.extend({ - init: function() { - this.tx_id = $('.clasic_hyperpay_tx').val(); + var HyperpayPaymentForm = publicWidget.Widget.extend({ + init: function () { + this.tx_id = $(".clasic_hyperpay_tx").val(); this._initBlockUI(_t("Loading...")); this.start(); }, - start: function() { + start: function () { var self = this; self._createHyperpayCheckoutId(); }, - _createHyperpayCheckoutId: function() { + _createHyperpayCheckoutId: function () { var self = this; - ajax.jsonRpc('/payment/hyperpay/checkout/create', 'call', { - 'txId': self.tx_id - }) - .then(function (result) { + ajax.jsonRpc("/payment/hyperpay/checkout/create", "call", { + txId: self.tx_id, + }).then(function (result) { if (result) { - self._renderHyperpayModal(result.checkoutId, result.domain, result.base_url,result.data_brands,result.acq); + self._renderHyperpayModal(result.checkoutId, result.domain, result.base_url, result.data_brands, result.acq); } else { - console.log('Error Occured'); + console.log("Error Occured"); } }); }, - _renderHyperpayModal: function(checkoutId, domain, base_url,data_brands,acq) { - var self = this; - try{ - var $modal_html = $($('.payment_hyper_modal').get()[0]); - $modal_html.appendTo($('body')).modal({keyboard: false, backdrop: 'static'}); - var style_css = '' - var script = '' - var js_script = '' - var shopperResultUrlTag = '
' -console.log(shopperResultUrlTag); - var theIframe = document.createElement("iframe"); - theIframe.id = "hyperpay_iframe"; - theIframe.style = "display:none"; - var html = script + shopperResultUrlTag; - - const url = getGeneratedPageURL({ - html: html, - css: style_css, - js: js_script - }) - theIframe.src = url; - $('#hyperpay-modal-body')[0].appendChild(theIframe); - $modal_html.modal('show'); - } - catch(err){ - console.log('component error:', err); - } + _renderHyperpayModal: function (checkoutId, domain, base_url, data_brands, acq) { + var self = this; + try { + var $modal_html = $($(".payment_hyper_modal").get()[0]); + $modal_html.appendTo($("body")).modal({ keyboard: false, backdrop: "static" }); + var style_css = ''; + var script = ''; + var js_script = ''; + var shopperResultUrlTag = + '
'; + console.log(shopperResultUrlTag); + var theIframe = document.createElement("iframe"); + theIframe.id = "hyperpay_iframe"; + theIframe.style = "display:none"; + var html = script + shopperResultUrlTag; + const url = getGeneratedPageURL({ + html: html, + css: style_css, + js: js_script, + }); + theIframe.src = url; + $("#hyperpay-modal-body")[0].appendChild(theIframe); + $modal_html.modal("show"); + } catch (err) { + console.log("component error:", err); + } }, - _initBlockUI: function(message) { + _initBlockUI: function (message) { if ($.blockUI) { $.blockUI({ - 'message': '

' + - '
' + message + - '

' + message: '

' + "
" + message + "

", }); } - $("#o_payment_form_pay").attr('disabled', 'disabled'); + $("#o_payment_form_pay").attr("disabled", "disabled"); }, + }); - }); - - new HyperpayPaymentForm(); - + new HyperpayPaymentForm(); }); diff --git a/odex25_donation/payment_hyperpay/static/src/xml/hyperpay.xml b/odex25_donation/payment_hyperpay/static/src/xml/hyperpay.xml deleted file mode 100644 index e346dbb11..000000000 --- a/odex25_donation/payment_hyperpay/static/src/xml/hyperpay.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - diff --git a/odex25_donation/payment_hyperpay/views/payment_hyperpay_templates.xml b/odex25_donation/payment_hyperpay/views/payment_hyperpay_templates.xml index af03ade16..e7efc9c68 100644 --- a/odex25_donation/payment_hyperpay/views/payment_hyperpay_templates.xml +++ b/odex25_donation/payment_hyperpay/views/payment_hyperpay_templates.xml @@ -1,34 +1,34 @@ - - - - - - + + + + + + diff --git a/odex25_donation/payment_hyperpay/views/payment_views.xml b/odex25_donation/payment_hyperpay/views/payment_views.xml index d7d651736..830cafbd1 100644 --- a/odex25_donation/payment_hyperpay/views/payment_views.xml +++ b/odex25_donation/payment_hyperpay/views/payment_views.xml @@ -4,15 +4,15 @@ provider.form.hyperpay - payment.provider - + payment.acquirer + - - + + - + diff --git a/odex25_donation/payment_hyperpay/views/website_assets.xml b/odex25_donation/payment_hyperpay/views/website_assets.xml index 33c2de03d..84eed7b11 100644 --- a/odex25_donation/payment_hyperpay/views/website_assets.xml +++ b/odex25_donation/payment_hyperpay/views/website_assets.xml @@ -4,7 +4,6 @@