Magento REST API'sini üçüncü taraflarla nasıl entegre edebilirim?


9

Sadece REST API hakkında bilgi bulmaya çalışıyordum. Magento kaynağında bazı örnekler ve bazı özel bloglar var. Hepsi aynı !!

Temel bilgiler olarak ürünleri REST API ile güncellemek istersem, yönetici yetkilendirme bitiş noktası kullanmam gerekiyor. (/ admin / oauth_authorize) ve müşteri veya misafir kullanırsam sadece veri alabilirim.

Örnek kod ve kontrol oluşturmaya çalıştım ve tarayıcı aracılığıyla kod çalıştırdığımda buldum İlk giriş yöneticisine ihtiyacım var ve sonra erişimi kabul etmeliyim ve sonra API kaynağını kullanabilirim.

Neden önce yöneticiye giriş yapmamı istediğini bilmiyorum. Ve erişmek için giriş yapmam gerekiyorsa, sunucu arasında dahili olarak nasıl çalışacağını.

Aşağıdaki blogu kullanarak örnek kod oluşturmaya çalıştım

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

ve iyi çalışıyor ve aynı zamanda yanıt veriyor.

Aslında nasıl iki sunucu arasında dahili olarak çalışacağını ve istemci nasıl nasıl kimlik doğrulaması olacağını ve nasıl magento yanıt döneceğini magento REST API çağıracağını arıyorum.

Tavsiye arıyorum.


REST API, OAuth erişimi, yani kullanıcı etkileşimi içindir, bu nedenle sizin durumunuz için muhtemelen doğru seçim değildir. SOAP API'sını kullanmak istemiyorsanız, belki bu soru + cevap size yardımcı olur: magento.stackexchange.com/questions/510/…
Fabian Schmengler

Yanıtlar:


6

Magento REST API'sinin iyi bir açıklamasını burada bulabilirsiniz . Ayrıca, giriş yapmış bir müşteri olarak ürünlerin nasıl alınacağına dair bir örnek vardır. Cevabı daha uzun yapmak için burada çoğaltacağım.

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

Bu kodu zaten test ettim. $ adminAuthorizationUrl = ' magentohost / oauth / authorize ' kullandığımda ilk önce beni müşteri girişine yönlendiriyor ve $ adminAuthorizationUrl = ' magentohost / admin / oauth_authorize ' ilk önce yönetici girişine yönlendiriyor ve sonra önce kimlik doğrulaması yapın. üçüncü taraf bu şeylere nasıl erişebilir? Bu, yeni bir ürün oluşturmak veya mevcut olanı nasıl doğrulayabilir?
Akhilesh Patel

@Marius, cevabınıza son OP yorumu için herhangi bir çözüm biliyor musunuz? İşlemleri yeniden yönlendirmeden ve kaydetmeden oAuth ve REST'i kullanma
sergio

@sergio. Üzgünüz, bilmiyorum
Marius

Bu oAuth işinde oldukça yeniyim, ama anladığım kadarıyla, asıl mesele etkileşimli bir giriş yapmak. Kayıtlı bir web sitesi müşterisinin veya yöneticisinin uygulamayı fiziksel olarak yetkilendirmesi gerekir. Bunu istemiyorsanız, oAuth adımı gerektirmediğine inandığım "Konuk" rolünü kullanmayı deneyebilirsiniz (bunu kendim denemedim); veya REST yerine SOAP / XML-RPC API'sini kullanın.
Doug McLean

@DougMcLean veya özel kimlik doğrulama adaptörü snowcore.net/magento-rest-without-oauth
Roman

2

Yukarıdaki koddan, sırrı belirtebilir ve belirtebilirsiniz, sadece kopyalayın:

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

Böylece, bir ürün oluşturmak / düzenlemek için aşağıdaki gibi bir kod hazırlayabilirsiniz:

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

?>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.