การเพิ่มขั้นตอนในการชำระเงินแบบหน้าเดียว


18

มีส่วนขยายใด ๆ โมดูล Magento แบบโอเพนซอร์สหรือแบบฝึกหัดที่ช่วยเพิ่มขั้นตอนในการชำระเงินแบบหน้าเดียวได้ง่ายขึ้นหรือไม่ ฉันแหย่ที่รหัสหลักสำหรับสองสามครั้งนี้และดูเหมือนว่ามีข้อมูลขั้นตอนที่เข้ารหัสยากจำนวนมาก


5
น่าเสียดายที่รหัส Checkout ดูเหมือนจะไม่ยืดหยุ่นมากข้อมูลจำนวนมากถูก hardcoded จากเทมเพลตไปยังไฟล์ accordion javascript
Allan MacGregor

1
ฉันได้ทำตามบทช่วยสอนนี้และสามารถเพิ่มขั้นตอนใหม่ในการชำระเงินแบบหน้าเว็บได้ อย่างไรก็ตามไฟล์หลักจำนวนมากจะต้องถูกแทนที่เพื่อให้บรรลุขั้นตอนนี้ หวังว่าสิ่งนี้จะมีประโยชน์เป็นเลิศโดย
magentoblog.com/magento-onestep-checkout-add-step

คำตอบ:


6

คำตอบสั้น ๆ สำหรับคำถามนี้จบลงด้วยการเป็น "ไม่" จากระดับสูงการเพิ่มขั้นตอนการชำระเงินใหม่หมายถึง

  1. การเพิ่มบล็อกใหม่ในหน้าเช็คเอาต์แบบขั้นตอนเดียว

  2. มีบล็อกที่ลงทะเบียนตัวเองเป็นขั้นตอน

  3. เชื่อมต่อบล็อกนั้นกับวัตถุต้นแบบที่จัดการการโต้ตอบทั้งหมด

  4. เขียนใหม่วิธีการวีโอไอพีหลักหลายประการเพื่อแทรกบล็อกเป็นขั้นตอน

  5. อาแจ็กซ์ใช้กลอุบายเพื่อให้การทำงานก้าวหน้า

การครอบคลุมทั้งหมดนี้อยู่นอกเหนือขอบเขตของคำถาม Stack Overflow เดียว กวดวิชาเชื่อมโยงในอีกคำถามที่มีจำนวนมากของสิ่งที่คุณจะต้องมีและผมยังได้สร้างส่วนขยายการค้าใหม่ที่จะทำให้ทุกนี้ง่ายขึ้น


4

โดยปกติแล้ววีโอไอพีจะมีขั้นตอนการชำระเงิน แต่บางครั้งคุณต้องเพิ่มข้อมูลเพิ่มเติมจากลูกค้าเพื่อใช้อ้างอิงในอนาคต การปรับแต่งที่ร้องขอร่วมกันคือการเพิ่มฟอร์มที่กำหนดเองในกระบวนการเช็คเอาต์เริ่มต้น นี่ไม่ใช่แนวปฏิบัติที่ดีในการแตะไฟล์หลัก คุณสามารถทำได้ผ่านโมดูลที่เอาชนะ ในตัวอย่างนี้ Comapnyname คือIpragmatechและชื่อโมดูลคือCheckoutstep Checkoutstep

ขั้นที่ 1: เพิ่มขั้นตอนที่กำหนดเองในกระบวนการชำระเงิน

เปิด Ipragmatech> Checkoutstep> Block> Onepage> ไฟล์ Checkoutstep.php และเขียนรหัสต่อไปนี้

    class Ipragmatech_Checkoutstep_Block_Onepage_Checkoutstep extends Mage_Checkout_Block_Onepage_Abstract
    {
       protected function _construct()
       {     
          $this->getCheckout()->setStepData('checkoutstep', array(
          'label'     => Mage::helper('checkout')->__('Invitation to participation'),
          'is_show'   => true
        ));
        parent::_construct();
       }
     }

ขั้นตอนที่ 2: เพิ่มขั้นตอนที่คุณต้องการในกระบวนการเช็คเอาต์

เปิด Ipragmatech> Checkoutstep> Block> Onepage> ไฟล์ Checkoutstep.php และเขียนรหัสต่อไปนี้

    class Ipragmatech_Checkoutstep_Block_Onepage extends Mage_Checkout_Block_Onepage
    {
      public function getSteps()
      {
             $steps = array();

             if (!$this->isCustomerLoggedIn()) {
                $steps['login'] = $this->getCheckout()->getStepData('login');
             }

            $stepCodes = array('billing', 'shipping', 'shipping_method', 'payment', 'checkoutstep', 'review');
         foreach ($stepCodes as $step) {
             $steps[$step] = $this->getCheckout()->getStepData($step);
          }

    return $steps;
   }
}

