我使用一个cron作业来改变这一切“待定”网络银行订单“付款待定”
(这是为了解决我的问题: 为什么是国家未转换为“payment_pending”在网关取消的订单 )
这是我的代码- [EDITED]
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();
? 任何其他的方法来完成上述的事情吗?
可我也是为了“创建时间”过滤器,所以我不改州为顺序,这是创建秒前。 [解决了]
谢谢!
只是试图把$order->setState('pending_payment'); $order->setStatus('pending_payment'); $order->save();
$order->setState('pending_payment'); $order->setStatus('pending_payment'); $order->save();
我觉得你不改变,可能创造问题的订单状态。
最后,解决我的问题。 现在工作的工作原理完全如预期!
这是工作程序 -
const MINUTES_DELAY = 15; //Orders younger than this are not changed
const OUT_FILE = '/home/vinayak/cron.txt';
public function run() {
$old_time = time() - (self::MINUTES_DELAY*60);
$out = "-------------------------------------------\n";
$out .= date('d.m.y h:i:s A')."\n";
$orders = Mage::getModel('sales/order')->getCollection()
->addFieldToFilter('status', 'pending')
->addFieldToFilter('cod_fee', array('null' => true))
;
foreach ($orders as $order) {
if (strtotime($order->getCreatedAt()) < $old_time) {
try{
$id = $order->getIncrementId();
Mage::getModel('sales/order')
->loadByIncrementId($id)
->setState('pending_payment', true)
->save();
$out .= $id."\n";
} catch (Exception $e) {
$out .= "Caught exception : ".$e->getMessage()."\n";
}
}
}
file_put_contents(self::OUT_FILE, $out, FILE_APPEND);
return true;
}
希望这可以帮助别人。
我还没有掌握Zend的查询,因此直接与数据库进行交互时,我一直在写适当的MySQL查询。 请记住,订单状态是不灵活的,直到Magento的更新版本(除非你买的扩展名)。
mysql> select status from sales_flat_order group by status;
+-----------------+
| status |
+-----------------+
| canceled |
| closed |
| complete |
| pending |
| pending_payment |
| processing |
+-----------------+
6 rows in set (0.00 sec)
mysql> select state from sales_flat_order group by state;
+-----------------+
| state |
+-----------------+
| canceled |
| closed |
| complete |
| new |
| pending_payment |
| processing |
+-----------------+
6 rows in set (1.03 sec)
为了帮助自己理解的表结构,我写了一个PHP脚本,使所有表的CSV与领域 。 所以,你可以得到与第一位SELECT entity_id, state, status, created_at, increment_id FROM sales_flat_order WHERE status="pending"
。 我看了看,并没有看到“cod_fee”在任何存在于我的1.4.2安装的字段名的。 请注意上述查询的输出格式:
SELECT entity_id, state, status, created_at, increment_id FROM sales_flat_order WHERE status="pending";
+-----------+------------+---------+---------------------+--------------+
| entity_id | state | status | created_at | increment_id |
+-----------+------------+---------+---------------------+--------------+
| 2493 | new | pending | 2011-09-14 18:09:47 | 200025332 |
| 2683 | complete | pending | 2011-10-04 17:19:07 | 200025523 |
| 2686 | new | pending | 2011-10-04 20:43:52 | 200025526 |
| 3022 | processing | pending | 2011-11-15 01:11:34 | 200025849 |
| 3428 | complete | pending | 2012-01-12 17:56:57 | 200026236 |
| 4493 | processing | pending | 2012-04-11 16:16:55 | 200027230 |
| 5071 | new | pending | 2012-05-21 18:05:43 | 200027759 |
| 5091 | new | pending | 2012-05-22 17:48:11 | 200027779 |
...
| 5399 | new | pending | 2012-06-14 17:46:46 | 200028069 |
| 5443 | new | pending | 2012-06-18 18:50:55 | 200028111 |
| 5486 | new | pending | 2012-06-20 21:18:24 | 200028152 |
| 5491 | new | pending | 2012-06-20 23:54:53 | 200028157 |
+-----------+------------+---------+---------------------+--------------+
23 rows in set (0.79 sec)