Мы используем пользовательский модуль, который требует статуса «завершен» (я не могу изменить модуль, потому что он использует ioncube)
Мы также используем платежную систему, которая не предлагает вариант статуса: «завершено»
Поэтому мой вопрос: как я могу заставить ордер перейти в статус «завершен»?
PS: это не работает:
$order = Mage::getSingleton('sales/order');
$order->loadByIncrementId('12345');
$order->setState(Mage_Sales_Model_Order::STATE_COMPLETE, true);
$order->save();
order-status
Боб ван Луийт
источник
источник
Ответы:
Не разрешается вручную устанавливать состояние заказа на «завершено», и вы должны получить это исключение при вызове
setState
заказа с состоянием «завершено»:Причина этого проста: состояние «завершено» (и статус, поскольку это единственное состояние со статусом «завершено») предназначено для указания того, что заказ полностью выполнен. Т.е. он был размещен, выставлен счет и отправлен заказчику.
Как только заказ выставлен и выставлен счет, Magento автоматически установит это состояние в заказе.
Если ваша платежная система «не разрешает» статус «завершено», я бы не стал доверять ему, особенно в том случае, если он закодирован в ionCube. Однако, если это происходит потому, что он обрабатывает счета за пределами Magento, вам нужно вручную сгенерировать счет «Оффлайн» для заказа, чтобы Magento распознал, что он оплачен.
Не пытайтесь изменить себя, решая проблему, когда ордера не попадают в завершенное состояние, как обычно. Вместо этого исправьте реальную проблему, убедившись, что заказы выставляются в Magento и выставляются как счета, и они будут помечены системой как завершенные.
источник
Чтобы изменить состояние:
Чтобы изменить статус:
А потом
$order->save();
Вы должны изменить состояние, используя,
setData
чтобы исключение сообщало вам, что вы не можете вызвать вручнуюsetState
источник
Попробуй это.
Это работает для меня на моем проекте ..
источник
источник