ขั้นตอนที่ 3: หยิบค่าที่ส่งมาของแบบฟอร์มที่กำหนดเองและตั้งค่าของแบบฟอร์มที่กำหนดเอง

เปิด ipragmatech> Checkoutstep> controllers> OnepageController.php และเขียน fucntion ต่อไปนี้

    public function saveCheckoutstepAction()
    {
      $this->_expireAjax();
      if ($this->getRequest()->isPost()) {

     //Grab the submited value 
     $_entrant_name = $this->getRequest()->getPost('entrant_name',"");
     $_entrant_phone = $this->getRequest()->getPost('entrant_phone',"");
     $_entrant_email = $this->getRequest()->getPost('entrant_email',"");
     $_permanent_address = $this->getRequest() ->getPost('permanent_address',"");
     $_address = $this->getRequest()->getPost('local_address',"");

     Mage::getSingleton('core/session') ->setIpragmatechCheckoutstep(serialize(array(
    'entrant_name' =>$_entrant_name,
    'entrant_phone' =>$_entrant_phone,
    'entrant_email' =>$_entrant_email,
    'permanent_address' =>$_permanent_address,
    'address' =>$_address
     )));

    $result = array();
    $redirectUrl = $this->getOnePage()->getQuote()->getPayment() ->getCheckoutRedirectUrl();
        if (!$redirectUrl) {
            $this->loadLayout('checkout_onepage_review');
            $result['goto_section'] = 'review';
            $result['update_section'] = array(
                'name' => 'review',
                'html' => $this->_getReviewHtml()
            );

        }

        if ($redirectUrl) {
            $result['redirect'] = $redirectUrl;
        }

        $this->getResponse()->setBody(Zend_Json::encode($result));
    }
}

ขั้นตอนที่ 4: บันทึกข้อมูลแบบฟอร์มที่กำหนดเอง

เมื่อ checkout_onepage_controller_success_action เบ็ดเหตุการณ์ที่เรียกว่า เปิด Ipragmatech> Checkoutstep> Model> Observer.php และเขียนสิ่งต่อไปนี้

    class Ipragmatech_Checkoutstep_Model_Observer {
      const ORDER_ATTRIBUTE_FHC_ID = 'checkoutstep';
      public function hookToOrderSaveEvent() {
      if (Mage::helper('checkoutstep')->isEnabled()) {
         $order = new Mage_Sales_Model_Order ();
         $incrementId = Mage::getSingleton ( 'checkout/session' )->getLastRealOrderId ();
         $order->loadByIncrementId ( $incrementId );

       // Fetch the data 
       $_checkoutstep_data = null;
       $_checkoutstep_data = Mage::getSingleton ( 'core/session' )->getIpragmatechCheckoutstep ();
       $model = Mage::getModel ( 'checkoutstep/customerdata' )->setData ( unserialize ( $_checkoutstep_data ) );
       $model->setData ( "order_id",$order["entity_id"] );
       try {
           $insertId = $model->save ()->getId ();
             Mage::log ( "Data successfully inserted. Insert ID: " . $insertId, null, 'mylog.log');
        } catch ( Exception $e ) {
            Mage::log ( "EXCEPTION " . $e->getMessage (), null, 'mylog.log' );
          }
        }
    }

}

Magento - เพิ่มแบบฟอร์มที่กำหนดเองในส่วนขยายการชำระเงินเป็นโซลูชั่นที่สมบูรณ์เพื่อเพิ่มขั้นตอนพิเศษในกระบวนการชำระเงินสำหรับเว็บไซต์อีคอมเมิร์ซของคุณ อนุญาตให้ผู้ดูแลระบบส่งออกข้อมูลจากตารางที่กำหนดเองในรูปแบบ CSV

เยี่ยมชมลิงค์เพื่อรับส่วนขยายฟรีhttp://www.magentocommerce.com/magento-connect/custom-form-in-checkout.html


0

ใช่มีการสอนที่ดีเกี่ยวกับเรื่องนี้ที่นี่ " http://excellencemagentoblog.com/magento-onestep-checkout-add-step "


4
คุณควรอธิบายสิ่งที่พบในตอนท้ายของ URL นั้นเล็กน้อย คำตอบลิงก์เดียวไม่ใช่คำตอบที่ดีที่สุด
Marius

url เองพูดว่า magento-onestep-checkout-step-step และนี่คือคำถามที่ถาม
Dhanpat Saran

5
ฉันเห็นด้วยกับคุณคำอธิบายในการเชื่อมโยงนั้นยอดเยี่ยม แต่ลองดูว่าคำตอบควรอยู่ในเว็บไซต์ SO: meta.stackexchange.com/a/8259/224252และนี้: magento.stackexchange.com/help/how -to-answer
Marius
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.