Hi,
We have currently implemented Stripe checkout.
If a customer leaves the checkout page via the implemented back button, the order status changes to “incomplete” which is totally fine. This keeps the stock at the same level.
In the following cases the order status remains “open”:
- If the customer closes the page/browser
- If the customer clicks on the back button of the browser
This reduces the stock and it remains reduced until an admin sets the order status to “Failed” or “Incomplete”.
In my opinion, this is not a logical behavior on the one hand and a security risk on the other, as someone can intentionally reduce the stock of a store completely.
From my point of view, there are two ways to avoid this problem:
- As soon as the stripe checkout is opened, the order status changes to “Incomplete” not/never to “Open”
- The order is not created until the stripe checkout has been completed with a successful payment.
Are there any other ways to get around the problem or did I configure something wrong?
How could the above suggestions be implemented?
Thank you
This subject has been beaten to death in the past. Some prefer one way and some prefer the other.
I wasn’t aware that the status inventory was not editable in admin. However, you may be able to edit the data base to change the open status inventory from decrease to increase.
I can totally understand that there are different preferences about this behavior but I don’t understand how to implement “the other” way
There is a plugin from soft solid (Add-ons :: Site Management :: Do not change inventory). It adds an “Do not change”-inventory option but still the “Open”-status is not editable.
So I will try to find out how to edit the “Open”-status.
Try:
UPDATE
cscart_status_dataSET
value= 'I' WHERE
cscart_status_data.
status_id= 3 AND
cscart_status_data.
param = 'inventory';
Edit: The editor is altering the format.
1 Like
I found a solution which should work for me best:
I changed /app/addons/stripe_connect/payments/stripe_connect.php line 79 from
fn_change_order_status($order_info['order_id'], OrderStatuses::OPEN);
if (!empty($session->payment_intent)) {
fn_update_order_payment_info(
$order_info['order_id'],
['stripe_connect.payment_intent_id' => $session->payment_intent]
);
}
to
fn_change_order_status($order_info['order_id'], OrderStatuses::INCOMPLETED);
So the initial status is always “incompleted”.
1 Like
I strongly recommend not to make these changes. To avoid a situation where two customers buy the same product, this status should always decrease the inventory. The possible negative consequences far outweigh the possible short-term benefits.
Also not recommended. Your changes removes the payment_intent_id
from being stored in the order, making it impossible to automatically update the order status via webhook from the Stripe side.
Now for the news for everyone
In 4.18.2, a new mechanism will be implemented that will change orders with abandoned (or simply failed) payment to Failed. This only affects Stripe Connect, Stripe Checkout is currently unaffected by these changes, but the developers are already working on the appropriate solution.
1 Like