60 lines
2.7 KiB
Python
60 lines
2.7 KiB
Python
# 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})
|