Phải quan sát magento cho đơn đặt hàng thanh toán


7

Tôi đang cố gắng gửi đơn đặt hàng cho bên thứ ba sau và CHỈ sau khi đơn hàng đã được thanh toán và hiện được đặt thành 'Đang xử lý' dưới dạng trạng thái. Người quan sát tốt nhất nên sử dụng gì để thiết lập điều này hoạt động cho tất cả các loại thanh toán?

Sau khi đọc một số nguồn có vẻ như:

sales_order_invoice_pay

Nên hoạt động cho tất cả các phương thức thanh toán nhưng có vẻ như nó đã bị xóa trên Magento 1.9: http://rabee.me/codes/magento/chcoateet/1.9/

Tùy chọn khác là:

'sales_order_payment_pay'

Nhưng khi tôi kiểm tra, nó đặt phương thức thanh toán thành "Kiểm tra / Lệnh chuyển tiền", nó KHÔNG được kích hoạt sau khi tôi tạo hóa đơn vào phụ trợ bằng cách sử dụng Đơn hàng> Hóa đơn> Gửi hóa đơn

Có phải phương thức này chỉ được gọi với các phương thức thanh toán khác? (paypal / authotize.net)

CẬP NHẬT:

Sau khi đọc: câu hỏi khác này có vẻ như là cách duy nhất để đảm bảo rằng tôi đang xuất đơn hàng SAU một khoản thanh toán (trực tuyến hoặc ngoại tuyến) đã được thực hiện để nắm bắt khi hóa đơn được tạo và đối với Magento 1.9, người quan sát đúng :

sales_order_invoice_register

Hóa đơn có tự động được tạo và gửi sau khi thanh toán trên các phương thức trực tuyến paypal / authotize.net không? Điều này vẫn sẽ đúng khi sử dụng chúng trên chế độ thử nghiệm / hộp cát?

Cảm ơn rất nhiều vì sự giúp đỡ của bạn

Câu trả lời:


1

Tôi sử dụng như sau:

1 - ứng dụng / mã / loca / Packagename / Modulename / etc / config.xml

<config>
<global>
    <models>
        <sales>
            <rewrite>
                <order>Packagename_Modulename_Model_Rewrite_Order</order>
            </rewrite>
        </sales>
        <sales_resource>
            <rewrite>
                <quote>Packagename_Modulename_Model_Rewrite_Resource_Sales_Quote</quote>
            </rewrite>
        </sales_resource>
        <modelrewrite>
            <class>Packagename_Modulename_Model_Rewrite</class>
        </modelrewrite>
    </models>        
    <events>
        <packagename_modulename_order_status_change>
            <observers>
                <packagename_modulename_model_rewrite>
                    <type>singleton</type>
                    <class>modelrewrite/observer</class>
                    <method>changeStateOrder</method>
                </packagename_modulename_model_rewrite>
            </observers>
        </packagename_modulename_order_status_change>
    </events>        
     <resources>
        <modulename_setup>
            <setup>
                <module>Packagename_Modulename</module>
                 <class>Mage_Sales_Model_Resource_Setup</class>
            </setup>
            <connection>
            <use>core_setup</use>
            </connection>
        </modulename_setup>
    </resources>        
</global>
  <crontab>
    <!-- here I am listing only major routines  -->
    <jobs>        
        <Packagename_Modulename_Model_Rewrite_SendOrderToERP>
            <schedule>
                <cron_expr>12 * * * *</cron_expr>
            </schedule>
            <run>
                <model>modelrewrite/observer::runSendOrderToERP</model>
            </run>
        </Packagename_Modulename_Model_Rewrite_SendOrderToERP>            
        <Packagename_Modulename_Model_Rewrite_ReceiveERPStatusOrder>
            <schedule>
                <cron_expr>*/5 * * * *</cron_expr>
            </schedule>
            <run>
                <model>modelrewrite/observer::runReceiveERPStatusOrder</model>
            </run>
        </Packagename_Modulename_Model_Rewrite_ReceiveERPStatusOrder>            
    </jobs>        
</crontab>

2 - ứng dụng / mã / loca / Packagename / Modulename / Model / Rewrite / Order.php

lớp Packagename_Modulename_Model_Rewrite_Order mở rộng Mage_Sales_Model_Order {

public function _setState($state, $status = false, $comment = '', $isCustomerNotified = null, $shouldProtectState = false){
    // attempt to set the specified state
    // tenta definir o status especificado
    if ($shouldProtectState) {
        if ($this->isStateProtected($state)) {
            Mage::throwException(
                Mage::helper('sales')->__('The Order State "%s" must not be set manually.', $state)
            );
        }
    }
    $this->setData('state', $state);

    // add status history
    if ($status) {
        if ($status === true) {
            $status = $this->getConfig()->getStateDefaultStatus($state);
        }
        $this->setStatus($status);
        $history = $this->addStatusHistoryComment($comment, false); // no sense to set $status again
        $history->setIsCustomerNotified($isCustomerNotified); // for backwards compatibility
    }

    Mage::dispatchEvent('packagename_modulename_order_status_change', array('order' => $this, 'state' => $state, 'status' => $status, 'comment' => $comment, 'isCustomerNotified' => $isCustomerNotified));              
    Mage::log("Packagename_Modulename_Model_Rewrite_Order Changing order to STATE ".$state." STATUS ".$status);
    return $this;
}

}

3 - ứng dụng / mã / loca / Packagename / Modulename / Model / Rewrite / Observer.php

class Packagename_modulename_Model_Rewrite_Observer{

public function implementOrderStatus($event){
    $order = $event->getOrder();
    $state = $event->getState();
    $status = $event->getStatus();
    return $this;
} 

public function changeStateOrder($observer){
    Mage::log('changeStateOrder');
    $order = $observer->getEvent()->getOrder();       

    if($order->getStatus() == "processing_paid"){
        $this->autoInvoicing($order);
    }
    else if($order->getStatus() == "processing_shipped"){
        $this->autoShipment($order);
    }

    // use your necessary ifs
    $this->sendTransactionalEmail($order);

    return $this;
}


public function autoShipment(Mage_Sales_Model_Order $order){ 
    //...    
}

public function autoInvoicing(Mage_Sales_Model_Order $order){ 
    //...    
    //return $this;
}

public function sendTransactionalEmail(Mage_Sales_Model_Order $order){

    switch ($order->getStatus()) {            
        case "processing":
            $templateId = 1;                        
            break;
        case "pending_payment":
            $templateId = 0;                        
            break;            
    //...                    
        default:
            $templateId = 0;
            break;
    }        

//...
}


public function runSendOrderToERP($schedule){
     //...
}


public function runReceiveERPStatusOrder($schedule){        
    //...
}

//And much more another methods can be used after change state / status order: refund, calcel, etc
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.