如何在prestashop付款后调用功能?

时间:2016-12-15 18:13:47

标签: php hook prestashop

我正在prestashop中构建一个自定义模块,我需要在接受付款后和电子邮件发送后执行某些操作。在mymodule.php中,我有以下钩子:

public function hookActionValidateOrder($params) {

    $order = $params['order'];
    $customer = $params['customer'];
    $valuesToinsert="";
    $attrValue=array();
    etc...

 }

正常执行。我尝试了actionOrderStatusPostUpdate,actionPaymentConfirmation但似乎没有一个被调用。我不知道它是否相关,但我使用的是opc模块,产品是免费的。

3 个答案:

答案 0 :(得分:2)

在客户确认购物车后下订单时,会调用此挂钩。触发此挂钩的函数是来自validateOrder类的PaymentModule。当客户点击结账时点击确认按钮时,通过支付模块进行呼叫。每个支付模块都应该在某个时刻调用此功能。但是,如果由于免费产品而在您的特定流程中没有支付模块,则可能永远不会调用此挂钩。 无论如何,您可以订阅actionObjectOrderAddAfter挂钩或类似信息,以便在下订单时收到通知:

public function hookActionObjectOrderAddAfter($params)
{
        //$params['object'] contains specific object, in this case your Order object
}

如果您需要有关订单状态的信息,您也可以订阅挂钩actionOrderHistoryAddAfter。挂钩actionOrderStatusUpdate仅在changeIdOrderState函数内触发。如果由于某种原因订单状态发生变化而没有调用此功能,您将错过通知。

祝你好运

答案 1 :(得分:0)

正如您在问题中提到的那样,您尝试的订单是免费的,在这种情况下,任何在付款时调用的挂钩都不会打电话。

因此,永远不会调用钩子(即actionOrderStatusPostUpdate,actionPaymentConfirmation,hookActionObjectOrderAddAfter等),因为它们是从PaymentModule.php类调用的,并且在免费订单的情况下根本不会调用它。

不幸的是,在下达免费订单时没有挂钩。如果您想对Free订单采取任何操作,那么您只能通过覆盖ParentOrderController.php中的FreeOrder类或_checkFreeOrder()函数来实现这一点

答案 2 :(得分:0)

旧帖子,但想发表评论以帮助他人。提交订单后,此函数将调用,无论是否已提交付款,他们都会获得确认页面:

public function hookDisplayOrderConfirmation($params) { }