Jak mogę usunąć krok Recenzji w kasie Onepage?

12

Chciałbym, aby zamówienie zostało przetworzone po kroku metody płatności, pomijając Reviewkrok w kasie Onepage.

Czy jest ktoś, kto ma z tym doświadczenie lub może skierować mnie w dobrym kierunku, jak to zrobić?

Dziękuję Ci

Eduardo Luz
źródło
2
FYI: To jest nielegalne w nadchodzących krajach.
user487772,
Zmieniłem etap weryfikacji na płatność, aby użytkownik mógł przejrzeć i dokonać płatności w jednym etapie. Kilka pomysłów na zmianę tego przepływu pracy?
Eduardo Luz,
Uważam, że jest to całkiem dobre wytłumaczenie tego procesu: excellencemagentoblog.com/…
ryaan_anthony,

Odpowiedzi:

9

Na przykład musisz przepisać 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');
}

Następnie jest część, w której chcesz zapisać swoje zamówienie po kroku płatności przez obserwatora zdarzeń:

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

Powyższa metoda obserwatora domyślnie zgadza się z warunkami. W niektórych krajach jest to niezgodne z prawem i możesz chcieć wyświetlić warunki i przekazać pola zgody na stronie metody płatności.

Możesz także zajrzeć na stronę opcheckout.js, aby upewnić się, że ludzie nie mogą dwa razy wysłać formularza zamówienia itp.

To tylko po to, aby wskazać ci właściwy kierunek. Nie jest to kompletne rozwiązanie, ponieważ dokładna implementacja zależy oczywiście od życzeń klienta i nie chcę cię okradać z radości ze samodzielnego poznawania szczegółów rozwiązania. Ale jeśli utkniesz całkowicie, daj nam znać.

Anton Evers
źródło
Jak stworzyć obserwatora?
Akshay Taru
Czy możesz edytować post, aby utworzyć obserwatora?
Akshay Taru
Niezły opis - jest to również możliwe dzięki rozszerzeniu kontrolera poprzez odświeżenie klucza formularza przed wywołaniem saveOrderAction(), a następnie dodanie obsługi odpowiedzi jak w metodzie obserwatora.
Robbie Averill,
0

Aby utworzyć obserwatora wydarzenia:

<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
źródło
0

@Anton Evers, więc daj mi znać, które pliki muszę zmienić w ramach ścieżki. dzięki

sarvesh Dineshkumar Patel
źródło