# Part of Odoo. See LICENSE file for full copyright and licensing details. import logging import pprint from odoo import _, http from odoo.exceptions import ValidationError from odoo.http import request from odoo.addons.payment import utils as payment_utils _logger = logging.getLogger(__name__) class AuthorizeController(http.Controller): @http.route('/payment/authorize/get_provider_info', type='json', auth='public') def authorize_get_provider_info(self, provider_id): """ Return public information on the provider. :param int provider_id: The provider handling the transaction, as a `payment.provider` id :return: Information on the provider, namely: the state, payment method type, login ID, and public client key :rtype: dict """ provider_sudo = request.env['payment.provider'].sudo().browse(provider_id).exists() return { 'state': provider_sudo.state, 'payment_method_type': provider_sudo.authorize_payment_method_type, # The public API key solely used to identify the seller account with Authorize.Net 'login_id': provider_sudo.authorize_login, # The public client key solely used to identify requests from the Accept.js suite 'client_key': provider_sudo.authorize_client_key, } @http.route('/payment/authorize/payment', type='json', auth='public') def authorize_payment(self, reference, partner_id, access_token, opaque_data): """ Make a payment request and handle the response. :param str reference: The reference of the transaction :param int partner_id: The partner making the transaction, as a `res.partner` id :param str access_token: The access token used to verify the provided values :param dict opaque_data: The payment details obfuscated by Authorize.Net :return: None """ # Check that the transaction details have not been altered if not payment_utils.check_access_token(access_token, reference, partner_id): raise ValidationError("Authorize.Net: " + _("Received tampered payment request data.")) # Make the payment request to Authorize.Net tx_sudo = request.env['payment.transaction'].sudo().search([('reference', '=', reference)]) response_content = tx_sudo._authorize_create_transaction_request(opaque_data) # Handle the payment request response _logger.info( "payment request response for transaction with reference %s:\n%s", reference, pprint.pformat(response_content) ) tx_sudo._handle_notification_data('authorize', {'response': response_content})