ฉันจะลบขั้นตอนการตรวจสอบในการชำระเงิน Onepage ได้อย่างไร


12

ฉันต้องการคำสั่งซื้อที่ต้องดำเนินการหลังจากขั้นตอนวิธีการชำระเงินโดยไม่ข้ามReviewขั้นตอนในการชำระเงินแบบ Onepage

มีใครบ้างที่เคยมีประสบการณ์กับสิ่งนี้หรือใครสามารถชี้ให้ฉันในทิศทางที่ถูกต้องเกี่ยวกับวิธีการทำเช่นนี้?

ขอบคุณ


2
FYI: นี่เป็นสิ่งผิดกฎหมายในประเทศที่เข้ามา
user487772

ฉันเปลี่ยนขั้นตอนการตรวจสอบเพื่อให้เป็นการชำระเงินเพื่อให้ผู้ใช้สามารถตรวจสอบและทำการชำระเงินในเฟสเดียว แนวคิดบางอย่างที่จะเปลี่ยนกระบวนการทำงานนี้?
Eduardo Luz

ฉันพบนี้จะเป็นคำอธิบายที่ดีงามของกระบวนการ: excellencemagentoblog.com/...
ryaan_anthony

คำตอบ:


9

สำหรับคนที่คุณต้องเขียน 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 ไม่สามารถโพสต์แบบฟอร์มการสั่งซื้อสองครั้ง ฯลฯ ...

นี่เป็นเพียงการชี้คุณไปในทิศทางที่ถูกต้อง มันไม่ได้เป็นโซลูชั่นที่สมบูรณ์เพราะการใช้งานที่แน่นอนนั้นขึ้นอยู่กับความต้องการของลูกค้าของคุณแน่นอนและฉันไม่ต้องการปล้นความสนุกในการค้นหารายละเอียดของโซลูชันด้วยตัวคุณเอง แต่คุณติดค้างอยู่โดยสิ้นเชิงโปรดแจ้งให้เราทราบ


วิธีสร้าง obeserver
Akshay Taru

คุณช่วยแก้ไขโพสต์เพื่อสร้างผู้สังเกตการณ์ได้ไหม
Akshay Taru

เขียนดี - เป็นไปได้ด้วยส่วนขยายตัวควบคุมโดยการรีเฟรชแบบฟอร์มคีย์ก่อนที่คุณจะโทรsaveOrderAction()แล้วเพิ่มการจัดการการตอบสนองเช่นเดียวกับในวิธีการสังเกตการณ์ของคุณ
Robbie Averill

0

วิธีสร้างผู้สังเกตการณ์เหตุการณ์ของคุณ:

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


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.