Como integrar a API REST do magento a terceiros?

9

Eu estava apenas tentando encontrar informações sobre a API REST. Existem alguns exemplos no recurso magento e alguns blogs particulares. Todos são iguais !!

Como informações básicas, descobri que, se eu quiser atualizar produtos por meio da API REST, preciso usar o terminal de autorização de administrador. (/ admin / oauth_authorize) e, se eu usar cliente ou convidado, posso recuperar os dados.

Tentei criar código de amostra e verifiquei que, quando executo o código pelo navegador, primeiro preciso fazer login no admin e, em seguida, aceitar o acesso e usar o recurso da API.

Não sei por que está me pedindo para fazer login no admin primeiro. E se eu precisar fazer login para acessá-lo, como funcionaria internamente entre o servidor.

Eu tentei criar código de exemplo usando o blog abaixo

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

e está funcionando bem e dando resposta também.

Na verdade, estou procurando como ele funcionará internamente entre dois servidores e como o cliente chamará a API REST para magento como seria autenticado e como o magento retornaria resposta.

Procurando conselhos.

Akhilesh Patel
fonte
A API REST destina-se ao acesso OAuth, ou seja, interação do usuário, portanto, para o seu caso, provavelmente não é a escolha certa. Se você não quiser usar a API SOAP, talvez esta pergunta + resposta ajuda você: magento.stackexchange.com/questions/510/...
Fabian Schmengler

Respostas:

6

Você pode encontrar uma boa explicação da API REST Magento aqui . Há também um exemplo de como recuperar os produtos como um cliente conectado. Vou reproduzi-lo aqui, para prolongar a resposta.

<?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);
}
Marius
fonte
Eu já testei esse código. quando estou usando $ adminAuthorizationUrl = ' magentohost / oauth / authorize ', ele está me redirecionando primeiro para o login do cliente e quando estou usando $ adminAuthorizationUrl = ' magentohost / admin / oauth_authorize ', ele está me redirecionando para o login do administrador e, em seguida, preciso autenticá-lo primeiro. como terceiros podem acessar essas coisas. significa Se estou configurando um cron de terceiros para fazer esse trabalho, como criar um novo produto ou atualizar um existente, como ele pode ser autenticado.
Akhilesh Patel
@ Marius, conhece alguma solução para o último comentário do OP à sua resposta? Para usar oAuth e REST sem redirecionar e registrar processos
sergio
@sergio. Desculpe, eu não
Marius
Sou bastante novo nesse negócio de oAuth, mas, pelo que entendi, o objetivo é forçar um login interativo. Um cliente ou administrador de site registrado precisa autorizar fisicamente o aplicativo. Se você não quiser isso, tente usar a função "Convidado", que acredito não exigir a etapa oAuth (não tentei isso sozinha); ou use a API SOAP / XML-RPC em vez de REST.
Doug McLean
@DougMcLean ou você pode implementar costume adaptador de autenticação snowcore.net/magento-rest-without-oauth
Roman Snitko
2

No código acima, você pode usar token e token secret, basta copiá-lo:

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

Portanto, você pode preparar um código como abaixo para criar / editar um produto:

<?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
fonte