我正在prestashop中构建一个自定义模块,我需要在接受付款后和电子邮件发送后执行某些操作。在mymodule.php中,我有以下钩子:
public function hookActionValidateOrder($params) {
$order = $params['order'];
$customer = $params['customer'];
$valuesToinsert="";
$attrValue=array();
etc...
}
正常执行。我尝试了actionOrderStatusPostUpdate,actionPaymentConfirmation但似乎没有一个被调用。我不知道它是否相关,但我使用的是opc模块,产品是免费的。
答案 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) { }