[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: OpenCart проблема с проверкой авторизации по API
g0tar
Всем привет!

Подключил магазин к сервису Робо.Маркет по 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?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.