Come integrare l'API REST magento con terze parti?


9

Stavo solo cercando di trovare informazioni sull'API REST. Ci sono alcuni esempi di risorse magento e alcuni blog privati. Sono tutti uguali !!

Come informazioni di base ho scoperto che se volevo aggiornare i prodotti tramite l'API REST ho bisogno di usare l'endpoint di autorizzazione dell'amministratore. (/ admin / oauth_authorize) e se uso un cliente o un ospite posso semplicemente recuperare i dati.

Ho provato a creare un codice di esempio e verificare e ho scoperto che quando eseguo il codice tramite il browser devo prima accedere all'amministratore e quindi devo accettare l'accesso e quindi posso usare la risorsa API.

Non so perché mi chieda di accedere prima in admin. E se devo accedere per accedervi, allora come funzionerebbe internamente tra i server.

Ho provato a creare un codice di esempio utilizzando il blog di seguito

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

e funziona bene e dà anche risposta.

In realtà sto cercando come funzionerà internamente tra due server e come il client chiamerà l'API REST per magento come sarebbe autenticato e come magento restituirebbe una risposta.

In cerca di consigli.


L'API REST è pensata per l'accesso OAuth, ovvero l'interazione dell'utente, quindi nel tuo caso probabilmente non è la scelta giusta. Se non vuoi usare l'API SOAP, forse questa domanda + risposta ti aiuta: magento.stackexchange.com/questions/510/…
Fabian Schmengler

Risposte:


6

Puoi trovare una buona spiegazione dell'API REST di Magento qui . C'è anche un esempio su come recuperare i prodotti come cliente registrato. La riprodurrò qui, per allungare la risposta.

<?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);
}

Ho già testato questo codice. quando sto usando $ adminAuthorizationUrl = ' magentohost / oauth / autorize ' mi sta reindirizzando prima all'accesso del cliente e quando sto usando $ adminAuthorizationUrl = ' magentohost / admin / oauth_authorize ' mi sta reindirizzando per accedere prima all'amministratore e quindi devo autenticarlo per primo. come possono terze parti accedere a queste cose. significa che se sto impostando un cron da terze parti per fare questo lavoro come creare un nuovo prodotto o aggiornare uno esistente come può autenticarlo.
Akhilesh Patel,

@Marius, conosci qualche soluzione per l'ultimo commento OP alla tua risposta? PER usare oAuth e REST senza reindirizzare e registrare i procces
sergio

@Sergio. Scusa, non lo so
Marius

Sono abbastanza nuovo per questo business oAuth, ma a quanto ho capito, il punto è quello di forzare un accesso interattivo. Un cliente o amministratore di un sito Web registrato deve autorizzare fisicamente l'app. Se non lo desideri, puoi provare a utilizzare il ruolo "Ospite" che credo non richieda il passaggio oAuth (non ho provato questo da solo); oppure utilizzare l'API SOAP / XML-RPC anziché REST.
Doug McLean,

@DougMcLean oppure puoi implementare l'adattatore di autenticazione personalizzato snowcore.net/magento-rest-without-oauth
Roman Snitko

2

Dal codice sopra, puoi token e token secret, basta copiarlo:

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

Quindi, puoi preparare un codice come di seguito per creare / modificare un prodotto:

<?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);
}

?>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.