это немного назад, но я думаю, что я наконец-то сделал это, используя смесь полу-знаний и проб и ошибок; о) Кроме этого, я не собираюсь использовать это решение, но полностью интегрирую magento в свой рабочий стол.Приложение без перенаправления пользователя в браузер.
Но вернемся 2 Тема: Было несколько моментов, касающихся magento core-кода, который явно немного глючит, по крайней мере, с помощью API веб-сервиса.
Во-первых, при создании новой корзины покупок для пользователя эта корзина не помечается как активная.В 'app / code / core / checkout / model / cart / Api.php' у вас есть следующий фрагмент кода, который, очевидно, создает новую корзину:
public function create($store = null)
{
$storeId = $this->_getStoreId($store);
try {
/*@var $quote Mage_Sales_Model_Quote*/
$quote = Mage::getModel('sales/quote');
//Changed is active to true in order to activate the cart when created
/*$quote->setStoreId($storeId)
->setIsActive(false)
->setIsMultiShipping(false)
->save();*/
$quote->setStoreId($storeId)
->setIsActive(true)
->setIsMultiShipping(false)
->save();
} catch (Mage_Core_Exception $e) {
$this->_fault('create_quote_fault', $e->getMessage());
}
return (int) $quote->getId();
}
Код комментария является оригиналом, и это устанавливаетShoppingCart false по умолчанию, что приводит (для меня), что я не мог его использовать.Это одна из частей решения, которое сработало для меня.Вторая часть касается моего пользовательского модуля веб-сервиса, расширяющего magento-webservice-api:
public function getSession($customerID)
{
require_once("app/Mage.php");
Mage::app ();
umask(0);
$webSites = Mage::app()->getWebsites();
$code = $webSites[1]->getCode();
$session = Mage::getSingleton("customer/session"); // This initiates the PHP session
// The following line is the trick here. You simulate that you
// entered Magento through a website (instead of the API) so if you log in your user
// his info will be stored in the customer_your_website scope
$session->init('customer_' . $code);
$bool = $session->loginById($customerID); // Just logging in some example user
return session_id(); // this holds your session id
}
Приведенный выше фрагмент кода имитирует запись через обычный процесс входа в систему на magento-веб-сайте.Здесь я инициализирую сеанс, используя код основного веб-сайта / идентификатор моего магазина ($ webSites [1] -> getCode ();), и регистрирую пользователя, используя customerID.После этого я возвращаю sessionId к моему Desktop-приложению.Когда пользователь теперь хочет купить выбранные им вещи (которые были добавлены таким же образом, как я упоминал в вопросе), он нажимает кнопку и перенаправляется в браузер на небольшой php-скрипт, который выглядит следующим образом:
<?php
// Make sure you match the cookie path magento is setting
setcookie('frontend', $_GET['session'], 0, '/');
//echo $_GET['session'];
header('Location: http://yourdomain.com/magento/checkout/cart');
?>
Соответствующая строка вызова / запроса выглядит следующим образом:
http://yourdomain.com/setCookie.php?session="+sessionId
'+ sessionId' представляет идентификатор сеанса, который я получил от веб-службы.Все, что я здесь делаю - это устанавливаю куки для пользователя и перенаправляю его в свою корзину, вот и все.Пользователь должен войти в систему и увидеть продукты, которые он выбрал.Одна важная вещь - вы должны установить правильный каталог, в котором magento хранит свои куки ('/' выше).
Ну, на самом деле я хотел дать вам кучу ссылок на очень информативные веб-сайты, которые мне очень помогают в этом раздражающем процессе, но stackoverflow не допускает более двух гиперссылок и, к сожалению, это две выше в моемкод ... извините.
Я надеюсь, что смогу вам немного помочь.Свяжитесь со мной или напишите здесь, если у вас есть дополнительные вопросы, возможно, я могу помочь вам.: о)
С наилучшими пожеланиями, Ян