Как автоматически отменить отложенные ордера по истечении заданного промежутка времени?
Мы обнаружили, что у нас иногда заканчиваются запасы/запасы из-за заказов, ожидающих оплаты. В нашем случае, когда клиент отменяет платеж PayPal или не платит через банковский депозит.
Есть ли способ "освободить" эти запасы/запасы через определенное время автоматически, без необходимости регулярно проверять наличие заказов, ожидающих оплаты, и отменять их вручную?
Мы понимаем, что существуют расширения, которые делают это, но нам было интересно, есть ли встроенный способ в Magento для этого.
3 answers
Я бы не стал удалять заказ, а просто отменил его, и с помощью cronjob (либо скрипта, либо расширения Magento) вы можете это сделать. Запускайте его ежедневно, чтобы убирать заказы.
Результаты регистрируются в var/logs/cancelorders.log
для справки.
$collection = Mage::getModel('sales/order')->getCollection()
->addFieldToFilter('updated_at', Mage::getModel('core/date')->gmtDate(null, time()-86400)) // only clean yesterdays orders so user has time to restart transaction
->addFieldToFilter('state', 'pending_payment');
foreach ($collection as $order)
{
$order->cancel();
$order->setStatus('canceled');
try {
$order->save();
Mage::log("Canceled {$order->getIncrementId()}", Zend_Log::INFO, 'cancelorders.log', true);
} catch(Exception $e){
Mage::log("Could not cancel order {$order->getIncrementId()}: {$e}", Zend_Log::WARN, 'cancelorders.log', true);
}
}
Для этого нет встроенного способа. Вы можете просто создать cron, который вызывает следующий код (или что-то подобное).
$olderThan = 21;//21 days
$date = date('Y-m-d', mktime(0,0,0, date('m'), date('d') - $olderThan, date('Y')));
//get orders with no update in the last 21 days
$orders = Mage::getModel('sales/order')->getCollection()
->addFieldToFilter('state', 'pending_payment')
->addFieldToFilter('updated_at', array('lt'=>$date)); //you can use created_at instead of updated_at.
foreach ($orders as $order){
$order->cancel();
$order->save();
}
Я также прочитал учебник по Magento об этой проблеме на Inchoo.net
Вы можете получить от него некоторые полезные инструкции: