Fix PayDunya redirect flow rendering in Odoo 18 #1

Merged
Mamadou merged 2 commits from fix/payment-paydunya into main 2026-02-09 14:11:00 +00:00
3 changed files with 11 additions and 35 deletions
Showing only changes of commit 5e7d107481 - Show all commits

View File

@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<odoo> <odoo noupdate="1">
<record id="payment_provider_paydunya" model="payment.provider"> <record id="payment_provider_paydunya" model="payment.provider">
<field name="name">PayDunya</field> <field name="name">PayDunya</field>
<field name="code">paydunya</field> <field name="code">paydunya</field>
<field name="sequence">10</field> <field name="sequence">10</field>
<field name="redirect_form_view_id" ref="payment_paydunya.paydunya_redirect_form"/>
</record> </record>
</odoo> </odoo>

View File

@@ -9,7 +9,7 @@ _logger = logging.getLogger(__name__)
class PaymentTransaction(models.Model): class PaymentTransaction(models.Model):
_inherit = 'payment.transaction' _inherit = 'payment.transaction'
def _get_specific_rendering_values(self, **kwargs): def _get_specific_rendering_values(self, processing_values):
"""Create invoice on PayDunya and return rendering values for redirection.""" """Create invoice on PayDunya and return rendering values for redirection."""
self.ensure_one() self.ensure_one()
provider = False provider = False
@@ -78,16 +78,12 @@ class PaymentTransaction(models.Model):
if token: if token:
# store reference to match notifications # store reference to match notifications
self.acquirer_reference = token self.provider_reference = token
self._cr.commit()
_logger.info('PayDunya invoice created: token=%s, url=%s', token, redirect_url) _logger.info('PayDunya invoice created: token=%s, url=%s', token, redirect_url)
# Return the template name and rendering values expected by Odoo # Return the rendering values expected by the redirect form template.
return { return {
'rendering_template': 'payment_paydunya.paydunya_redirect_form', 'api_url': redirect_url,
'rendering_values': { 'token': token,
'paydunya_token': token,
'redirect_url': redirect_url,
}
} }
else: else:
_logger.warning('PayDunya: no token in response: %s', data) _logger.warning('PayDunya: no token in response: %s', data)
@@ -107,7 +103,7 @@ class PaymentTransaction(models.Model):
token = invoice_data.get('invoice', {}).get('token') or invoice_data.get('token') token = invoice_data.get('invoice', {}).get('token') or invoice_data.get('token')
if not token: if not token:
return None return None
tx = self.search([('acquirer_reference', '=', token)], limit=1) tx = self.search([('provider_reference', '=', token)], limit=1)
return tx or None return tx or None
def _handle_notification_data(self, data): def _handle_notification_data(self, data):

View File

@@ -1,29 +1,8 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<odoo> <odoo>
<template id="paydunya_redirect_form"> <template id="paydunya_redirect_form">
<t t-call="website.layout"> <form t-att-action="api_url" method="post">
<div class="container my-5"> <input type="hidden" name="token" t-att-value="token"/>
<div class="oe_paydunya_redirect">
<h3>Redirection vers PayDunya...</h3>
<form id="paydunya_redirect_form" t-att-action="redirect_url" method="post">
<input type="hidden" name="token" t-att-value="paydunya_token"/>
<noscript>
<button type="submit" class="btn btn-primary">Payer</button>
</noscript>
</form> </form>
<t t-if="redirect_url">
<script type="text/javascript">
(function () {
const f = document.getElementById('paydunya_redirect_form');
if (f) { f.submit(); }
})();
</script>
</t>
</div>
</div>
</t>
</template> </template>
</odoo> </odoo>