Is your feature request related to a problem? Please describe.
In paymentOptions.isml, there is a hardcoded hidden input field:
<input type="hidden" class="form-control" id="selectedPaymentOption"
name="${pdict.forms.billingForm.paymentMethod.htmlName}"
value="paymentMethod"/>
The static value "paymentMethod" does not correspond to any valid Business Manager payment method ID (the valid IDs are AdyenComponent, AdyenPOS, CREDIT_CARD). In older versions of the cartridge (≤ 25.x), this was acceptable because checkout.js immediately overwrote the value on page load and on tab change
$('#selectedPaymentOption').val($('.payment-options .nav-item .active').parent().attr('data-method-id'));
$('.payment-options .nav-link').click(function () {
$('#selectedPaymentOption').val($(this).parent().attr('data-method-id'));
});
This JS was removed in v26, but the stale input field was never cleaned up. The field now sits in the DOM with a hardcoded value that is never updated, causing integrators who use native FormData for the billingform submission (instead of jQuery's serializeArray().reduce()) in checkout/index.submitPayment() to always receive "paymentMethod" on the server — breaking payment method resolution.
Describe the solution you'd like
Remove the #selectedPaymentOption input from paymentOptions.isml entirely. The correct payment method value is already reliably provided by the hidden input in adyenComponentContent.isml (value="AdyenComponent") and its counterparts for other payment method tabs. The #selectedPaymentOption field serves no purpose in the current codebase since nothing reads or writes it.
Describe alternatives you've considered
- Restoring the JS lines that updated #selectedPaymentOption dynamically — functional, but adds code to maintain for a field that has no other purpose.
- Integrators can work around this by explicitly calling FormData.set('dwfrm_billing_paymentMethod', activeTabMethodId) before submission; but this should not be required.
Is your feature request related to a problem? Please describe.
In paymentOptions.isml, there is a hardcoded hidden input field:
The static value "paymentMethod" does not correspond to any valid Business Manager payment method ID (the valid IDs are AdyenComponent, AdyenPOS, CREDIT_CARD). In older versions of the cartridge (≤ 25.x), this was acceptable because checkout.js immediately overwrote the value on page load and on tab change
This JS was removed in v26, but the stale input field was never cleaned up. The field now sits in the DOM with a hardcoded value that is never updated, causing integrators who use native FormData for the billingform submission (instead of jQuery's serializeArray().reduce()) in checkout/index.submitPayment() to always receive "paymentMethod" on the server — breaking payment method resolution.
Describe the solution you'd like
Remove the #selectedPaymentOption input from paymentOptions.isml entirely. The correct payment method value is already reliably provided by the hidden input in adyenComponentContent.isml (value="AdyenComponent") and its counterparts for other payment method tabs. The #selectedPaymentOption field serves no purpose in the current codebase since nothing reads or writes it.
Describe alternatives you've considered