创建中间挂单的问题

Ash*_*ary 11 php prestashop prestashop-1.5 prestashop-1.6

我创建了一个自定义支付模块,目前它validateOrder()在从支付网站重定向后调用,此方法创建订单,发送电子邮件等.但问题是,如果用户关闭支付网站,然后它可以重定向回PrestaShop网站在这种情况下不会创建订单.因此,我想"pending"在重定向到付款网站之前创建一个订单(比如说有状态),并且在从付款网站重定向后,我可以简单地标记相同的付款并发送邮件等.

目前为此我试图调用validateOrder两次,一次进入hookdisplayPayment(这里我将状态设置为"pending"),一次调用后重定向.但现在重定向后,我得到"购物车无法装载,或者已经使用此购物车下订单".我认为这是因为我不能使用相同的卡ID更新同一个订单两次.

请注意,付款成功后,我只想发送一次电子邮件.目前,我使用自定义付款状态'send_email'设置为0.

这有什么好的解决方法?

如果重要的话,我想支持1.5+和1.6+版本.

小智 5

比我的第一个答案更好的方法是在你的函数模块中创建一个覆盖validateOrder.你会修改:

/** @var Order $order */
$order = new Order();
Run Code Online (Sandbox Code Playgroud)

成:

/** @var Order $order */
$order = new Order($this->currentOrder);
Run Code Online (Sandbox Code Playgroud)

然后测试是否加载了对象,跳过它设置顺序字段的部分.如果未加载,请使用挂起状态正确设置订单字段.还要测试是否在发送电子邮件的地方设置了$ this-> currentOrder,如果未设置则跳过电子邮件部分.如果设置,则表示订单处于待处理状态,您应该更改状态并发送电子邮件.

覆盖该函数后,可以validateOrder在重定向之前和之后调用两次.


小智 -1

我认为我们需要您在网站上验证时(在离开该事项之前)调用另一个挂钩(您创建的),该挂钩放置待处理状态,并保持 ValidateOrder 挂钩 () 以确认付款

问候,

亚瑟