2011-05-11 119 views
0

我在創建新帳戶後讓客戶保持登錄狀態遇到了很多麻煩。我創建了一個帳戶,並從外部網站將產品添加到購物車,然後將它們發送到Magento商店。我想要發生的事情是:Magento - 客戶從外部頁面重定向後未登錄

  1. 客戶進入註冊頁面並輸入相關信息。
  2. 他們進入一個新頁面,他們可以選擇將免費樣品添加到購物車。
  3. 挑選樣品後。他們的賬戶被創建並且他們被重定向到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或會話混淆了?

回答

0

如果您嘗試從與Magento商店使用的主機名不同的主機名登錄,則它無法工作。您可以通過檢查在AJAX調用之後是否創建前端cookie來驗證此情況。

我建議你創建在Magento接收剛剛創建的用戶的ID和執行你在你的函數寫的代碼一個新的控制器:

www.myhostname.net/autologin/myaction/13(其中13是剛剛創建的客戶的ID)。

顯然你應該添加別的東西來避免安全問題。

+0

感謝您的回覆。事情是,我不是來自不同的主機名。我在hostname.net/signup上有一個來自Magento的外部頁面,主要存儲位於hostname.net。但是,我做了一些挖掘cookie的工作,並且發現Magento客戶會話返回的會話ID與前端cookie不同。我假設我需要將前端Cookie設置爲與客戶會話具有相同的ID,對嗎? – Brandon 2011-05-12 15:48:52

+0

不,我將前端cookie設置爲與客戶會話具有相同的會話ID,但它仍然不會將我作爲登錄。現在,在我返回到將AJAX重定向到/ welcome的AJAX調用之前,我設置了Cookie 。我已經驗證它也取代了以前的前端cookie。 – Brandon 2011-05-12 16:20:13

+0

對不起所有的重複帖子,但我幾乎得到它的工作。我遵循了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