123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- # Part of Odoo. See LICENSE file for full copyright and licensing details.
- # Original Copyright 2015 Eezee-It, modified and maintained by Odoo.
- from hashlib import sha256
- from odoo import api, fields, models
- from .const import SUPPORTED_CURRENCIES
- class PaymentProvider(models.Model):
- _inherit = 'payment.provider'
- code = fields.Selection(
- selection_add=[('sips', "Sips")], ondelete={'sips': 'set default'})
- sips_merchant_id = fields.Char(
- string="Merchant ID", help="The ID solely used to identify the merchant account with Sips",
- required_if_provider='sips')
- sips_secret = fields.Char(
- string="SIPS Secret Key", size=64, required_if_provider='sips', groups='base.group_system')
- sips_key_version = fields.Integer(
- string="Secret Key Version", required_if_provider='sips', default=2)
- sips_test_url = fields.Char(
- string="Test URL", required_if_provider='sips',
- default="https://payment-webinit.simu.sips-services.com/paymentInit")
- sips_prod_url = fields.Char(
- string="Production URL", required_if_provider='sips',
- default="https://payment-webinit.sips-services.com/paymentInit")
- sips_version = fields.Char(
- string="Interface Version", required_if_provider='sips', default="HP_2.31")
- @api.model
- def _get_compatible_providers(self, *args, currency_id=None, **kwargs):
- """ Override of payment to unlist Sips providers when the currency is not supported. """
- providers = super()._get_compatible_providers(*args, currency_id=currency_id, **kwargs)
- currency = self.env['res.currency'].browse(currency_id).exists()
- if currency and currency.name not in SUPPORTED_CURRENCIES:
- providers = providers.filtered(lambda p: p.code != 'sips')
- return providers
- def _sips_generate_shasign(self, data):
- """ Generate the shasign for incoming or outgoing communications.
- Note: self.ensure_one()
- :param str data: The data to use to generate the shasign
- :return: shasign
- :rtype: str
- """
- self.ensure_one()
- key = self.sips_secret
- shasign = sha256((data + key).encode('utf-8'))
- return shasign.hexdigest()
|