Wie kann ich die magento REST API in Dritte integrieren?

9

Ich habe nur versucht, Informationen über die REST-API zu finden. Es gibt einige Beispiele bei magento resource und einige private Blogs. Alle sind gleich !!

Als grundlegende Informationen habe ich festgestellt, dass ich den Endpunkt für die Administratorautorisierung verwenden muss, wenn ich Produkte über die REST-API aktualisieren möchte. (/ admin / oauth_authorize) und wenn ich einen Kunden oder Gast benutze, kann ich einfach Daten abrufen.

Ich habe versucht, Beispielcode zu erstellen und zu überprüfen, und festgestellt, dass ich beim Ausführen von Code über den Browser zuerst den Administrator anmelden und dann den Zugriff akzeptieren muss, um dann die API-Ressource verwenden zu können.

Ich weiß nicht, warum ich mich zuerst bei admin anmelden muss. Und wenn ich mich anmelden muss, um darauf zuzugreifen, wie es intern zwischen den Servern funktionieren würde.

Ich habe versucht, Beispielcode mit dem folgenden Blog zu erstellen

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

und es funktioniert gut und gibt auch Antwort.

Eigentlich suche ich, wie es intern zwischen zwei Servern funktioniert und wie der Client die REST-API an magento aufruft, wie es authentifiziert wird und wie magento eine Antwort zurückgibt.

Auf der Suche nach Rat.

Akhilesh Patel
quelle
Die REST-API ist für den OAuth-Zugriff gedacht, dh für die Benutzerinteraktion. In Ihrem Fall ist sie daher wahrscheinlich nicht die richtige Wahl. Wenn Sie die SOAP-API nicht verwenden möchten, hilft Ihnen möglicherweise diese Frage + Antwort: magento.stackexchange.com/questions/510/…
Fabian Schmengler

Antworten:

6

Eine gute Erklärung der Magento REST-API finden Sie hier . Es gibt auch ein Beispiel, wie Sie die Produkte als angemeldeter Kunde abrufen können. Ich werde es hier wiedergeben, um die Antwort länger zu machen.

<?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
quelle
Ich habe diesen Code bereits getestet. Wenn ich $ adminAuthorizationUrl = ' magentohost / oauth / authorize ' verwende, werde ich zuerst zum Kunden-Login weitergeleitet. Wenn ich $ adminAuthorizationUrl = ' magentohost / admin / oauth_authorize ' verwende, werde ich zuerst zum Admin-Login umgeleitet, und dann muss ich authentifizieren Sie es zuerst. Wie kann ein Dritter auf diese Dinge zugreifen? bedeutet, wenn ich einen Cron von einem Drittanbieter für diese Aufgabe einstelle, z. B. ein neues Produkt erstellen oder ein vorhandenes aktualisieren, wie kann es authentifiziert werden?
Akhilesh Patel
@Marius, kennen Sie eine Lösung für den letzten OP-Kommentar zu Ihrer Antwort? Um oAuth und REST zu verwenden, ohne Prozesse umzuleiten und zu protokollieren
sergio
@ergio. Entschuldigung, ich nicht
Marius
Ich bin ziemlich neu in diesem oAuth-Geschäft, aber so wie ich es verstehe, geht es darum, ein interaktives Login zu erzwingen. Ein registrierter Website-Kunde oder Administrator muss die App physisch autorisieren. Wenn Sie das nicht möchten, können Sie versuchen, die Rolle "Gast" zu verwenden, für die meines Erachtens der oAuth-Schritt nicht erforderlich ist (ich habe dies nicht selbst versucht). oder verwenden Sie die SOAP / XML-RPC-API anstelle von REST.
Doug McLean
@DougMcLean oder Sie können benutzerdefinierten Authentifizierungsadapter snowcore.net/magento-rest-without-oauth
Roman Snitko
2

Aus dem obigen Code können Sie Token und Token Secret erstellen. Kopieren Sie sie einfach:

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

So können Sie einen Code wie unten vorbereiten, um ein Produkt zu erstellen / bearbeiten:

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