This commits also switches the Adyen implementation from the Hosted Payment Pages API to the new Checkout API, hence replacing the payment with redirection flow by a direct payment flow. See the merge commit for more details. task-2479832
55 lines
1.7 KiB
Python
55 lines
1.7 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import _, fields, models
|
|
from odoo.exceptions import UserError, ValidationError
|
|
|
|
|
|
class PaymentToken(models.Model):
|
|
_inherit = 'payment.token'
|
|
|
|
adyen_shopper_reference = fields.Char(
|
|
string="Shopper Reference", help="The unique reference of the partner owning this token",
|
|
readonly=True)
|
|
|
|
#=== BUSINESS METHODS ===#
|
|
|
|
def _handle_deactivation_request(self):
|
|
""" Override of payment to request request Adyen to delete the token.
|
|
|
|
Note: self.ensure_one()
|
|
|
|
:return: None
|
|
"""
|
|
super()._handle_deactivation_request()
|
|
if self.provider != 'adyen':
|
|
return
|
|
|
|
data = {
|
|
'merchantAccount': self.acquirer_id.adyen_merchant_account,
|
|
'shopperReference': self.adyen_shopper_reference,
|
|
'recurringDetailReference': self.acquirer_ref,
|
|
}
|
|
try:
|
|
self.acquirer_id._adyen_make_request(
|
|
url_field_name='adyen_recurring_api_url',
|
|
endpoint='/disable',
|
|
payload=data,
|
|
method='POST'
|
|
)
|
|
except ValidationError:
|
|
pass # Deactivating the token in Odoo is more important than in Adyen
|
|
|
|
def _handle_reactivation_request(self):
|
|
""" Override of payment to raise an error informing that Adyen tokens cannot be restored.
|
|
|
|
Note: self.ensure_one()
|
|
|
|
:return: None
|
|
:raise: UserError if the token is managed by Adyen
|
|
"""
|
|
super()._handle_reactivation_request()
|
|
if self.provider != 'adyen':
|
|
return
|
|
|
|
raise UserError(_("Saved payment methods cannot be restored once they have been deleted."))
|