Skip to content

Dangerous new Order Status "On hold" #18

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
andreDane opened this issue Mar 5, 2024 · 8 comments
Open

Dangerous new Order Status "On hold" #18

andreDane opened this issue Mar 5, 2024 · 8 comments

Comments

@andreDane
Copy link

Hi,
I’m writing to report an issue with the new Order management behaviour with the last update to v2.2.1.

For context, before this update this is what happened to new orders:

  1. Users on checkout click to submit order and they are redirected to Satispay pay page -> order is created with “Pending payment” status;
  2. Users complete payment -> order goes to “Processing” status.

After last release, step 1 changed:

  1. Users on checkout click to submit order and they are redirected to Satispay pay page -> order is created with “Pending payment” status but it immediately goes to “On hold” status;

Well, I think this new behaviour is very dangerous, because the “On hold” status is used in a improper way: this status should be used for deferred payment methods.
For example, BACS is a payment method where users make payment, but it needs 1-2 days for the Shop Manager to receive the funds: in this case it is right to confirm the order and therefore to reserve the products reducing the stock, because the payment has been done. When funds will be received, the order will go to “Processing” status and so the shop manager will then prepare the order for the shipment.

But as you know, this is not the way Satispay works: Satispay payments are instantaneous, so there is no need to reserve stock (indeed, to do so would be dangerous, see next paragraph) or confirm order because funds are immediately received from Shop Manager that will prepare the order right after the user creates it.

Adding the “On hold” status will generate the following bug:

  1. User creates order and tries to pay with Satispay;
  2. For any reason, user doesn’t complete payment;
  3. User comes back to checkout but sees only a notice saying the order couldn’t be canceled;
  4. User goes to their Profile page -> Orders and sees the order, but cannot do anything with it (he can’t cancel it or pay for it);
    Shop Manager has an “On hold” order, without a real reason because there is no payment to await for, and has products stock reserved for no reason (what if they were the last in stock… other users nor the same user himself wouldn’t be able to buy those… very bad).

As you can see from the last point, this update could generate also an important economic damage to the store.

Please, give a look at the definitions WooCommerce itself give for all the Order statuses:

  • Pending payment — Order received, no payment initiated. Awaiting payment (unpaid).
  • On hold — Awaiting payment – stock is reduced, but you need to confirm payment.
@EmanueleCoppola
Copy link
Contributor

Hi @andreDane,
thank you for reporting the issue.

We are looking into it and we are working towards a resolution.

@keeara
Copy link
Contributor

keeara commented Mar 14, 2024

Hi @andreDane

We have now improved the flow with this logic:

  • If payment returns "CANCELLED" then move the order status to 'Cancelled'
  • If payment returns "PENDING" then move the order status to 'Cancelled'
  • If payment returns "ACCEPTED" then move the order status to 'Processing'

Please let us know if you want to share any other feedbacks regarding our Plugin

@andreDane
Copy link
Author

Hi @keeara ,
I'm sorry but I think this implementation is partially wrong.

  1. The On-hold status does not make sense for an instant payment method like Satispay.
    From your reply, I don't understand if you decided to keep the On hold status, so I will repeat and reinforce my point of view on this.
    In addition to what has already been expressed in the issue, moving Order to On hold status triggers an email from WooCommerce, which then distracts the user at the most critical moment of the flow, i.e. the moment of payment.
    The email simply informs the user that the Order will not be processed until the store receives payment but, considering that it takes 30 seconds (approximately) to complete the payment via Satispay, does it really make sense to send this email? I don't think so.
    Also, in case there is a slight delay in sending the email, it might happen that the user finalizes the payment and then gets 2 emails at the same time, one of On hold order and one of Processing order, very confusing.
    So, the right status for this payment method is definitely Pending payment, for which there is also a setting in WooCommerce ( woocommerce_hold_stock_minutes ), which automatically handles the unfulfilled payment.
image

"Mantenere scorte (minuti)"

  1. "If payment returns "CANCELLED" then move the order status to 'Cancelled'" is wrong
    There is no reason to cancel the Order just because the user cancels the payment via a specific payment method: the Cancelled status should be used when the user or shop manager intentionally do intend to cancel the order or when the user permanently abandons the payment.
    There is an ad-hoc status for what you want: Failed, as this status has the advantage of allowing the user to complete the order equally by retrying the payment with the same method or with another payment method; vice versa, the Cancelled status cancels the order and therefore if the user wanted to retry the payment or use another payment method they would have to recreate the order in full, which is very frustrating to the user.

Beyond my opinions, I would recommend taking a look at how Stripe and Paypal plugins work as instant payment methods like Satispay: none of these use the On hold status.

References (from WooCommerce):
"Failed — Payment failed or was declined (unpaid) or requires authentication (SCA). Note that this status may not show immediately and instead show as Pending until verified (e.g., PayPal)."
"Cancelled — Cancelled by an admin or the customer – stock is increased, no further action required.
Please note: This status does not refund the customer.
An example use case: The merchant wants to cancel the order because the customer has become unresponsive and they do not know where to ship the product. The customer is not eligible for a refund in this case."

@keeara
Copy link
Contributor

keeara commented Mar 14, 2024

Ciao @andreDane

You're absolutely right, but we have a conflict at the moment between our Plugin and WooCommerce. (it's regarding the pending orders woocommerce core-logic and our plugin logic)
Our update at the moment wants to set a point in order to 'improve' the actual situation, but our will is to re-build/re-think the entire Plugin.

We do think your point is absolutely right, that's why we have in the backlog the plugin-rework.
Unfortunately we don't have a lot of resources atm, that's why it will require probably months

This just to confirm what you're stating and that we 'understand' what's wrong with the Plugin. We're aware of it and we're going to end all with a completely new product.

For any suggestion, feedback, or question, please do not hesitate to reach us out!

@andreDane
Copy link
Author

Hi @keeara ,
thanks for the clarification, I will wait then for the new developments and in the meantime I will work on a patch to prevent the current issues on our site.
Thank you for your time and attention on this.

@andreDane
Copy link
Author

Hi @keeara ,
if you need advice on this, my team is available.
Best regards

@andreDane
Copy link
Author

Hi! Any update on this? Thank you.

@roberto-annunziatella-purelab

Hi,
I can confirm that I'm still encountering this issue as of today. I'm using version 2.2.6 of the plugin.
Has there been any progress or plans regarding a fix?

In my opinion, the proper way to handle this would be to set the order status to Pending Payment. If the current status is needed to track the sync with Satispay, then perhaps it would be better not to rely on the WooCommerce order status, but instead use a custom order meta to store the data needed for the Satispay sync. As @andreDane clearly explained when opening the issue, the On Hold status is used by WooCommerce to handle a different payment flow.

Thank you in advance.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants