2017-10-06 17 views
0

Magento-1.xのワンクリックチェックアウトを実装しようとしましたが、私のチェックアウトを使用すると、購入後に出荷方法が選択されていないという問題があります。Magentoワンクリックチェックアウト

ここに私のチェックアウトコントローラのコードがあります。

<?php 


    class MCP_Debitapi_CheckoutController extends Mage_Core_Controller_Front_Action 
    { 
     public function oneClickAction() 
     { 

      /** 
      * @var Mage_Catalog_Model_Product $product 
      */ 
      $options = []; 

      $product = Mage::getModel('catalog/product')->load((int)$_POST['product']); 
      /** 
      * create a cart to work with 
      * @var Mage_Checkout_Model_Cart $cart 
      */ 
      $cart = Mage::getModel('checkout/cart'); 
      $cart->addProduct($product,$options); 
      $cart->save(); 
      /** 
      * @var Mage_Checkout_Model_Type_Onepage $checkout 
      */ 
      $checkout = Mage::getSingleton('checkout/type_onepage'); 
      $checkout->getQuote()->clearInstance(); 
      $checkout->initCheckout(); 
      /** 
      * @var Mage_Customer_Helper_Data $customerHelper 
      */ 
      $customerHelper = Mage::helper('customer'); 
      $billingAddress = $customerHelper->getCustomer()->getDefaultBillingAddress(); 
      $shippingAddress = $customerHelper->getCustomer()->getDefaultShippingAddress(); 
      if(!$billingAddress) { 
       Mage::throwException('cannot create one-click order without default billing address'); 
       return false; 
      } 

      $checkout->getQuote()->getBillingAddress()->importCustomerAddress($billingAddress)->setSaveInAddressBook(false); 
      $checkout->getQuote()->getShippingAddress()->importCustomerAddress($shippingAddress)->setSaveInAddressBook(false); 
      $checkout->getQuote()->getShippingAddress()->setShippingDescription('Fixed')->save(); 
      $checkout->getQuote()->getShippingAddress()->setCollectShippingRates(true); 
      $checkout->saveShippingMethod('flatrate_flatrate'); 
      $checkout->savePayment(array('method'=>'mcpdebitapi')); 
      $checkout->getQuote()->collectTotals(); 
      $checkout->saveOrder(); 
      $cart->truncate(); 
      $cart->save(); 
      $cart->getItems()->clear()->save(); 
      $checkout->getQuote()->setIsActive(false)->save(); 
      $this->_redirect('checkout/onepage/success',array('_secure'=>true)); 
     } 

    } 

正しい配送方法を見つけて設定するにはどうすればよいですか?

答えて

0

アドレスの代わりにチェックアウトオブジェクトに配送方法を直接追加しようとしているようです。

試してみてください:

$checkout->getQuote()->getShippingAddress()->setShippingMethod('flatrate_flatrate'); 
$checkout->saveShippingMethod('flatrate_flatrate'); 

の代わり:

$checkout->saveShippingMethod('flatrate_flatrate'); 

はそれがあなたのお役に立てば幸いです:)

+0

こんにちは、私はそれをしようと試みたが、同じ結果を得ました。私はより良い理解のために例外を追加します: –

0
Please specify a shipping method. 

    Trace: 
    #0 /srv/www/shops/magento-1.9.3.4/app/code/core/Mage/Sales/Model/Service/Quote.php(303): Mage::throwException('Please specify ...') 
    #1 /srv/www/shops/magento-1.9.3.4/app/code/core/Mage/Sales/Model/Service/Quote.php(222): Mage_Sales_Model_Service_Quote->_validate() 
    #2 /srv/www/shops/magento-1.9.3.4/app/code/core/Mage/Sales/Model/Service/Quote.php(238): Mage_Sales_Model_Service_Quote->submitNominalItems() 
    #3 /srv/www/shops/magento-1.9.3.4/app/code/core/Mage/Checkout/Model/Type/Onepage.php(815): Mage_Sales_Model_Service_Quote->submitAll() 
    #4 /srv/www/shops/magento-1.9.3.4/app/code/local/MCP/Debitapi/controllers/CheckoutController.php(47): Mage_Checkout_Model_Type_Onepage->saveOrder() 
    #5 /srv/www/shops/magento-1.9.3.4/app/code/core/Mage/Core/Controller/Varien/Action.php(418): MCP_Debitapi_CheckoutController->oneClickAction() 
    #6 /srv/www/shops/magento-1.9.3.4/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(254): Mage_Core_Controller_Varien_Action->dispatch('oneClick') 
    #7 /srv/www/shops/magento-1.9.3.4/app/code/core/Mage/Core/Controller/Varien/Front.php(172): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http)) 
    #8 /srv/www/shops/magento-1.9.3.4/app/code/core/Mage/Core/Model/App.php(365): Mage_Core_Controller_Varien_Front->dispatch() 
    #9 /srv/www/shops/magento-1.9.3.4/app/Mage.php(683): Mage_Core_Model_App->run(Array) 
    #10 /srv/www/shops/magento-1.9.3.4/index.php(83): Mage::run('', 'store') 
    #11 {main}