我在創建新帳戶後讓客戶保持登錄狀態遇到了很多麻煩。我創建了一個帳戶,並從外部網站將產品添加到購物車,然後將它們發送到Magento商店。我想要發生的事情是:Magento - 客戶從外部頁面重定向後未登錄
- 客戶進入註冊頁面並輸入相關信息。
- 他們進入一個新頁面,他們可以選擇將免費樣品添加到購物車。
- 挑選樣品後。他們的賬戶被創建並且他們被重定向到Magento商店並在其購物車中放置了樣品。
我遇到的問題是步驟2和3。我創建使用Magento的SOAP API具有以下賬戶之間:
$customerInfo = array('firstname' => $custFirstname, 'lastname' => $custLastname, 'email' => $email, 'password_hash' => md5($new_password), 'store_id' => 34, 'website_id' => 25,'group_id' => 9);
// Call API method customer.create
$newCustomerId = $client->call($session, 'customer.create', array($customerInfo));
然後我回到自己的客戶ID,這是我傳給
public static function _addSamplesToCart($customer_id, $sample_one, $sample_two, $sample_three){
Mage::getSingleton("core/session", array("name" => "frontend"));
$customerSession = Mage::getSingleton('customer/session', array("name" => "frontend"));
$customerSession->init("customer_bn_us");
$customerSession->loginById($customer_id);
$cart = Mage::getSingleton('checkout/cart');
$cart->addProductsByIds($idArray);
$cart->save();
$cart->getCheckoutSession()->setCartWasUpdated(true);
}
這些功能實際上是從AJAX請求後調用,所以當我從_addSamplesToCart一個成功的返回值,我做了一個簡單的javascrip:實際上它們記錄,並增加產品到他們的購物車另一個功能t重定向(window.location =「http://www.myhostname.net/welcome」),它正確地把我帶到那裏,但我沒有登錄。
我一直在四處尋找並嘗試一些不同的事情,沒有任何工作。我也試着做一個隱藏的表單提交給/ customer/account/loginPost,但它仍然不起作用。我已經驗證它在Magento中正確創建帳戶。我唯一的直覺就是我正在用AJAX和PHP混合做這件事,所以不知怎的,cookies或會話混淆了?
感謝您的回覆。事情是,我不是來自不同的主機名。我在hostname.net/signup上有一個來自Magento的外部頁面,主要存儲位於hostname.net。但是,我做了一些挖掘cookie的工作,並且發現Magento客戶會話返回的會話ID與前端cookie不同。我假設我需要將前端Cookie設置爲與客戶會話具有相同的ID,對嗎? – Brandon 2011-05-12 15:48:52
不,我將前端cookie設置爲與客戶會話具有相同的會話ID,但它仍然不會將我作爲登錄。現在,在我返回到將AJAX重定向到/ welcome的AJAX調用之前,我設置了Cookie 。我已經驗證它也取代了以前的前端cookie。 – Brandon 2011-05-12 16:20:13
對不起所有的重複帖子,但我幾乎得到它的工作。我遵循了Fabrizio的建議,並開始使用登錄控制器。現在它成功登錄我,但現在我堅持要將產品添加到我的購物車。我環顧四周以正確的方式添加產品,而且我確信我做得對。在使用Mage :: log進行了一些挖掘之後,我將問題一直追溯到Sales_Model_Quote_Item的setQty()方法。這個方法調度一個事件似乎有問題:'Mage :: dispatchEvent('sales_quote_item_qty_set_after',array('item'=> $ this))' – Brandon 2011-05-12 23:22:38