결제 방법 단계 후에 주문을 처리 Review
하고 Onepage Checkout 의 단계를 생략 하고 싶습니다.
이것에 대해 경험이 있거나 이것을하는 올바른 방향으로 나를 가리킬 수있는 사람이 있습니까?
감사합니다
결제 방법 단계 후에 주문을 처리 Review
하고 Onepage Checkout 의 단계를 생략 하고 싶습니다.
이것에 대해 경험이 있거나 이것을하는 올바른 방향으로 나를 가리킬 수있는 사람이 있습니까?
감사합니다
답변:
우선 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');
}
그런 다음 이벤트 관찰자를 통해 지불 단계 후에 주문을 저장하려는 부분이 있습니다.
/**
* 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));
}
}
}
위의 관찰자 방법은 이용 약관에 암시 적으로 동의합니다. 일부 국가에서는 불법이며, 결제 수단 페이지에서 약관을 표시하고 동의 게시 필드를 전달할 수 있습니다.
또한 사람들이 주문 양식을 두 번 등 게시 할 수 없도록 opcheckout.js를보고 싶을 수도 있습니다 ...
이것은 올바른 방향으로 당신을 가리 키기위한 것입니다. 정확한 구현은 고객의 요구 사항에 따라 다르며 솔루션의 세부 정보를 직접 찾는 재미를 빼앗고 싶지 않기 때문에 완벽한 솔루션이 아닙니다. 하지만 당신은 완전히 갇혀, 알려 주시기 바랍니다.
saveOrderAction()
다음 관찰자 메서드에서와 같이 응답 처리를 추가하여 컨트롤러 확장으로 가능합니다 .
@Anton Evers이므로 경로 내에서 어떤 파일을 변경해야하는지 알려주십시오. 감사