2012-07-27 46 views
2

我有一個電子商務網站開發magento,我使用貝寶作爲付款方式。當用戶在購物車中添加2件商品「Dress」並轉到結賬頁面並點擊訂單按鈕時​​,我將用戶重定向到PayPal網站進行付款。但有些用戶放棄付款並離開PayPal頁面。Magento:庫存項目減少當用戶abondoned貝寶付款

當他們點擊下單時,magento在後臺生成訂單並保持其狀態爲Pendin,一旦完成PayPal付款並將用戶重定向回我們的網站,該訂單的狀態更新爲Processing,因爲付款已完成。但是,如果用戶在沒有付款的情況下離開了pyapal付款頁面,那麼我的產品庫存就會減少,其他用戶無法下訂單直到我取消垃圾訂單。

有沒有什麼辦法可以使這個過程自動化,如果用戶不用paypal支付,庫存/庫存應該恢復正常?

請大家幫忙,謝謝!

回答

1

我想你需要設置一個magento cron作業,它將處於掛起狀態的訂單處理超過20分鐘,然後恢復這些作業,從而再次啓用您的庫存。

我試圖谷歌它,但找不到任何東西。我敢肯定這樣的事情存在

「的cron」是一種方式來安排定期的東西(比如,每隔10分鐘)在UNIX系統上,Magento的繼承了這一術語,在這裏你可以找到一些細節:http://www.magentocommerce.com/wiki/1_-_installation_and_configuration/how_to_setup_a_cron_job

所以,算法的計劃:

  • 每10分鐘
    • 支票訂購這是在掛起狀態,並且比舊的(CURRENT_TIME -20分鐘)
    • 恢復這些訂單自動

(也許你可以發送郵件到誰擁有訂單年長不到10分鐘即heeey的人,難道你不想要工資?)

+0

看起來是一種解決方案,因爲如果用戶離開形式貝寶網站,我們不能生成任何東西來通知我們。我認爲cron會工作,謝謝我正在嘗試這種方式... :) – Prashant 2012-07-27 10:17:08

3

這裏是的cron我們過去幾個月以來一直在使用。此代碼檢查超過7分鐘到30分鐘的掛單,並取消它們。對我來說,這會恢復庫存。

 public function cancelPending() 
     { 


     $orderCollection = Mage::getResourceModel('sales/order_collection'); 
     $orderCollection 
      ->addFieldToFilter('status', 'pending') 
      ->addFieldToFilter('created_at', array('lt' => new Zend_Db_Expr("DATE_ADD('".now()."', INTERVAL -'0:07' HOUR_MINUTE)"), 
              'gt' => new Zend_Db_Expr("DATE_ADD('".now()."', INTERAL -'0:30' HOUR_MINUTE)"))); 

     foreach($orderCollection->getItems() as $order) 
     { 
      $orderModel = Mage::getModel('sales/order'); 
      $orderModel->load($order['entity_id']); 

      if(!$orderModel->canCancel()) 
       continue; 

      $orderModel->cancel(); 
      $orderModel->setStatus('canceled'); 
      $orderModel->save(); 

} 

訂單等待付款的默認狀態爲「掛起」。你可能不得不改變這一點。

+2

請不要在使用直接SQL結構處理集合過濾器之外,它不會遵循Magento開發中的最佳實踐。如果你使用Zend_Date對象,你的代碼看起來會更好。 – 2012-07-27 14:45:20

+0

謝謝你的建議!我會嘗試改變它! – sulabh 2012-07-28 05:53:01