Jump to content

Stripe Dynamic Payments: invoices left Unpaid with 0.01 balance when invoice currency ≠ Stripe settlement currency


Recommended Posts

Hi all,

Since moving from the legacy Stripe module to Stripe Dynamic Payments (WHMCS 9.1.x), we see payments recorded 0.01 short (or over) when the invoice currency differs from the Stripe account’s settlement currency. Short payments leave the invoice Unpaid with a 0.01 balance, even though Stripe charged the customer the full amount.

Setup

  • WHMCS default/client currency: USD
  • Stripe account settlement currency: EUR
  • Convert To For Processing: None, so Stripe charges the customer in USD

What happens
Stripe charges the exact invoice amount in USD and converts it to EUR for the balance. Stripe Dynamic Payments then seems to take the EUR balance amount and convert it back with Stripe’s exchange rate, instead of recording the amount that was actually charged.

Illustrative example:

  • Invoice: USD 19.99, and Stripe charges USD 19.99 ✔
  • Balance transaction: EUR 18.26 (rate 0.9137)
  • WHMCS records 18.26 / 0.9137 = 19.9847 → USD 19.98
  • Invoice stays Unpaid, balance 0.01

The fee is converted back the same way, which is fine. The payment amount should not be.

How often
The EUR amount is rounded to cents and then converted back, so roughly 1 in 10 payments is off by a cent whenever the exchange rate is below 1 (e.g. USD → EUR). About half of those underpay, leaving the invoice Unpaid. The other half overpay, adding 0.01 credit to the client. When the rate is above 1 (e.g. GBP → EUR), the error can’t reach a full cent.

Legacy module did not do this
With the same Stripe account and the same setup, the legacy Stripe module recorded hundreds of USD/GBP payments to the exact cent. With Stripe Dynamic Payments, our very first USD payment was already off, so this looks like a regression in the new module.

Workarounds considered

  • Manually adding a 0.01 payment: works, but it’s manual and easy to miss. Unpaid invoices also trigger reminders and overdue processing.
  • Convert To For Processing = settlement currency: not a real option for us. It charges USD customers in EUR, so their bank converts the amount and often adds fees. The amount on their statement then no longer matches the invoice. WHMCS would also still have to convert the EUR payment back to the invoice currency, so the rounding issue might simply move.
  • Adding a USD settlement account in Stripe would avoid the conversion entirely, but not everyone can or wants to do that.

I’ve opened a support ticket with WHMCS but don't expect a fix anytime soon.

Has anyone else run into this with Stripe Dynamic Payments? Does anyone have a better workaround, or know whether a fix is planned?

Thanks!

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use & Guidelines and understand your posts will initially be pre-moderated