¿Cómo integrar la API REST de magento con terceros?

9

Solo estaba tratando de encontrar información sobre la API REST. Hay algunos ejemplos en magento resource y algunos blogs privados. ¡Todos son iguales!

Como información básica que encontré si quiero actualizar productos a través de REST API, necesito usar el punto final de autorización de administrador. (/ admin / oauth_authorize) y si uso un cliente o invitado, puedo recuperar datos.

Intenté crear un código de muestra y verificar y descubrí que cuando ejecuto el código a través del navegador, primero necesito iniciar sesión como administrador y luego tengo que aceptar el acceso y luego puedo usar el recurso API.

No sé por qué me pide que inicie sesión en admin primero. Y si necesito iniciar sesión para acceder, entonces cómo funcionaría internamente entre el servidor.

Traté de crear un código de muestra usando el blog de abajo

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

y está funcionando bien y dando respuesta también.

En realidad, estoy buscando cómo funcionará internamente entre dos servidores y cómo el cliente llamará a REST API para magento cómo se autenticaría y cómo magento devolvería la respuesta.

Buscando consejo.

Akhilesh Patel
fuente
La API REST está diseñada para el acceso a OAuth, es decir, la interacción del usuario, por lo que para su caso probablemente no sea la opción correcta. Si no desea utilizar la API SOAP, tal vez esta pregunta + respuesta lo ayude: magento.stackexchange.com/questions/510/…
Fabian Schmengler

Respuestas:

6

Puede encontrar una buena explicación de la API REST de Magento aquí . También hay un ejemplo sobre cómo recuperar los productos como un cliente conectado. Lo reproduciré aquí, para que la respuesta sea más larga.

<?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
fuente
Ya probé este código. cuando estoy usando $ adminAuthorizationUrl = ' magentohost / oauth / authorize ' me está redirigiendo primero al inicio de sesión del cliente y cuando estoy usando $ adminAuthorizationUrl = ' magentohost / admin / oauth_authorize ' me está redirigiendo a inicio de sesión de administrador primero y luego necesito autenticarlo primero. ¿Cómo puede un tercero acceder a estas cosas? significa que si estoy configurando un cron de un tercero para hacer este trabajo, como crear un nuevo producto o actualizar uno existente, ¿cómo puede autenticarlo?
Akhilesh Patel
@ Mario, ¿conoces alguna solución para el último comentario de OP a tu respuesta? PARA usar oAuth y REST sin redireccionar y registrar procesos
sergio
@sergio. Lo siento, no
Marius
Soy bastante nuevo en este negocio de oAuth, pero según tengo entendido, el objetivo es forzar un inicio de sesión interactivo. Un cliente o administrador de un sitio web registrado debe autorizar físicamente la aplicación. Si no quiere eso, puede intentar usar el rol "Invitado", que creo que no requiere el paso oAuth (no lo intenté yo mismo); o use la API SOAP / XML-RPC en lugar de REST.
Doug McLean
@DougMcLean o puede implementar un adaptador de autenticación personalizado snowcore.net/magento-rest-without-oauth
Roman Snitko
2

Desde el código anterior, puede usar token y token secret, solo cópielo:

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

Por lo tanto, puede preparar un código como el siguiente para crear / editar un producto:

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