Wie kann ich den Überprüfungsschritt in Onepage Checkout entfernen?


12

Ich möchte, dass die Bestellung nach dem Zahlungsmethodenschritt bearbeitet wird, ohne den ReviewSchritt in der Onepage Checkout.

Gibt es jemanden, der Erfahrung damit hat oder der mir die richtige Richtung weist, wie das geht?

Vielen Dank


2
Zu Ihrer Information: Dies ist in den kommenden Ländern illegal.
user487772

Ich habe den Überprüfungsschritt auf Zahlung geändert, damit der Benutzer die Zahlung in einer Phase überprüfen und ausführen kann. Einige Ideen, um diesen Workflow zu ändern?
Eduardo Luz

Ich fand dies eine ziemlich gute Erklärung des Prozesses: excellencemagentoblog.com/…
ryaan_anthony

Antworten:


9

Zum einen müssen Sie Mage_Checkout_Block_Onepage :: _ getStepCodes () umschreiben:

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

Dann gibt es den Teil, in dem Sie Ihre Bestellung nach dem Zahlungsschritt durch einen Ereignisbeobachter speichern möchten:

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

Die oben genannte Beobachtermethode stimmt den allgemeinen Geschäftsbedingungen implizit zu. Dies ist in einigen Ländern illegal. Möglicherweise möchten Sie die Bedingungen anzeigen und die Felder für die Zustimmungspost auf der Seite für die Zahlungsmethode weitergeben.

Vielleicht möchten Sie sich auch opcheckout.js ansehen, um sicherzugehen, dass die Leute das Bestellformular nicht zweimal posten können.

Dies ist nur, um Sie in die richtige Richtung zu weisen. Es ist keine vollständige Lösung, da die genaue Implementierung natürlich von den Wünschen Ihres Kunden abhängt und ich Ihnen nicht den Spaß nehmen möchte, die Details der Lösung selbst herauszufinden. Aber wenn Sie nicht weiterkommen, lassen Sie es uns bitte wissen.


Wie erstelle ich einen Obeserver?
Akshay Taru

Könnten Sie bitte den Beitrag bearbeiten, um einen Beobachter zu erstellen?
Akshay Taru

Nettes Schreiben - dies ist auch mit einer Controller-Erweiterung möglich, indem Sie den Formularschlüssel vor dem Aufruf aktualisieren saveOrderAction()und dann die Antwortbehandlung wie in Ihrer Observer-Methode hinzufügen.
Robbie Averill

0

So erstellen Sie Ihren Event 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>


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.