我正在使用 cron 作业将所有“待处理”网上银行订单更改为“待付款”
(这是为了解决我的问题:为什么在网关取消订单的状态未转换为“payment_pending”?)
这是我的代码- [编辑]
const MINUTES_DELAY = 15; //Orders younger than this are not changed
public function run() {
// date_default_timezone_set('Asia/Kolkata');
$old_time = time() - (self::MINUTES_DELAY*60);
$out = date('d.m.y h:i:s A', $old_time)."\n";
$out .= date('d.m.y h:i:s A')."\n";
file_put_contents('/home/vinayak/cron.txt', '1'.$out, FILE_APPEND); //Out1
$orders = Mage::getModel('sales/order')->getCollection()
->addFieldToFilter('status', 'pending')
->addFieldToFilter('cod_fee', array('null' => true))
->addAttributeToSelect('customer_email')
->addAttributeToSelect('created_at')
;
foreach ($orders as $order) {
if (strtotime($order->getCreatedAt()) < $old_time){
$order->setState('pending_payment', true)->save();
$out .= $order->getCustomerEmail()." @ ".$order->getCreatedAt()."\n";
}
}
file_put_contents('/home/vinayak/cron.txt', '2'.$out, FILE_APPEND); //Out2
return true;
}
我检查了 cron 是否正常工作。但是状态/状态没有改变。我现在没有收到错误。
[编辑]现在的问题 - 我在代码中将输出标记为“out1”,但不是“out2”
更改代码后,我看到,只要if
条件为真,就会出现问题(上图)。这指出了该行的问题$order->setState('pending_payment', true)->save();
(我已经注释掉了 中的另一行if
,问题仍然存在,但是如果我注释掉这一行 out2 会被打印出来)。似乎执行卡在这一行(无限循环?或一些内部问题?)
有什么问题$order->setState('pending_payment', true)->save();
?还有其他方法可以完成上述事情吗?
我是否也可以按订单“创建时间”进行过滤,这样我就不会更改几秒钟前创建的订单的状态。[解决了]
谢谢!