2016-12-15 19 views
0

我在prestashop中構建了一個自定義模塊,我需要在接受付款後和發送電子郵件後執行一些操作。在mymodule.php我有以下鉤子:如何在prestashop付款後調用功能?

public function hookActionValidateOrder($params) { 

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

} 

這是正常執行。我嘗試了actionOrderStatusPostUpdate,actionPaymentConfirmation,但這些似乎都沒有被調用。我不知道它是否相關,但我正在使用opc模塊並且該產品是免費的。

+0

您是否正在開發付款模塊? – sarcom

+0

您是否安裝了可能會干擾訂單處理的重寫?當訂單被驗證或訂單狀態從後臺更改時,您所說的不會觸發的掛鉤應該觸發。 – TheDrot

回答

0

當你在你的問題曾提到,你想的順序是免費的,在這種情況下,被稱爲上支付任何掛鉤,將永遠不會調用。

因此,鉤子(即actionOrderStatusPostUpdate,actionPaymentConfirmation,hookActionObjectOrderAddAfter等)永遠不會被調用,因爲它們是從PaymentModule.php類中調用的,並且在空閒訂單的情況下它根本不會被調用。

不幸的是,當釋放免費訂單時,沒有掛鉤被調用。如果您想對自由訂單採取任何行動,那麼您只能通過覆蓋ParentOrderController.php中的FreeOrder類或_checkFreeOrder()函數來實現此目的。

+0

我不知道,我正在查看代碼,即使它是一個自由順序,仍然調用validateOrder()方法,所以該方法中的鉤子應該仍然有效。 – TheDrot

2

當客戶確認購物車後發出訂單時,此掛鉤即爲掛牌。觸發此鉤子的函數是從PaymentModule類。當客戶點擊結賬時的確認按鈕時,通過付款模塊進行呼叫。每個支付模塊都應該在某個時刻調用此函數。但是,如果由於免費產品而導致您的特定流程中沒有支付模塊,則該鉤子可能不會被調用。 無論如何,你可以在一個新的訂單訂閱actionObjectOrderAddAfter鉤或類似得到通知:

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

如果您需要了解訂單狀態的信息,您可以訂閱勾actionOrderHistoryAddAfter了。 Hook actionOrderStatusUpdate僅在changeIdOrderState函數內觸發。如果由於某種原因訂單狀態改變而沒有呼叫此功能,您將錯過通知。

好運

+1

這不會對他的情況有所幫助,因爲當新訂單被插入數據庫時​​,其訂單狀態爲'null'。 – TheDrot

+0

如果您想知道確認付款後何時發出新訂單,您需要訂單狀態爲何? – PixelWeb

+0

付款被接受後,他需要執行代碼,而使用支票,COD等付款方式的情況並非如此。 – TheDrot