I want many payments to be pull-based (at least I'd go crazy having to positively sign off every utility bill and subscription), but the ideal user interface for pull payments shows who exactly is pulling what, with a few days notice, and a one-click way to cancel any standing authorization.
Something something capability-based finance something something
That still works. There are three entities: customer, bank and merchant.
The merchant should never be able to pull from your bank account. However, the merchant can send an invoice for a payment. Either the customer manually pushes the payment, or delegates to the bank that each invoice from merchant X should immediately result in a payment push [1].
The difference from the pull system is that the customer can at any point end this automatic push payment, but in the pull system the customer can only beg the merchant (eg. the gym) to stop charging their account.
[1] Or even better in an ideal world, delegate this pushing to their local finance app. So the bank can't put roadblocks for a customer cancelling a subscription.