Comment puis-je supprimer l'étape de révision dans le paiement d'une page?


12

Je voudrais l'ordre à traiter après l'étape de la méthode de paiement, en omettant l' Reviewétape du OnePage Checkout.

Y a-t-il quelqu'un qui a de l'expérience avec cela ou qui peut m'orienter dans la bonne direction sur la façon de procéder?

Je vous remercie


2
FYI: Ceci est illégal dans les pays à venir.
user487772

J'ai modifié l'étape de vérification pour être avec le paiement, afin que l'utilisateur puisse réviser et effectuer le paiement en une seule phase. Quelques idées pour changer ce workflow?
Eduardo Luz

J'ai trouvé que c'était une assez bonne explication du processus: excellencemagentoblog.com/…
ryaan_anthony

Réponses:


9

Pour un, vous devez réécrire 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');
}

Ensuite, il y a la partie où vous souhaitez enregistrer votre commande après l'étape de paiement via un observateur d'événement:

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

La méthode d'observation ci-dessus est implicitement en accord avec les termes et conditions. Ceci est illégal dans certains pays et vous souhaiterez peut-être afficher les conditions et transmettre les champs de publication d'accord sur la page du mode de paiement.

Aussi, vous voudrez peut-être jeter un œil à opcheckout.js pour faire en sorte que les gens ne puissent pas envoyer le bon de commande deux fois, etc.

C'est juste pour vous orienter dans la bonne direction. Ce n'est pas une solution complète car la mise en œuvre exacte dépend bien sûr des souhaits de votre client et je ne veux pas vous priver du plaisir de découvrir vous-même les détails de la solution. Mais si vous êtes totalement coincé, faites-le nous savoir.


Comment créer un obeserver?
Akshay Taru

Pourriez-vous modifier le message pour créer un observateur?
Akshay Taru

Belle écriture - cela est également possible avec une extension de contrôleur en actualisant la clé de formulaire avant d'appeler saveOrderAction(), puis en ajoutant la gestion des réponses comme dans votre méthode d'observation.
Robbie Averill

0

Pour créer votre observateur d'événements:

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


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.