한 페이지 체크 아웃에서 검토 단계를 제거하려면 어떻게해야합니까?


12

결제 방법 단계 후에 주문을 처리 Review하고 Onepage Checkout 의 단계를 생략 하고 싶습니다.

이것에 대해 경험이 있거나 이것을하는 올바른 방향으로 나를 가리킬 수있는 사람이 있습니까?

감사합니다


2
참고 : 이것은 다가오는 나라에서 불법입니다.
user487772

검토 단계를 지불과 함께 변경하여 사용자가 한 단계에서 검토하고 지불 할 수 있습니다. 이 워크 플로를 변경하기위한 아이디어가 있습니까?
Eduardo Luz

나는이 과정의 매우 좋은 설명이 될 발견 : excellencemagentoblog.com/...
ryaan_anthony을

답변:


9

우선 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');
}

그런 다음 이벤트 관찰자를 통해 지불 단계 후에 주문을 저장하려는 부분이 있습니다.

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

위의 관찰자 방법은 이용 약관에 암시 적으로 동의합니다. 일부 국가에서는 불법이며, 결제 수단 페이지에서 약관을 표시하고 동의 게시 필드를 전달할 수 있습니다.

또한 사람들이 주문 양식을 두 번 등 게시 할 수 없도록 opcheckout.js를보고 싶을 수도 있습니다 ...

이것은 올바른 방향으로 당신을 가리 키기위한 것입니다. 정확한 구현은 고객의 요구 사항에 따라 다르며 솔루션의 세부 정보를 직접 찾는 재미를 빼앗고 싶지 않기 때문에 완벽한 솔루션이 아닙니다. 하지만 당신은 완전히 갇혀, 알려 주시기 바랍니다.


obeserver를 만드는 방법?
Akshay Taru

관찰자를 작성하기 위해 게시물을 편집 해 주시겠습니까?
Akshay Taru

멋진 쓰기-이것은 호출하기 전에 폼 키를 새로 고친 saveOrderAction()다음 관찰자 메서드에서와 같이 응답 처리를 추가하여 컨트롤러 확장으로 가능합니다 .
로비 애 버릴

0

이벤트 관찰자를 작성하려면 다음을 수행하십시오.

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


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.