收到processing
状态后,我需要自动在订单上创建发票。在我的扩展中应该遵守哪个事件来实现这一目标?
我正在尝试,但这段代码不起作用,它可以是什么?
etc / modules中的.xml
<?xml version="1.0"?>
<config>
<modules>
<Atwix_Orderhook>
<active>true</active>
<codePool>community</codePool>
</Atwix_Orderhook>
</modules>
</config>
app / code /中的config.xml
<?xml version="1.0"?>
<config>
<modules>
<Atwix_Orderhook>
<version>1.0</version>
</Atwix_Orderhook>
</modules>
<global>
<models>
<orderhook>
<class>Atwix_Orderhook_Model</class>
</orderhook>
</models>
<events>
<sales_order_save_after>
<observers>
<auto_invoice_order>
<type>singleton</type>
<class>Atwix_Orderhook_Model_Observer</class>
<method>implementOrderStatus</method>
</auto_invoice_order>
</observers>
</sales_order_save_after>
</events>
</global>
</config>
app / code /中的Observer.php
<?php
class Atwix_Orderhook_Model_Observer
{
public function implementOrderStatus($event)
{
$order = $event->getOrder();
if ($order == 'processing') {
if ($order->canInvoice())
$this->_processOrderStatus($order);
}
return $this;
}
private function _processOrderStatus($order)
{
$invoice = $order->prepareInvoice();
$invoice->register();
Mage::getModel('core/resource_transaction')
->addObject($invoice)
->addObject($invoice->getOrder())
->save();
$invoice->sendEmail(false, '');
return true;
}
}
您可以观察sales_order_save_after
然后检查您所针对的订单状态,如下所示:
public function exampleEventHandler(Varien_Event_Observer $observer)
{
/* @var Mage_Sales_Model_Order $order */
$order = $observer->getOrder();
$stateProcessing = $order::STATE_PROCESSING;
// Only trigger when an order enters processing state.
if ($order->getState() == $stateProcessing && $order->getOrigData('state') != $stateProcessing) {
...
}
...
}
应用程序/代码/ MyCompany的/ MyModule的在/ etc / events.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
<event name="sales_order_save_after">
<observer name="mymodule_sales_order_save_after" instance="MyCompany\MyModule\Observer\CheckOrderStatus" />
</event>
</config>
然后
应用程序/代码/ MyCompany的/ MyModule的/观测/ CheckOrderStatus.php
<?php
namespace MyCompany\MyModule\Observer;
use Magento\Framework\Event\ObserverInterface;
class CheckOrderStatus implements ObserverInterface {
protected $orderRepository;
public function __construct(
\Magento\Sales\Api\OrderRepositoryInterface $orderRepository) {
$this->orderRepository = $orderRepository;
}
public function execute(\Magento\Framework\Event\Observer $observer) {
$order = $observer->getEvent()->getOrder();
$customerId = $order->getCustomerId();
$OrderStatus=$order->getStatus();
if ($OrderStatus == ‘pending’) {
//some work here
}elseif ($OrderStatus == ‘processing’) {
//some work here
}else{
// do something here
}
}
}
了解更多信息https://mage2-blog.com/magento-2-get-order-submission/