kessai now records the account a payment was taken against rather than the provider, so a site holding two contracts at one provider holds two accounts and the gateway plugin id names neither. The argument kept its name and position, so nothing fails to compile and the break is silent. See kessai issue 3621924.

What breaks

PaymentGatewayResolver validates a resolved id with the gateway plugin manager hasDefinition(). A real account fails that check, so the tenant override and the site default are both discarded and every booking falls through to the manual fallback: a payment that should have been taken by card is created against the offline gateway, nothing raises, and an operator is left expected to collect by hand.

The site-wide default select has the matching half of the problem. Built from the gateway plugin list, it offers ids kessai refuses, it cannot name any account whose machine name is not its plugin name, and its default value falls back to empty when the stored id is absent, so an account that is configured reads as None (manual).

The step override help text tells an operator to name a plugin id.

The change

The resolver asks kessai isGatewayAvailable(), which is the same question the creation door asks, so a check here and a refusal there cannot disagree. The default select lists getAvailableGateways(). Both live on PaymentClientInterface, which BookingPaymentHooks already held, so it drops the gateway plugin manager rather than swapping it. The help text names an account and links to the accounts list, and the resolver interface says account id rather than plugin id.

Tests

Two kernel tests pin the defect: an account named for itself resolves where it used to fall back to manual, and a retired account is skipped. The existing resolution chain test also needed the kessai and kessai_simulator config installed, because the accounts arrive with it.

Depends on

The kessai change above, which adds getAvailableGateways() and isGatewayAvailable(). Until it lands this cannot go green, because kessai 1.x has neither.

AI-Generated: Yes (Claude Code was used to help draft this issue summary and to write the code and tests on the merge request. I reviewed and ran the work myself before posting it.)

Issue fork yoyaku-3622781

Command icon Show commands

Start within a Git clone of the project using the version control instructions.

Or, if you do not have SSH keys set up on git.drupalcode.org:

Comments

mably created an issue. See original summary.

mably’s picture

Status: Active » Needs review

  • mably committed 3d4bb517 on 1.x
    fix: #3622781 Resolve a payment account, not a gateway plugin
    
    By: mably
    
mably’s picture

Status: Needs review » Fixed

Now that this issue is closed, review the contribution record.

As a contributor, attribute any organization that helped you, or if you volunteered your own time.

Maintainers, credit people who helped resolve this issue.

Status: Fixed » Closed (fixed)

Automatically closed - issue fixed for 2 weeks with no activity.