Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Issue with creating an intermediate pending order

I have created a custom payment module and currently it calls validateOrder() after the redirection from the payment website, and this method creates the order, sends email etc. But the issue is if user closed the payment website before it can redirect back to the PrestaShop website the order won't be created in this case. So, I want to create an order(say with "pending" status) before I redirect to the payment website and after redirection from the payment website I can simply mark the same payment as done and send mails etc.

Currently for this I was trying to call validateOrder twice, once in hookdisplayPayment(here I set the status as "pending") and once after redirection. But now after redirection I am getting "The cart cannot be loaded, or an order has already been placed using this cart". I think that's because I can't update the same order twice using the same Card Id.

Note that I want to send the emails only once, once the payment is successful. Currently for this I am using a custom payment status with 'send_email' set to 0.

What's a good workaround for this?

I would like to support versions 1.5+ and 1.6+ if that matters.

like image 563
Ashwini Chaudhary Avatar asked Aug 05 '15 08:08

Ashwini Chaudhary


1 Answers

A better way to do it than my first answer would be to create a override in your module of function validateOrder. You will modify:

/** @var Order $order */
$order = new Order();

Into:

/** @var Order $order */
$order = new Order($this->currentOrder);

Then test if is loaded object, skip the part where it sets the order fields. If it's not loaded, set the order fields appropriately with the pending status. Also test if $this->currentOrder is set where the email is sent, if it's not set skip the email part. If it's set it means the order is pending and you should change the status and send the email.

After you override the function, you can call validateOrder twice, before and after redirection.

like image 180
gabdara Avatar answered Sep 22 '22 13:09

gabdara