¿Cómo puedo eliminar el paso Revisar en el pago de Onepage?


12

Me gustaría que el pedido se procese después del paso Método de pago, omitiendo el Reviewpaso en Pago de una página.

¿Hay alguien que tenga experiencia con esto o que pueda señalarme en la dirección correcta sobre cómo hacerlo?

Gracias


2
FYI: Esto es ilegal en los países venideros.
user487772

Cambié el paso de revisión para que sea con pago, para que el usuario pueda revisar y realizar el pago en una fase. ¿Algunas ideas para cambiar este flujo de trabajo?
Eduardo Luz

Encontré que esta es una muy buena explicación del proceso: excellencemagentoblog.com/…
ryaan_anthony

Respuestas:


9

Para uno necesita reescribir 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');
}

Luego está la parte donde desea guardar su pedido después del paso de pago a través de un 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));
        }
    }
}

El método de observación anterior está implícitamente de acuerdo con los términos y condiciones. Esto es ilegal en algunos países y es posible que desee mostrar los términos y pasar los campos de publicación de acuerdo en la página de método de pago.

También es posible que desee echar un vistazo a opcheckout.js para hacer que la gente no pueda publicar el formulario de pedido dos veces, etc.

Esto es solo para señalarle en la dirección correcta. No es una solución completa porque la implementación exacta depende de los deseos de su cliente, por supuesto, y no quiero robarle la diversión de descubrir los detalles de la solución usted mismo. Pero si te quedas atascado totalmente, háznoslo saber.


¿Cómo crear un obeserver?
Akshay Taru

¿Podrías editar la publicación para crear un observador?
Akshay Taru

Buena redacción: esto también es posible con una extensión de controlador al actualizar la clave de formulario antes de llamar saveOrderAction(), y luego agregar el manejo de la respuesta como en su método de observación.
Robbie Averill

0

Para crear su evento Observador:

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


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.