Подключил магазин к сервису Робо.Маркет по API (Ссылка)
В принципе все работает за исключением одной незначительной мелочи. Но так хотелось бы сделать ее рабочей (если такое возможно).
Итак, когда мы подходим к отправке запроса после успешной оплаты товара на Робо.Маркете на сайт отправляется запрос "PurchaseRequest" Ссылка на документацию
И в теле ответа на данный запрос я хотел бы проверить, а авторизован ли пользователь на моем сайте под управлением OpenCart.
Если нет, идет проверка есть ли пользователь с таким же E-mail, который покупатель указал при покупке товара в Робо.Маркет.
Если E-mailа нет - я регистрирую пользователя на сайте и отправляю данные для входа: E-mail и сгенерированный пароль на данную почту.
Так вот стандартный метод $this->customer->isLogged(); в данном случае не отрабатывает как надо. Т.е. даже если я вначале зайду на сайт магазина, авторизуюсь, потом перейду в Робо.Маркет и совершу покупку мой скрипт один хрен не видит эту авторизацию.
Ниже прилагаю отрывки кода Контроллера и Модели моего модуля.
PS: В качествен URL процессинга использую данную ссылку: http://site.ru/index.php?route=extension/market/rm_request (т.е. вызываю метод Rm_request)
Controller:
public function rm_request() {
$postData = file_get_contents('php://input');
$data = json_decode($postData, true);
$robomarket_data = (array)$this->config->get('robomarket_data');
$secret = $robomarket_data['secret'];
$requests = array_keys($data['Robomarket']);
$this->load->model('extension/module/robomarket');
switch($requests[0]) {
case 'PurchaseRequest' :
$orderId = $data['Robomarket']['PurchaseRequest']['OrderId']; // ID заказа в Робо.Маркете
$name = explode(' ',$data['Robomarket']['PurchaseRequest']['Customer']['Name']); // Имя покупателя
$email = $data['Robomarket']['PurchaseRequest']['Customer']['Email']; // E-mail покупателя
$phone = $data['Robomarket']['PurchaseRequest']['Customer']['Phone']; // Телефон
$checkCustomerExist = $this->model_extension_module_robomarket->checkCustomerExist($email);
if ($checkCustomerExist) {
$getCustomerData = $this->model_extension_module_robomarket->getCustomerData($email);
}
else {
$data = array(
'customer_group_id' => (int)$this->config->get('config_customer_group_id'),
'store_id' => (int)$this->config->get('config_store_id'),
'language_id' => (int)$this->config->get('config_language_id'),
'firstname' => $name[0],
'lastname' => $name[1] ? $name[1] : '',
'email' => $email,
'telephone' => $phone,
'password' => substr(md5(strrev($email)),5,15),
'ip' => $_SERVER['REMOTE_ADDR']
);
$customer_id = $this->model_extension_module_robomarket->addCustomer($data); // регистрация и получение ID нового покупателя
$getCustomerData = $data;
$getCustomerData['customer_id'] = $customer_id;
}
/* КОД ..... КОД */
break;
/* КОД ..... КОД */
}
$document = json_encode($response);
$robosignature = strtoupper(md5(mb_convert_encoding($document.$secret, "UTF-8")));
header("Content-type: application/json;charset=utf8");
header("RoboSignature: ".$robosignature);
echo $document;
}
Модель:
public function checkCustomerExist($email) {
$checkCustomer = $this->db->query("SELECT customer_id FROM `" . DB_PREFIX . "customer` WHERE email = '" . $email . "'");
if ($checkCustomer->num_rows) {
return TRUE;
}
return FALSE;
}
}
Исходя из предоставленных данных у меня получается проверить лишь наличие полученного E-mail из запроса в БД.
$email = $data['Robomarket']['PurchaseRequest']['Customer']['Email']; // E-mail покупателя
$checkCustomerExist = $this->model_extension_module_robomarket->checkCustomerExist($email);
Но никак не получается проверить авторизован ли пользователь или нет.
Судя по всему это своеобразная защита OpenCart авторизации.
Потому как авторизации в OpenCart хранится в сессии. Но эта сессия при каждой обновлении страницы перезаписывается + идут какие-то там проверки и если все ОК, тогда в сессию попадают еще и данные авторизованного пользователя.
Еще я понял, что данную проблему можно решить через API самого OpenCartа.
Подскажите, кто в курсе, реально ли решить мою проблему без всяких API, использую базовые методы OpenCart?