Comment intégrer l'API REST magento avec un tiers?

9

J'essayais juste de trouver des informations sur l'API REST. Il y a quelques exemples sur magento resource et quelques blogs privés. Tous sont pareils !!

Comme information de base, j'ai trouvé que si je veux mettre à jour les produits via l'API REST, je dois utiliser le point de terminaison d'autorisation administrateur. (/ admin / oauth_authorize) et si j'utilise un client ou un invité, je peux simplement récupérer des données.

J'ai essayé de créer un exemple de code et de vérifier et j'ai trouvé que lorsque j'exécute du code via le navigateur, je dois d'abord me connecter à l'administrateur, puis je dois accepter l'accès et ensuite je peux utiliser les ressources de l'API.

Je ne sais pas pourquoi il me demande d'abord de me connecter à l'administrateur. Et si je dois me connecter pour y accéder, alors comment cela fonctionnerait en interne entre les serveurs.

J'ai essayé de créer un exemple de code en utilisant le blog ci-dessous

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

et cela fonctionne bien et donne également une réponse.

En fait, je cherche comment cela fonctionnera en interne entre deux serveurs et comment le client appellera l'API REST pour magento comment il serait authentifié et comment magento retournerait une réponse.

Vous cherchez des conseils.

Akhilesh Patel
la source
L'API REST est destinée à l'accès OAuth, c'est-à-dire à l'interaction utilisateur, donc pour votre cas, ce n'est probablement pas le bon choix. Si vous ne voulez pas utiliser l'API SOAP, peut-être que cette question + réponse vous aide: magento.stackexchange.com/questions/510/…
Fabian Schmengler

Réponses:

6

Vous pouvez trouver une bonne explication de l' API REST Magento ici . Il existe également un exemple sur la façon de récupérer les produits en tant que client connecté. Je vais le reproduire ici, pour allonger la réponse.

<?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
la source
J'ai déjà testé ce code. lorsque j'utilise $ adminAuthorizationUrl = ' magentohost / oauth / authorize ', il me redirige d'abord vers la connexion client et lorsque j'utilise $ adminAuthorizationUrl = ' magentohost / admin / oauth_authorize ', il me redirige d'abord vers la connexion administrateur, puis je dois d'abord authentifiez-le d'abord. comment un tiers peut accéder à ces choses. signifie que si je configure un cron d'un tiers pour faire ce travail, comme créer un nouveau produit ou mettre à jour un produit existant, comment peut-il l'authentifier.
Akhilesh Patel,
@Marius, connaissez-vous une solution pour le dernier commentaire OP à votre réponse? POUR utiliser oAuth et REST sans processus de redirection et de journalisation
sergio
@sergio. Désolé, je ne sais pas
Marius
Je suis assez nouveau dans cette entreprise oAuth, mais si je comprends bien, le but est de forcer une connexion interactive. Un client ou un administrateur de site Web enregistré doit autoriser physiquement l'application. Si vous ne le souhaitez pas, vous pouvez essayer d'utiliser le rôle "Invité" qui, je crois, ne nécessite pas l'étape oAuth (pas essayé moi-même); ou utilisez l'API SOAP / XML-RPC au lieu de REST.
Doug McLean
@DougMcLean ou vous pouvez implémenter un adaptateur d'authentification personnalisé snowcore.net/magento-rest-without-oauth
Roman Snitko
2

À partir du code ci-dessus, vous pouvez jeton et secret de jeton, copiez-le simplement:

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

Ainsi, vous pouvez préparer un code comme ci-dessous pour créer / modifier un produit:

<?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
la source