Làm cách nào tôi có thể xóa bước Xem lại trong thanh toán Onepage?


12

Tôi muốn đơn hàng được xử lý sau bước Phương thức thanh toán, bỏ qua Reviewbước trong Onepage Checkout.

Có ai có kinh nghiệm với điều này hoặc ai có thể chỉ cho tôi đi đúng hướng về cách làm điều này không?

Cảm ơn bạn


2
FYI: Điều này là bất hợp pháp ở các nước đến.
dùng487772

Tôi đã thay đổi bước xem xét để thanh toán, vì vậy người dùng có thể xem xét và thực hiện thanh toán trong một giai đoạn. Một số ý tưởng để thay đổi quy trình làm việc này?
Eduardo Luz

Tôi thấy đây là một lời giải thích khá hay về quy trình: excellencemagentoblog.com/
Good

Câu trả lời:


9

Đối với một bạn cần viết lại 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');
}

Sau đó, có phần bạn muốn lưu đơn hàng của mình sau bước thanh toán thông qua người quan sát sự kiện:

/**
 * 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));
        }
    }
}

Phương pháp quan sát ở trên hoàn toàn đồng ý với các điều khoản và điều kiện. Điều này là bất hợp pháp ở một số quốc gia và bạn có thể muốn hiển thị các điều khoản và vượt qua các trường đăng bài đồng ý trên trang phương thức thanh toán.

Ngoài ra, bạn có thể muốn xem opcheckout.js để làm cho những người shure không thể đăng mẫu đơn đặt hàng hai lần, v.v ...

Đây chỉ là để chỉ cho bạn đi đúng hướng. Đây không phải là một giải pháp hoàn chỉnh bởi vì việc triển khai chính xác phụ thuộc vào mong muốn của khách hàng của bạn và tôi không muốn cướp đi niềm vui của bạn khi tự mình tìm hiểu chi tiết về giải pháp. Nhưng trong số các bạn bị mắc kẹt hoàn toàn, xin vui lòng cho chúng tôi biết.


Làm thế nào để tạo ra một obeserver?
Akshay Taru

Bạn có thể vui lòng chỉnh sửa bài viết để tạo người quan sát?
Akshay Taru

Viết lên tốt - điều này cũng có thể với tiện ích mở rộng của bộ điều khiển bằng cách làm mới phím biểu mẫu trước khi bạn gọi saveOrderAction(), sau đó thêm xử lý phản hồi như trong phương thức quan sát viên của bạn.
Robbie Averill

0

Để tạo Trình quan sát sự kiện của bạn:

<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>


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.