2013-04-11 4 views
0

Я пытаюсь интегрировать систему с Magento, я бы хотел, чтобы отправить код купона, текущий пользователь и корзину Magento и получить соответствующую скидку (если применимо), поэтому мне не нужно реплицировать всю логику валидации купона.Magento программно получает скидку, предоставляя код купона и продукты

Я был бы очень признателен.

Мне удалось сделать следующее.

$customerId = 1; 
    $couponCode = "TESTCOUPON"; 
    $json = "{ 
       \"cart\":[{ 
        \"listProduct\":[{ 
         \"idReferenceProduct\":15, 
         \"quantity\":1 
        }] 
       }] 
      }"; 
    $jsonDecoded = json_decode($json); 
    $products = $jsonDecoded->cart[0]->listProduct; 

    // ********************************************************* 

    $customerObj = Mage::getModel('customer/customer')->load($customerId); 
    $storeId = $customerObj->getStoreId(); 
    $quoteObj = Mage::getModel('sales/quote')->assignCustomer($customerObj); 
    $storeObj = $quoteObj->getStore()->load($storeId); 
    $quoteObj->setStore($storeObj); 

    foreach ($products as $singleProduct) { 

     $productObj = Mage::getModel('catalog/product'); 
     $productObj->load($singleProduct->idReferenceProduct); 
     echo $productObj->getName(); 
     echo $productObj->getPrice(); 

     try{ 
      $quoteItem = $quoteObj->addProduct($productObj); 
      $quoteItem->setPrice($productObj->getPrice()); 
      $quoteItem->setQty($singleProduct->quantity); 
      $quoteItem->setQuote($quoteObj);          
      $quoteObj->addItem($quoteItem); 

     } catch (exception $e) { 
      echo "error creating quote item "; 
     } 

     $singleProduct->quantity); 
    } 

    try{ 
     $quoteObj->setCouponCode($couponCode); 
    } 
    catch(exception $e){ 
     return "error setting coupon"; 
    } 

    $quoteObj->collectTotals(); 

    var_dump($quoteObj->toArray()); 

И выход:

{ 
["customer_id"] = > "1" 
["customer_prefix"] = > NULL 
["customer_firstname"] = > "xxxxxx" 
["customer_middlename"] = > NULL 
["customer_lastname"] = > "xxxxxxx" 
["customer_suffix"] = > NULL 
["customer_email"] = > "[email protected]" 
["customer_dob"] = > "1981-03-06 00:00:00" 
["customer_taxvat"] = > NULL 
["customer_gender"] = > "1" 
["customer_group_id"] = > "1" 
["customer_tax_class_id"] = > "3" 
["store_id"] = > "1" 
["coupon_code"] = > "TESTCOUPON" 
["subtotal"] = > float(872.06) 
["base_subtotal"] = > float(872.06) 
["subtotal_with_discount"] = > float(830.92) 
["base_subtotal_with_discount"] = > float(830.92) 
["grand_total"] = > float(929.64) 
["base_grand_total"] = > float(929.64) 
["applied_rule_ids"] = > "1" 
["virtual_items_qty"] = > int(0) 
["taxes_for_items"] = > { 
    [""] = > { 
     [0] = > { 
      ["rates"] = > { 
       [0] = > { 
        ["code"] = > "IVA" 
        ["title"] = > "IVA" 
        ["percent"] = > float(12) 
        ["position"] = > "1" 
        ["priority"] = > "1" 
        ["rule_id"] = > "1" 
       } 
      }["percent"] = > float(12) 
      ["id"] = > "IVA" 
     } 
    } 
}["items_count"] = > int(2) 
["items_qty"] = > float(2) 
["trigger_recollect"] = > int(0) 
["can_apply_msrp"] = > bool(false) 
["totals_collected_flag"] = > bool(true) 
} 

купона скидка должна быть скидка 5%.

По некоторым причинам, указанные цены не являются точными. Эта цена продукта составляет 516,00, а промежуточная сумма в выходных состояниях - 872,06. Также есть только один элемент, а на выходе - 2 элемента. Я делаю что-то неправильно?

+0

Вы можете уточнить свое требование? На самом деле я не понимаю. – MagentoDiary

+0

Короче, мне нужно создать метод, который получает код купона, корзину и клиента и возвращает сумму скидки – jonathanwiesel

ответ

0

Глупый мне, кажется, я добавлял продукты в цитату неправильным образом. Так оно и работает сейчас:

 $quoteItem = Mage::getModel('sales/quote_item'); 
     $quoteItem->setProduct($productObj); 
     $quoteItem->setPrice($productObj->getPrice()); 
     $quoteItem->setQty($singleProduct->quantity); 
     $quoteItem->setQuote($quoteObj);          
     $quoteObj->addItem($quoteItem); 
+0

У меня тоже есть эта ситуация, и я придумал аналогичную реализацию, как ваша. Мои сценарии также возвращают grand_total цитаты. Однако есть проблема с подобной техникой. У меня есть коды купонов, которые действительны только для 1 «Использовать на клиента». Итак, когда я запускаю свой скрипт, купон израсходован и больше не будет доступен для конкретного пользователя. Мое приложение работает, сначала вызвав этот вышеупомянутый скрипт. Показывает общую сумму для пользователя, а затем вызывает другой скрипт, который фактически размещает заказ. У вас есть идеи, как решить эту проблему? – RHLK