fix: redirection

This commit is contained in:
mthiam
2026-02-10 15:53:19 +01:00
parent 85282bc757
commit fb090d363a
2 changed files with 50 additions and 21 deletions

View File

@@ -1,5 +1,6 @@
import logging
import requests
import json
from odoo import http
_logger = logging.getLogger(__name__)
@@ -43,7 +44,7 @@ class PaydunyaController(http.Controller):
tx_model = http.request.env['payment.transaction'].sudo()
handled = tx_model._handle_notification_data(data)
if handled:
return http.request.redirect('/payment/process')
return http.request.redirect('/shop/confirmation')
except Exception:
_logger.exception('Error handling PayDunya notification data')
@@ -56,25 +57,32 @@ class PaydunyaController(http.Controller):
_logger.info('PayDunya payment cancelled: token=%s', token)
return http.request.redirect('/shop/cart')
@http.route('/payment/paydunya/callback', type='http', auth='public', methods=['POST'], csrf=False)
@http.route('/payment/paydunya/callback', type='http', auth='public', methods=['GET', 'POST'], csrf=False)
def paydunya_callback(self, **kwargs):
"""Handle IPN callback from PayDunya.
PayDunya sends data as application/x-www-form-urlencoded with 'data' key containing JSON.
"""
try:
# The 'data' parameter contains the JSON-encoded transaction info
import json
payload = {}
data_str = http.request.params.get('data')
if data_str:
data = json.loads(data_str)
_logger.info('PayDunya IPN callback received: %s', data)
tx_model = http.request.env['payment.transaction'].sudo()
tx_model._handle_notification_data(data)
payload = {'data': data_str}
elif http.request.params:
payload = dict(http.request.params)
else:
raw_body = http.request.httprequest.get_data(as_text=True)
if raw_body:
try:
payload = json.loads(raw_body)
except Exception:
payload = {'data': raw_body}
_logger.info('PayDunya IPN callback received: %s', payload)
tx_model = http.request.env['payment.transaction'].sudo()
tx_model._handle_notification_data(payload)
except Exception:
_logger.exception('Error handling PayDunya callback')
# Always return 200 OK to PayDunya
return 'OK'