Bagaimana saya bisa menghapus langkah Tinjau di checkout di tempat?


12

Saya ingin agar pesanan diproses setelah langkah Metode pembayaran, menghilangkan Reviewlangkah dalam Onsite Checkout.

Adakah orang yang memiliki pengalaman dengan ini atau yang dapat mengarahkan saya ke arah yang benar tentang bagaimana melakukan ini?

Terima kasih


2
FYI: Ini ilegal di negara-negara yang akan datang.
user487772

Saya mengubah langkah ulasan menjadi pembayaran, sehingga pengguna dapat meninjau dan melakukan pembayaran dalam satu fase. Beberapa ide untuk mengubah alur kerja ini?
Eduardo Luz

Saya menemukan ini menjadi penjelasan yang cukup bagus tentang proses: excellencemagentoblog.com/...
ryaan_anthony

Jawaban:


9

Untuk itu Anda perlu menulis ulang Mage_Checkout_Block_Onepage :: _ getStepCodes ():

 /**
 * Get checkout steps codes
 *
 * @return array
 */
protected function _getStepCodes()
{
    /**
     * Originally these were 'login', 'billing', 'shipping', 'shipping_method', 'payment', 'review'
     *
     * Stripping steps here has an influence on the entire checkout. There are more instances of the above list
     * among which the opcheckout.js file. Changing only this method seems to do the trick though.
     */
    if ($this->getQuote()->isVirtual()) {
        return array('login', 'billing', 'payment');
    }
    return array('login', 'billing', 'shipping', 'shipping_method', 'payment');
}

Lalu ada bagian di mana Anda ingin menyimpan pesanan Anda setelah langkah pembayaran melalui pengamat acara:

/**
 * THIS METHOD IMMEDIATELY FORWARDS TO THE SAVE ORDER ACTION AFTER THE PAYMENT METHOD ACTION
 *
 * Save the order after having saved the payment method
 *
 * @event controller_action_postdispatch_checkout_onepage_savePayment
 *
 * @param $observer Varien_Event_Observer
 */
public function saveOrder($observer)
{
    /** @var $controllerAction Mage_Checkout_OnepageController */
    $controllerAction = $observer->getEvent()->getControllerAction();
    /** @var $response Mage_Core_Controller_Response_Http */
    $response = $controllerAction->getResponse();

    /**
     * jsonDecode is used because the response of the XHR calls of onepage checkout is always formatted as a json
     * string. jesonEncode is used after the response is manipulated.
     */
    $paymentResponse = Mage::helper('core')->jsonDecode($response->getBody());
    if (!isset($paymentResponse['error']) || !$paymentResponse['error']) {
        /**
         * If there were no payment errors, immediately forward to saving the order as if the user had confirmed it
         * on the review page.
         */
        $controllerAction->getRequest()->setParam('form_key', Mage::getSingleton('core/session')->getFormKey());

        /**
         * Implicitly agree with the terms and conditions by confirming the order
         */
        $controllerAction->getRequest()->setPost('agreement', array_flip(Mage::helper('checkout')->getRequiredAgreementIds()));

        $controllerAction->saveOrderAction();
        /**
         * jsonDecode is used because the response of the XHR calls of onepage checkout is always formatted as a json
         * string. jesonEncode is used after the response is manipulated.
         *
         * $response has here become the response of the saveOrderAction()
         */
        $orderResponse = Mage::helper('core')->jsonDecode($response->getBody());
        if ($orderResponse['error'] === false && $orderResponse['success'] === true) {
            /**
             * Check for redirects here. If there are redirects than a module such as Adyen wants to redirect to a
             * payment page instead of the success page after saving the order.
             */
            if (!isset($orderResponse['redirect']) || !$orderResponse['redirect']) {
                $orderResponse['redirect'] = Mage::getUrl('*/*/success');
            }
            $controllerAction->getResponse()->setBody(Mage::helper('core')->jsonEncode($orderResponse));
        }
    }
}

Metode pengamat di atas secara implisit setuju dengan syarat dan ketentuan. Ini ilegal di beberapa negara dan Anda mungkin ingin menampilkan persyaratan dan meneruskan bidang pos yang disetujui pada halaman metode pembayaran.

Anda juga mungkin ingin melihat opcheckout.js untuk membuat shure orang tidak dapat mengirim formulir pemesanan dua kali dll ...

Ini hanya untuk mengarahkan Anda ke arah yang benar. Ini bukan solusi lengkap karena implementasi yang tepat tergantung pada keinginan pelanggan Anda tentu saja dan saya tidak ingin merampok kesenangan Anda untuk mengetahui detail dari solusi itu sendiri. Tetapi jika Anda benar-benar mandek, beri tahu kami.


Bagaimana cara membuat obeserver?
Akshay Taru

Bisakah Anda mengedit posting untuk membuat pengamat?
Akshay Taru

Menulis yang bagus - ini juga dimungkinkan dengan ekstensi pengontrol dengan menyegarkan kunci formulir sebelum Anda menelepon saveOrderAction(), kemudian menambahkan penanganan respons seperti dalam metode pengamat Anda.
Robbie Averill

0

Untuk membuat Pengamat acara Anda:

<controller_action_postdispatch_checkout_onepage_savePayment> <observers> <Name_Event_Observer> <class>module/observer</class> <method>method</method> </Name_Event_Observer> </observers> </controller_action_postdispatch_checkout_onepage_savePayment>


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.