ฉันต้องการคำสั่งซื้อที่ต้องดำเนินการหลังจากขั้นตอนวิธีการชำระเงินโดยไม่ข้ามReview
ขั้นตอนในการชำระเงินแบบ Onepage
มีใครบ้างที่เคยมีประสบการณ์กับสิ่งนี้หรือใครสามารถชี้ให้ฉันในทิศทางที่ถูกต้องเกี่ยวกับวิธีการทำเช่นนี้?
ขอบคุณ
ฉันต้องการคำสั่งซื้อที่ต้องดำเนินการหลังจากขั้นตอนวิธีการชำระเงินโดยไม่ข้ามReview
ขั้นตอนในการชำระเงินแบบ Onepage
มีใครบ้างที่เคยมีประสบการณ์กับสิ่งนี้หรือใครสามารถชี้ให้ฉันในทิศทางที่ถูกต้องเกี่ยวกับวิธีการทำเช่นนี้?
ขอบคุณ
คำตอบ:
สำหรับคนที่คุณต้องเขียน 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 เพื่อให้คน shure ไม่สามารถโพสต์แบบฟอร์มการสั่งซื้อสองครั้ง ฯลฯ ...
นี่เป็นเพียงการชี้คุณไปในทิศทางที่ถูกต้อง มันไม่ได้เป็นโซลูชั่นที่สมบูรณ์เพราะการใช้งานที่แน่นอนนั้นขึ้นอยู่กับความต้องการของลูกค้าของคุณแน่นอนและฉันไม่ต้องการปล้นความสนุกในการค้นหารายละเอียดของโซลูชันด้วยตัวคุณเอง แต่คุณติดค้างอยู่โดยสิ้นเชิงโปรดแจ้งให้เราทราบ
saveOrderAction()
แล้วเพิ่มการจัดการการตอบสนองเช่นเดียวกับในวิธีการสังเกตการณ์ของคุณ
วิธีสร้างผู้สังเกตการณ์เหตุการณ์ของคุณ:
<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 ดังนั้นโปรดแจ้งให้เราทราบว่าฉันต้องเปลี่ยนไฟล์ใดในพา ธ ขอบคุณ