Jump to content

Stripe "Uncaptured" Payments


hkhost

Recommended Posts

I thought that whatever is the issue related to this behaviour, a solution could be a hook that creates a txt file containing client and order details each time the "complete order" button is pressed: it would then be easy to recreate the client account and order whenever we find an "uncaptured" payment in stripe for a new order. 

Anyone would like to try? 

Link to comment
Share on other sites

On 2/19/2025 at 10:46 PM, wsa said:

Hi,

Yes is a whmcs issue I talked to Stripe they told me something to do with the whmcs module I got 2 last night.

Try placing an order without a state specified, as I discovered this. They auth a payment before any validation takes place (totally brain-dead that they don't validate the form itself). In typical WHMCS tone deaf fashion, they're ignoring the issue.

 

Link to comment
Share on other sites

Another day another ignored WHMCS bug as this thread surpasses 60k views.

Today I had a client create an order, pay via PayPal. No client account created, no order created in WHMCS. No payment received to PayPal.

Client sees the transaction in PayPal which disappears within a couple of hours.

Very bad look as a user of WHMCS who has seen constant price rises for software that supposedly is all about automation and ease of use. This is 100% a WHMCS bug as I've seen the exact same with Stripe.

Other times the client account is created, the order created but the payment is "uncaptured"

No point submitting a ticket as WHMCS refuse to accept this is an issue with their software.

I now use almost stock WHMCS. Just Fraud Record in terms of modules and I have a very simple child theme of twenty one.

Edited by zomex
Link to comment
Share on other sites

I insist with my idea: track any "attempted" submission with a hook, for mainly 2 reasons:

1. The misbehaviour could be caused by other hooks or plugins, and in that case whmcs team should check every single case (not convenient) 

2. The misbehaviour might depend on customers who close the page too soon or stripe being unable to immediately capture the payment. 

In any case, all the data is available once "submit order" is clicked and, while I wouldn't like to find a new order for each attempted and failed order payment, I would find useful to have it in a txt file or a db table under, for example "missed orders".

It might populate quite quickly with a lot of useless orders, but at least we would, somewhere, find the details we need to recreate client account and order unintentially missed. 

Edited by MikePitta
Link to comment
Share on other sites

16 hours ago, zomex said:

Another day another ignored WHMCS bug as this thread surpasses 60k views.

Today I had a client create an order, pay via PayPal. No client account created, no order created in WHMCS. No payment received to PayPal.

Client sees the transaction in PayPal which disappears within a couple of hours.

Very bad look as a user of WHMCS who has seen constant price rises for software that supposedly is all about automation and ease of use. This is 100% a WHMCS bug as I've seen the exact same with Stripe.

Other times the client account is created, the order created but the payment is "uncaptured"

No point submitting a ticket as WHMCS refuse to accept this is an issue with their software.

I now use almost stock WHMCS. Just Fraud Record in terms of modules and I have a very simple child theme of twenty one.

That is true. I talked to both vendors, and they told me to contact WHMCS.com

Link to comment
Share on other sites

8 hours ago, MikePitta said:

I've added my idea in the "ideas" section. 

Vote it please: if accepted it would add a way to keep record of lost orders

https://requests.whmcs.com/idea/keep-record-of-unpaid-new-orders-from-new-clients-after-complete-order-is-clicked

Don't want to be a glass half empty kind of guy but WHMCS do not care. This has been a issue since 2019, 54k views on this thread. The only thing they want to do is bless us with more Marketconnect junk that no one wants.

Link to comment
Share on other sites

  • 3 weeks later...

Does anybody get this same error?

One of my staff members chatted with Stripe today, and this is what I got

Chat started: 2025-04-08 15:26:09 UTC
(03:35:29 PM) Ashley: Hi WHMCSServices, this is Ashley from Stripe support. Hope you're doing great today.
(03:35:32 PM) WHMCSServices: I see that you charged me extra money and then refunded it to the client.
(03:35:35 PM) Ashley: I'm sorry you've had to deal with this.
(03:36:03 PM) WHMCSServices: np
(03:36:25 PM) Ashley: I completely understand how important to determine what happened on the refund, and I’m here to make sure we find the right solution.
(03:37:14 PM) WHMCSServices: I see it do this to all clients
(03:37:31 PM) WHMCSServices: u charge me extra for each client
(03:37:40 PM) WHMCSServices: $19.99 was captured, and the remaining $0.91 was released to the customer
(03:37:44 PM) Ashley: I can definitely understand the confusion here! This charge wasn't actually refunded, rather it was an authorization that was never captured.
(03:38:09 PM) Ashley: Only $19.99 USD was collected from your customer.
(03:38:21 PM) WHMCSServices: no
(03:38:23 PM) Ashley: Instead of the supposed $20.90 USD.
(03:38:29 PM) WHMCSServices: I see 20.99
(03:38:52 PM) WHMCSServices: https://dashboard.stripe.com/payments/pi893RBMSNBCFj2pk6Yn1y7kJJAS
(03:39:29 PM) Ashley: The payment requested was initially $20.90 USD. However, the payment collected and captured is only $19.99 USD.
(03:41:04 PM) Ashley: The amount_to_capture was set to $19.99 USD, as you can see on the logs here: https://dashboard.stripe.com/logs/req_jh8EarvGO4YQbVDpC
(03:41:52 PM) Ashley: The value for the amount_to_capture came from your end. It would be great if you can reach out to your developers on why they sent a request to capture only $19.99 USD instead of $20.90 USD.
(03:42:39 PM) WHMCSServices: It is supposed to be 19.99
(03:42:46 PM) WHMCSServices: That's how much I charge
(03:43:33 PM) WHMCSServices: https://dashboard.stripe.com/payments/pi893RBKuXBCFj2pk6Yn01iKyUi5
(03:43:46 PM) WHMCSServices: I charged the client 19.99
(03:44:36 PM) Ashley: I really do apologise for the confusion this has caused. However, this is something that you'll need to sort out with your developers.
(03:44:49 PM) Ashley: They were the ones who specified the amount to be collected.
(03:46:14 PM) WHMCSServices: Can you email me this chat
(03:46:20 PM) Ashley: Absolutely.
(03:46:30 PM) WHMCSServices: I can forward to whmcs.com
(03:46:30 PM) Ashley: I understand this may not be the response you may have hoped for, but please let me know if you have any more questions.
(03:46:51 PM) WHMCSServices: That means you tell that whmcs module is doing this?
(03:47:04 PM) Ashley: That's correct.
(03:47:08 PM) WHMCSServices: I am using the WHMCS Stripe module
(03:47:29 PM) WHMCSServices: I see this happened to all clients
(03:47:34 PM) WHMCSServices: It charges extra
(03:47:44 PM) Ashley: Please contact whmcs.com
(03:48:07 PM) Ashley: You can also show them this log on their request post to capture only $19.99 USD: https://dashboard.stripe.com/logs/reqjhK63CFERGxr46gc
(03:50:15 PM) Ashley: In the meantime, is there anything else that I may help you with today?
(03:53:34 PM) Ashley: Alright.
(03:53:39 PM) Ashley: It was great chatting with you! I will be sending you an email after we end this chat. If any other questions and concerns arise, simply reply to my email, and I will be more than happy to assist you.
(03:53:42 PM) Ashley: Once again, my name is Ashley, and thanks for contacting Stripe Support. Have an excellent day ahead!

Link to comment
Share on other sites

  • 2 months later...

Hi. Same problem here.

Last one was a few days ago:

- a client entered an order
- clicked to pay via stripe
- failed to use its first card and re-attempted the payment
- the second payment was confirmed on his side, but uncaptured in Stripe
- whmcs just cleared all the data and did not register anything.

We had to contact the customer, confirm his payment manually and re-create both client account and order in whmcs.

This is just a bug!

Why WHMCS does not register the order when the payment is confirmed on the client side and pending in our side??

Consider that NONE of us in this case (client and us) receive any communication via email: if the client does not contact us and we do not check stripe for uncaptured payments, we can't know that there was a new order. 
One of the first doubts a client can have after seeing a "paid" message from our website and his money blocked, and does not receive any confirmation whatsoever, is that we are a fraud.

This is a very important thing to fix

Edited by Easy Green Hosting
Link to comment
Share on other sites

  • 4 months later...

It's been 2025 since this error happened from 2019 now even though we use the latest update from whmcs the error still happens randomly my clients have people spamming the card i mean they retry continuously and after 1 night i see a bunch of invoices in uncapture status we refunded immediately but that can't restore our reputation

What whmcs need to do is just change their module from "manual" capute to "automatic" this is what stripe mentioned last time i asked stripe support they told us there are few cases like that they are handling related to stripe whmcs module

Link to comment
Share on other sites

  • 2 weeks later...
  • Administrators

@wsa

This is intentional behaviour and unrelated to the uncaptured payments discussed in this thread. For your information, the system sets up a PaymentIntent at Stripe when the checkout page is loaded. This must specify the maximum possible amount the card could be charged for the cart contents (before credits and taxes are applied). So the SetupIntent request could be greater than the final amount actually captured in the end.

After the client selects their country + state and decides whether to use credit towards the payment, the system knows the final total and this then gives the final amount the client pays and what is captured.

On 4/18/2025 at 11:09 PM, wsa said:

(03:37:40 PM) WHMCSServices: $19.99 was captured, and the remaining $0.91 was released to the customer
(03:37:44 PM) Ashley: I can definitely understand the confusion here! This charge wasn't actually refunded, rather it was an authorization that was never captured.
(03:38:09 PM) Ashley: Only $19.99 USD was collected from your customer.

In this case the client might have briefly seen a pre-auth for $20.90 on their online banking, but the actual amount charged matches exactly with the records in the system.

 

Hi @Son123231,

Possible causes for this behaviour could be:

- The client abandoning checkout before submitting the order successfully (ie. At the 3D Secure stage).

- A customisation affecting the in-browser processing of Stripe.js, such as a theme or javascript modification.

If you are still encountering the issue with after-market modules and hooks removed on the stock Theme (Twenty-One) and Order Form Template (Standard Cart), please open a support ticket so we can investigate the specific issue on your instance. 

 

On 10/24/2025 at 4:14 PM, Son123231 said:

What whmcs need to do is just change their module from "manual" capute to "automatic" this is what stripe mentioned last time i asked stripe support they told us there are few cases like that they are handling related to stripe whmcs module

This is inappropriate and unhelpful advice on their part. Stripe provides this API functionality for the precise purpose of inserting bespoke business logic before charging a client's card. In this case WHMCS uses the manual capture_method option to perform fraud checks and custom code at corresponding hook points; important functionality I'm sure we all agree. 

Link to comment
Share on other sites

8 hours ago, WHMCS John said:

@wsa

This is intentional behaviour and unrelated to the uncaptured payments discussed in this thread. For your information, the system sets up a PaymentIntent at Stripe when the checkout page is loaded. This must specify the maximum possible amount the card could be charged for the cart contents (before credits and taxes are applied). So the SetupIntent request could be greater than the final amount actually captured in the end.

After the client selects their country + state and decides whether to use credit towards the payment, the system knows the final total and this then gives the final amount the client pays and what is captured.

In this case the client might have briefly seen a pre-auth for $20.90 on their online banking, but the actual amount charged matches exactly with the records in the system.

 

Hi @Son123231,

Possible causes for this behaviour could be:

- The client abandoning checkout before submitting the order successfully (ie. At the 3D Secure stage).

- A customisation affecting the in-browser processing of Stripe.js, such as a theme or javascript modification.

If you are still encountering the issue with after-market modules and hooks removed on the stock Theme (Twenty-One) and Order Form Template (Standard Cart), please open a support ticket so we can investigate the specific issue on your instance. 

 

This is inappropriate and unhelpful advice on their part. Stripe provides this API functionality for the precise purpose of inserting bespoke business logic before charging a client's card. In this case WHMCS uses the manual capture_method option to perform fraud checks and custom code at corresponding hook points; important functionality I'm sure we all agree. 

What's mental here is you have the solution, and that is to validate the checkout fields before processing any kind of request to the payment provider, but you ignore it and continue to let it be an issue.

Link to comment
Share on other sites

  • Administrators
On 11/3/2025 at 8:52 AM, mikeos said:

validate the checkout fields before processing any kind of request to the payment provider

Our UI research shows that users unequivocally want the payment fields on the checkout page, as opposed to a separate step after validating the checkout or completing fraud checks. As a result we must load the Stripe payment fields on checkout page load. 

 

19 hours ago, wsa said:

All I can tell you that Stripe.com kept telling me to contact your people, the issues with the module. 

Can you hep me understand the issue here for you? The client's card was pre-authorised for an extra dollar, but the final amount they are charged is exactly $19.99 as expected.

Link to comment
Share on other sites

Hi. Thank WHMCS John for your explanations.

Wouldn't a log of all the attempted orders be a solution?

The issue here happens when the payment button is triggered and the website interrogates stripe: when the transaction doesn't work under certain circumstances the whole order process is lost in whmcs, is that correct?

What I am suggesting is to add a way to record anything (client and order details) that happens during the process order, even as only a text log file, also when there is no payment attempt at all.

This way we would at least have something to look up.

What do you think?

thanks again

Link to comment
Share on other sites

On 11/4/2025 at 4:22 PM, WHMCS John said:

Our UI research shows that users unequivocally want the payment fields on the checkout page, as opposed to a separate step after validating the checkout or completing fraud checks. As a result we must load the Stripe payment fields on checkout page load. 

I'm sorry, but what are you talking about? What I'm saying is you can check if the fields are even filled out prior to initiating any payment pre-auth. It has nothing to do with stripe being on the same page of not. This is a code issue, as it's not just stripe that is affected here.

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