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();
ですか?上記のことを達成する他の方法はありますか?
注文の「作成時間」でフィルタリングして、数秒前に作成された注文の状態を変更しないようにすることもできますか?[解決済み]
ありがとう!