Как интегрировать magento REST API с третьей стороной?

9

Я просто пытался найти информацию о REST API. Есть несколько примеров на ресурсе magento и несколько частных блогов. Все одинаковы !!

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

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

Я не знаю, почему он просит меня сначала войти в админку. И если мне нужно войти, чтобы получить к нему доступ, то как это будет работать внутри сервера.

Я попытался создать пример кода, используя ниже блог

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

и он работает нормально и дает ответ тоже.

На самом деле я ищу, как он будет работать внутри между двумя серверами и как клиент будет вызывать REST API для magento, как это будет аутентифицироваться и как magento будет возвращать ответ.

Ищу совет.

Ахилеш Патель
источник
REST API предназначен для доступа OAuth, то есть взаимодействия с пользователем, поэтому для вашего случая это, вероятно, не правильный выбор. Если вы не хотите использовать SOAP API, возможно, вам поможет этот вопрос + ответ: magento.stackexchange.com/questions/510/…
Фабиан Шменглер,

Ответы:

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 / authorize ', он перенаправляет меня сначала на вход клиента, а когда я использую $ adminAuthorizationUrl = ' magentohost / admin / oauth_authorize ', он перенаправляет меня на вход администратора, а затем мне нужно подтвердите это сначала. Как третья сторона может получить доступ к этим вещам. означает, что если я настраиваю один cron от третьей стороны для выполнения этой работы, например, для создания нового продукта или обновления существующего, как он может аутентифицировать его.
Ахилеш Патель
@Marius, знаете ли вы какое-нибудь решение для последнего комментария к вашему ответу? Чтобы использовать oAuth и REST без перенаправления и регистрации процессов
sergio
@sergio. Извините, я не
Мариус
Я довольно новичок в этом бизнесе oAuth, но, насколько я понимаю, весь смысл в том, чтобы заставить интерактивный вход в систему. Зарегистрированный пользователь сайта или администратор должен физически авторизовать приложение. Если вы не хотите этого, вы можете попробовать использовать роль «Гость», которая, я считаю, не требует шага oAuth (не пробовал это сам); или используйте API-интерфейс SOAP / XML-RPC вместо 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);
}

?>
iqbalmp
источник