Як інтегрувати API magento REST з третьою стороною?


9

Я просто намагався знайти інформацію про REST API. На ресурсі magento та приватних блогах є приклади. Всі однакові !!

В якості основної інформації я виявив, що якщо я хочу оновити продукти через API REST, мені потрібно використовувати кінцеву точку авторизації адміністратора. (/ admin / oauth_authorize), і якщо я використовую клієнта чи гостя, я можу просто отримати дані.

Я спробував створити зразок коду та перевірити, і коли я запустив код через браузер, мені потрібно спершу ввійти адміністратор, а потім мені потрібно прийняти доступ, а потім я можу використовувати API-ресурс.

Я не знаю, чому він просить спершу увійти до адміністратора. І якщо мені потрібно буде увійти, щоб отримати доступ до нього, то як він буде працювати внутрішньо між сервером.

Я спробував створити зразок коду за допомогою блогу нижче

http://inchoo.net/ecommerce/magento/consuming-magento-rest-zend_oauth_consumer/comment-page-1/#comment-66775

і це добре працює і дає відповідь також.

Насправді я шукаю, як вона буде працювати внутрішньо між двома серверами і як клієнт буде викликати API REST до magento, як це було б аутентифікувати і як магенто поверне відповідь.

Шукаю поради.


API REST призначений для доступу до OAuth, тобто взаємодії з користувачем, тому для вашого випадку це, мабуть, не правильний вибір. Якщо ви не хочете використовувати SOAP API, можливо, це питання + відповідь допоможе вам: magento.stackexchange.com/questions/510/…
Fabian Schmengler

Відповіді:


6

Тут ви можете знайти хороше пояснення Magento REST API . Також є приклад того, як отримати продукти як зареєстрований клієнт. Я відтворять її тут, щоб відповісти довше.

<?php
/**
 * Example of products list retrieve using Customer account via Magento REST API. OAuth authorization is used
 */
$callbackUrl = "http://yourhost/oauth_customer.php";
$temporaryCredentialsRequestUrl = "http://magentohost/oauth/initiate?oauth_callback=" . urlencode($callbackUrl);
$adminAuthorizationUrl = 'http://magentohost/oauth/authorize';
$accessTokenRequestUrl = 'http://magentohost/oauth/token';
$apiUrl = 'http://magentohost/api/rest';
$consumerKey = 'yourconsumerkey';
$consumerSecret = 'yourconsumersecret';

session_start();
if (!isset($_GET['oauth_token']) && isset($_SESSION['state']) && $_SESSION['state'] == 1) {
    $_SESSION['state'] = 0;
}
try {
    $authType = ($_SESSION['state'] == 2) ? OAUTH_AUTH_TYPE_AUTHORIZATION : OAUTH_AUTH_TYPE_URI;
    $oauthClient = new OAuth($consumerKey, $consumerSecret, OAUTH_SIG_METHOD_HMACSHA1, $authType);
    $oauthClient->enableDebug();

    if (!isset($_GET['oauth_token']) && !$_SESSION['state']) {
        $requestToken = $oauthClient->getRequestToken($temporaryCredentialsRequestUrl);
        $_SESSION['secret'] = $requestToken['oauth_token_secret'];
        $_SESSION['state'] = 1;
        header('Location: ' . $adminAuthorizationUrl . '?oauth_token=' . $requestToken['oauth_token']);
        exit;
    } else if ($_SESSION['state'] == 1) {
        $oauthClient->setToken($_GET['oauth_token'], $_SESSION['secret']);
        $accessToken = $oauthClient->getAccessToken($accessTokenRequestUrl);
        $_SESSION['state'] = 2;
        $_SESSION['token'] = $accessToken['oauth_token'];
        $_SESSION['secret'] = $accessToken['oauth_token_secret'];
        header('Location: ' . $callbackUrl);
        exit;
    } else {
        $oauthClient->setToken($_SESSION['token'], $_SESSION['secret']);
        $resourceUrl = "$apiUrl/products";
        $oauthClient->fetch($resourceUrl);
        $productsList = json_decode($oauthClient->getLastResponse());
        print_r($productsList);
    }
} catch (OAuthException $e) {
    print_r($e);
}

Я вже перевірив цей код. коли я використовую $ adminAuthorizationUrl = ' magentohost / oauth / autize ', він перенаправляє мене спочатку до входу клієнта, а коли я використовую $ adminAuthorizationUrl = ' magentohost / admin / oauth_authorize ', він перенаправляє мене на вхід адміністратора, а потім мені потрібно спершу засвідчіть автентифікацію. як третя сторона може отримати доступ до цих речей. означає, що якщо я встановлюю один крон від третьої сторони, щоб виконувати цю роботу, як створити новий продукт або оновити існуючий, як можна його автентифікувати.
Ахілеш Патель

@Marius, чи знаєш ти рішення для останнього коментаря ОП до вашої відповіді? Щоб використовувати oAuth та REST без перенаправлення та реєстрації процедур
sergio

@sergio. Вибачте, я не
Маріус

Я досить новачок у цьому бізнесі oAuth, але, як я його розумію, вся справа в тому, щоб змусити інтерактивний логін. Зареєстрований клієнт або адміністратор веб-сайту повинні фізично авторизувати додаток. Якщо ви цього не хочете, ви можете спробувати скористатися роллю "Гість", яка, на мою думку, не вимагає кроку oAuth (не спробував цього сам); або використовувати SOAP / XML-RPC API замість REST.
Дуг Маклін

@DougMcLean або ви можете впровадити спеціальний адаптер аутентифікації snowcore.net/magento-rest-without-oauth
Роман Снітко

2

З наведеного вище коду ви можете позначати та маркувати секрет, просто скопіюйте його:

...........
echo 'token:---'.$_SESSION['token'].'----secret----'.$_SESSION['secret'];
........

Отже, ви можете підготувати код, як показано нижче, для створення / редагування продукту:

<?php
$apiUrl = 'APIURL';
$consumerKey = 'CONSUMERKEY';
$consumerSecret = 'CONSUMERSECRED';
$token = 'TOCKEN';
$tokensecret = 'TOKENSCRET';

try {

    $oauthClient = new OAuth($consumerKey, $consumerSecret, OAUTH_SIG_METHOD_HMACSHA1);
    $oauthClient->setToken($token, $tokensecret);
    $oauthClient->enableDebug();          

    $productData = json_encode(array(           
            'name'              => 'TEST PRODUCT',           
            'price'             => 11.11          
        ));       

    $resourceUrl = "$apiUrl/products/222";
    $oauthClient->fetch($resourceUrl, $productData , 'PUT',  array('Content-Type' => 'application/json'));
    $responseArr = json_decode($oauthClient->getLastResponse());
    print_r($responseArr);

} catch (OAuthException $e) {
    print_r($e);
}

?>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.