Ich möchte, dass die Bestellung nach dem Zahlungsmethodenschritt bearbeitet wird, ohne den Review
Schritt in der Onepage Checkout.
Gibt es jemanden, der Erfahrung damit hat oder der mir die richtige Richtung weist, wie das geht?
Vielen Dank
Ich möchte, dass die Bestellung nach dem Zahlungsmethodenschritt bearbeitet wird, ohne den Review
Schritt in der Onepage Checkout.
Gibt es jemanden, der Erfahrung damit hat oder der mir die richtige Richtung weist, wie das geht?
Vielen Dank
Antworten:
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.
saveOrderAction()
und dann die Antwortbehandlung wie in Ihrer Observer-Methode hinzufügen.
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>
@Anton Evers, lassen Sie mich wissen, welche Dateien im Pfad geändert werden müssen. Vielen Dank