Come posso rimuovere il passaggio Revisione nel checkout di Onepage?


12

Vorrei che l'ordine venisse elaborato dopo il passaggio del metodo di pagamento, omettendo il Reviewpassaggio nel Pagamento Onepage.

C'è qualcuno che ha esperienza con questo o che può indicarmi la giusta direzione su come farlo?

Grazie


2
FYI: Questo è illegale in alcuni paesi.
user487772,

Ho modificato il passaggio di revisione con il pagamento, in modo che l'utente possa rivedere ed effettuare il pagamento in una sola fase. Alcune idee per cambiare questo flusso di lavoro?
Eduardo Luz,

Ho trovato che questa è una spiegazione abbastanza buona del processo: eccellenzamagentoblog.com/…
ryaan_anthony,

Risposte:


9

Per uno è necessario riscrivere 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');
}

Quindi c'è la parte in cui vuoi salvare il tuo ordine dopo la fase di pagamento attraverso un osservatore di eventi:

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

Il suddetto metodo di osservazione concorda implicitamente con i termini e le condizioni. Questo è illegale in alcuni paesi e potresti voler visualizzare i termini e passare i campi di accordo sulla pagina del metodo di pagamento.

Inoltre potresti dare un'occhiata a opcheckout.js per fare in modo che le persone non possano pubblicare il modulo d'ordine due volte ecc ...

Questo è solo per indicarti la giusta direzione. Non è una soluzione completa perché l'implementazione esatta dipende ovviamente dai desideri del cliente e non voglio privarti del divertimento di scoprire tu stesso i dettagli della soluzione. Ma di te rimani completamente bloccato, faccelo sapere.


Come creare un obeserver?
Akshay Taru,

Potresti modificare il post per creare un osservatore?
Akshay Taru,

Bella scrittura - questo è possibile anche con un'estensione del controller aggiornando il tasto del modulo prima di chiamare saveOrderAction(), quindi aggiungendo la gestione della risposta come nel metodo del proprio osservatore.
Robbie Averill,

0

Per creare il tuo osservatore di eventi:

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


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.