Skip to main content

support Stripe Bank Transfers (customer_balance) in FluentCart checkout

Hi FluentCart team,
I run a subscription-based online academy in Italy and a meaningful share of my customers prefer to pay by bank transfer rather than card. Today FluentCart offers bank transfer only as a separate offline method, which means I have to check my bank account every day, match incoming transfers to orders manually and often re-check one or two days later. It's a real time sink and error-prone.
Stripe already solves this with its Bank Transfers payment method (customer balance / EUR bank transfers): Stripe issues a virtual IBAN per customer, reconciles the incoming transfer automatically and marks the payment as succeeded. I have enabled it in my Stripe dashboard, but it never shows up at FluentCart checkout.
From Stripe's docs, I believe two things are needed on FluentCart's side:

  1. Pass the Stripe Customer to the Checkout Session / PaymentIntent and allow customer_balance in the accepted payment method types (or use automatic payment methods), otherwise Stripe hides bank transfers.
  2. Handle the delayed-notification flow: keep the order in a pending state after checkout.session.completed with payment_status=unpaid, and complete it on checkout.session.async_payment_succeeded (or payment_intent.succeeded), with async_payment_failed marking it failed. These events are not in your recommended webhook list, so I assume they are not handled today.
    Could you confirm whether Stripe Bank Transfers are on the roadmap, and if there is any workaround in the meantime (for example a hook to alter payment_method_types)? For EU merchants selling to EU customers this would be a big quality-of-life improvement, and it would also make Stripe Invoices with bank transfer instructions usable through FluentCart.
    Thanks a lot for the great work on the plugin.
    Best regards,
    Giorgio

Could you please check whether you are using Stripe Hosted Checkout in FluentCart? Stripe Bank Transfers/customer balance should be able to appear through Stripe Hosted Checkout when it is enabled in your Stripe Dashboard and the checkout context is eligible, such as supported currency, country, customer, and Stripe account settings.

Please switch to or test with Stripe Hosted Checkout, then try again with an eligible EUR customer/payment context.

Giorgio Luciani

Amimul Ihsan MahdiΒ thank you Amimul, I am on embedded checkout and would like to keep it that way, due to higher conversion rates. Any chance to have it working there?

Giorgio LucianiΒ Can you check if it appears on hosted checkout by switching temporarily and let us know the update so that we can pass it to our team?

Giorgio Luciani

Amimul Ihsan MahdiΒ hello, thank you and sorry for the late reply. It appears on the hosted checkout, but not on the embedded, could you please add it? thank you

Giorgio LucianiΒ Can you please check on the bank transfer method enable option on stripe and check whether it has a specific requirement? For example, ideal payment requires the currrency as euro or other supported currencies.

Giorgio Luciani

Amimul Ihsan MahdiΒ Hi Amimul, thanks! I checked:

  • Bank transfers are enabled in my Stripe Dashboard (Settings > Payment methods) and the account is eligible: Italian Stripe account, store currency EUR, which is a supported presentment currency for EU bank transfers. That's also why it shows up on hosted checkout.
  • From Stripe's docs, the requirements for it to appear in the Payment Element (embedded) are on the PaymentIntent side:
    1. the PaymentIntent must have a customer attached ("Bank transfers aren't available on PaymentIntents that don't have an associated customer");
    2. customer_balance must be allowed, via automatic_payment_methods or payment_method_types=customer_balance with payment_method_options[customer_balance][funding_type]=bank_transfer and bank_transfer[type]=eu_bank_transfer;
    3. it is not supported with setup_future_usage or SetupIntents, and for subscriptions Stripe only supports it with collection_method=send_invoice.

So my guess is that the embedded flow either creates the intent without a customer or with setup_future_usage (or a SetupIntent for subscriptions), and Stripe hides the method. Docs: https://docs.stripe.com/payments/bank-transfers/accept-a-payment?payment-ui=elements&api-integration=paymentintents

Could you pass this to the team? Thanks a lot!

Giorgio LucianiΒ Thank you so much for the details. I have discussed this with the team, and they said this will be added in a future update. We appreciate you bringing this to our attention.

Giorgio Luciani

Amimul Ihsan MahdiΒ Super, thank you!!

Giorgio LucianiΒ I have an update from the team. For Stripe Bank Transfers/customer balance, our team recommends using Stripe Hosted Checkout. This payment method has stricter Stripe-side requirements in embedded checkout, including customer-related conditions, and before the order is actually placed it becomes difficult to reliably debug whether the required customer context is already available for that embedded Payment Element flow.

Since it is working for you in Hosted Checkout, that is the supported path we suggest using for Bank Transfers. The team reviewed the embedded checkout request as well, but we are not planning to implement embedded Bank Transfer support at this time.