Como posso remover a etapa de revisão no checkout de Onepage?

12

Desejo que o pedido seja processado após a etapa Método de pagamento, omitindo a Reviewetapa no Pagamento de entrada única.

Existe alguém que tenha experiência com isso ou que possa me indicar a direção certa de como fazer isso?

Obrigado

Eduardo Luz
fonte
2
FYI: Isso é ilegal em alguns países.
user487772
Alterei a etapa de revisão para estar com pagamento, para que o usuário possa revisar e efetuar o pagamento em uma fase. Algumas idéias para alterar esse fluxo de trabalho?
Eduardo Luz
Eu encontrei este para ser um bom explicação do processo: excellencemagentoblog.com/...
ryaan_anthony

Respostas:

9

Para uma, você precisa reescrever 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');
}

Depois, há a parte em que você deseja salvar seu pedido após a etapa de pagamento através de um observador de eventos:

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

O método observador acima concorda implicitamente com os termos e condições. Isso é ilegal em alguns países e você pode exibir os termos e passar os campos de postagem de acordo na página da forma de pagamento.

Além disso, você pode dar uma olhada no opcheckout.js para fazer com que as pessoas da Shure não possam postar o formulário de pedido duas vezes, etc ...

Isso é apenas para apontar na direção certa. Não é uma solução completa, porque a implementação exata depende dos desejos do seu cliente, é claro, e não quero lhe roubar a diversão de descobrir os detalhes da solução. Mas, se você ficar totalmente preso, informe-nos.

Anton Evers
fonte
Como criar um obeserver?
Akshay Taru
Você poderia editar a postagem para criar um observador?
Akshay Taru
Boa gravação - isso também é possível com uma extensão de controlador, atualizando a chave do formulário antes de você ligar saveOrderAction()e adicionando o tratamento de respostas como no seu método de observação.
Robbie Averill
0

Para criar seu evento Observer:

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

Arthur Morais
fonte
0

@Anton Evers, por favor, deixe-me saber quais arquivos eu preciso alterar no caminho. obrigado

sarvesh Dineshkumar Patel
fonte