2013-11-20 4 views
2

В настоящее время я изучаю создание мобильного приложения, которое интегрируется с магазином Magento, и им удалось получить много аспектов его работы с использованием SOAP API, например, для извлечения продуктов и категорий.Аутентификация клиента Magento SOAP?

Теперь я ищу решение проблемы, когда мне нужно, чтобы пользователь мобильного приложения заходил в систему с помощью своих данных для входа в систему Magento, однако, просматривая API SOAP, нет способа для входа в систему фактического пользователя?

Кто-нибудь знает, как я могу выполнить эту задачу.

Благодаря

+0

SOAP API не подходит для этого. Представьте себе дыру в безопасности, если клиент, зарегистрировавшийся в вашем мобильном приложении, смог управлять продуктами, заказами и платежами с использованием учетных данных. Гораздо безопаснее создавать мобильный мобильный отзывчивый магазин magento, а не приложение, использующее медленный API. – Ashley

+0

Привет, Эшли Я бы не согласился с этим, особенно если приложение iPhone Native было запрограммировано только на определенные вызовы API. Я не вижу, как это будет проблемой. Для этого приложения, хотя мы создаем сервер типа реле, будет добавлен уровень безопасности, и до сих пор приложение работает очень быстро с включенным кэшированием. – MonkeyBlue

+0

Запустите SOAP-запросы через прокси-сервер, например, charles. У вас есть ваши учетные данные API для всех, кто сделает SOAP-запросы на ваш сервер и администрирует ваши ресурсы и заказы. Ваш пример ниже не SOAP, он возвращает объект JSON. Magento не поддерживает это по какой-либо причине, API предназначен для управления бэкэнд, а не для интерфейса. У вашего приложения есть пользователь API, а не пользователь. Собираетесь ли вы создавать нового пользователя API для каждого клиента, я думаю, что нет. Пришлите мне свое приложение для телефона, я уточню некоторые цены на продукцию! – Ashley

ответ

9

На самом деле его довольно легко проверить подлинность клиента в вашем случае. Ответ SOAP-информации клиента дает нам пароль_hash пользователя, зарегистрированного в Magento. Этот хэш представляет собой хеш-файл md5, который может быть аутентифицирован с использованием пароля, который пользователь вводит вместе с его электронной почтой в вашей системе. У меня есть пример кода ниже, надеюсь, это поможет любому, кто ищет этот ответ.

$complexFilter = array(
    'complex_filter' => array(
     array(
      'key' => 'email', 
      'value' => array('key' => 'eq', 'value' => '[email protected]') 
     ) 
    ) 
); 
$result = $proxy->customerCustomerList($sessionId, $complexFilter); 

var_dump($result); 

/** 
* Validate hash against hashing method (with or without salt) 
* 
* @param string $password 
* @param string $hash 
* @return bool 
*/ 
function validateHash($password, $hash) 
{ 
    $hashArr = explode(':', $hash); 

    switch (count($hashArr)) { 
     case 1: 
      return md5($password) === $hash; 
     case 2: 
      return md5($hashArr[1] . $password) === $hashArr[0]; 
    } 
} 

var_dump(validateHash('asdfgh',$result[0]->password_hash)); 
+0

Спасибо за то, что Vivek, вы бы порекомендовали это, расширив API, который я сейчас обсуждаю, расширяя API, чтобы выставлять определенные функции в мобильное приложение, которое я собираюсь сделать, поскольку в настоящее время я нахожу SOAP-запросы намного медленнее. – MonkeyBlue

+0

Запросы SOAP могут быть медленными, а служебные данные дополнительных бит символов передаются из файла XML. Но даже если вы его продлеваете? Расширяете ли вы REST API для magento или SOAP? Как будто вы расширяете SOAP, накладные расходы все еще существуют. Кроме того, вышеуказанный метод позволяет работать в рамках самого пурпурного мыла api, поэтому вам не нужно беспокоиться об обновлениях и других конфликтах расширения. –

+0

Как аутентифицировать пользователя в Magento2? – MagePsycho

0

После нескольких проб и ошибок и дополнительных исследований мне удалось придумать с этим решением, которое теперь позволяет мне для аутентификации пользователя и пароля в Magento.

Это связано с созданием PHP-скрипта, который я загрузил на веб-сайт Magento в настоящее время в качестве доказательства концепции, но я добавлю дополнительную безопасность, такую ​​как уникальный хеш-ключ, который мобильный телефон отправляет с запросом через SSL, конечно и это вместе с именем пользователя и паролем будет проверяться и получать сеанс Magento.

<?php 
header('Content-Type: application/json'); 

// Get Post Vars 
$username = addslashes($_REQUEST['username']); 
$password = addslashes($_REQUEST['password']); 

if ($username == "") { 
    echo json_encode(array('error','Access Denied')); 
    die(); 
} 

if ($password == "") { 
    echo json_encode(array('error','Access Denied')); 
    die(); 
} 

// Mage Path 
require_once(dirname(__FILE__).'/app/Mage.php'); 

// Initialize Magento ... 
Mage::app("default"); 

$id = 1; // The Store ID. 
$session = Mage::getSingleton('customer/session'); 

$status = true; 
try { 
    $session->login($username, $password); 
    $session->setCustomerAsLoggedIn($session->getCustomer()); 
}catch (Exception $e) { 
    $status = false; 
} 

if ($status == true) { 
    $userID = Mage::getSingleton('customer/session')->getId(); 
    echo json_encode(array('status' => 1, 'userID' => $userID)); 
} else { 
    echo json_encode(array('status' => 0, 'message' => 'Access Denied')); 
} 

?>

Смежные вопросы