Я разрабатывал расширение добавления продуктов в корзину на аяксе.
До сих пор остался не решенным такой баг.
Если на фронтенде используется HTTPS, то (в каталоге мы на http а в кастомер эреа https) при добавлении продуктов из виджета wishlist аякс запрос умирает.
Мы не можем аяксить с несекъюрного адреса на секъюрный.
Было принято решение аяксить на свой контроллер, контроллер курлом или зенд хттп клиентом будет передавать параметры на стандартный вишлист контроллер, забирать ответ и все будет хорошо. (на стандартный контроллер передавались параметры sid (нужен для авторизации пользователя), item)
Но на практике это не возможно. Запрос курлом замирал и никак не реагировал, так же было и с зендовским клиентом (с использованием различных адаптеров). Если вызывать запрос не через контроллер, а к примеру кроном, то все ок.
Т.е. получается код полностью рабочий, но тупо не хочет работать при вызове в контроллере.
В итоге пришлось скопипастить родной вишлист контроллер, все работает, но это не круто.
Может кто сталкивался с такой проблемой?
Немного дополнительной информации:
так выглядит стандартный линк добавления в корзину из виджета вишлист:
https://domain.com/index.php/wishlist/index/cart/item/1/uenc/aHR0cDovL29zdGFwY2hpay5sb2MvMTYxME5wc2xpZGVyL2luZGV4LnBocC9wZXJpcGhlcmFscy5odG1sP19fX3N0b3JlPWRlZmF1bHQ,/
модуль - wishlist
контроллер - indexController
акшн - cartAction
параметры:
item - id айтема в вишлисте
uenc - base64 ссылка
яваскриптом реврайтим линки на свой контроллер и получаем:
http://domain.com/index.php/mymodule/index/cart/item/1/uenc/aHR0cDovL29zdGFwY2hpay5sb2MvMTYxME5wc2xpZGVyL2luZGV4LnBocC9wZXJpcGhlcmFscy5odG1sP19fX3N0b3JlPWRlZmF1bHQ,/
в контроллере моего модуля:
public function cartAction() { $itemId = $this->getRequest()->getParam('item'); $uenc = $this->getRequest()->getParam('uenc'); $session = Mage::getModel('customer/session'); $sid = $session->getSessionId(); $url = "https://domain.com/index.php/wishlist/index/cart/item/{$itemId}/uenc/{$uenc}/SID/{$sid}"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_FAILONERROR, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $result = curl_exec($ch); curl_close($ch); var_dump($result); die; }
Настройки курла примерно такие как я написал. Исходный код я удалил, к сожалению.
В общем, если этот код вынести в метод модели и вызвать кроном, то все работало, но при вызове из контроллера - НЕТ.