तीसरे पक्ष के साथ Magento REST API को कैसे एकीकृत करें?


9

मैं सिर्फ REST API के बारे में जानकारी प्राप्त करने की कोशिश कर रहा था। Magento के संसाधन और कुछ निजी ब्लॉग पर कुछ उदाहरण हैं। सब साले एक जैसे हैं!!

बुनियादी जानकारी के रूप में मैंने पाया कि अगर मैं REST API के माध्यम से उत्पादों को अद्यतन करना चाहता हूं तो मुझे व्यवस्थापक प्राधिकरण समापन बिंदु का उपयोग करने की आवश्यकता है। (/ व्यवस्थापक / oauth_authorize) और अगर मैं ग्राहक या अतिथि का उपयोग करता हूं तो मैं केवल डेटा पुनर्प्राप्त कर सकता हूं।

मैंने नमूना कोड बनाने और जांचने की कोशिश की और मैंने पाया कि जब मैं ब्राउज़र के माध्यम से कोड चलाता हूं तो मुझे पहले लॉगिन व्यवस्थापक की आवश्यकता होती है और फिर मुझे एक्सेस स्वीकार करने की आवश्यकता होती है और फिर मैं एपीआई संसाधन का उपयोग कर सकता हूं।

मुझे नहीं पता कि यह मुझे पहले व्यवस्थापक में प्रवेश करने के लिए क्यों कह रहा है। और अगर मुझे इसे एक्सेस करने के लिए लॉगिन करना होगा तो यह सर्वर के बीच आंतरिक रूप से कैसे काम करेगा।

मैंने ब्लॉग के नीचे नमूना कोड बनाने की कोशिश की

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

और यह ठीक काम कर रहा है और प्रतिक्रिया भी दे रहा है।

वास्तव में मैं देख रहा हूं कि यह दो सर्वरों के बीच आंतरिक रूप से कैसे काम करेगा और क्लाइंट मैस्टेंटो को REST एपीआई कैसे कहेगा, यह कैसे प्रमाणित होगा और मैगेंटो कैसे प्रतिक्रिया देगा।

सलाह की तलाश में।


REST API OAuth एक्सेस यानी यूजर इंटरैक्शन के लिए है, इसलिए आपके मामले के लिए यह शायद सही विकल्प नहीं है। यदि आप SOAP API का उपयोग नहीं करना चाहते हैं, तो शायद यह प्रश्न + उत्तर आपकी मदद करता है: magento.stackexchange.com/questions/510/…
Fabian Schmengler

जवाबों:


6

आप यहाँ Magento REST API की अच्छी व्याख्या पा सकते हैं । ग्राहक में लॉग इन के रूप में उत्पादों को पुनः प्राप्त करने के तरीके पर एक उदाहरण भी है। मैं इसे यहां पुन: पेश करूंगा, ताकि उत्तर लंबा हो सके।

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

मैंने पहले ही इस कोड का परीक्षण कर लिया है। जब मैं $ adminAuthorizationUrl = ' magentohost / oauth / प्राधिकृत ' का उपयोग कर रहा हूं, तो यह मुझे पहले ग्राहक लॉगिन में रीडायरेक्ट कर रहा है और जब मैं $ adminAuthorizationUrl = ' magentohost ' का उपयोग कर रहा हूं / ' oauth_authorize ' यह मुझे पहले व्यवस्थापक लॉगिन पर रीडायरेक्ट कर रहा है और फिर मुझे इसकी आवश्यकता है पहले इसे प्रमाणित करें। तीसरा पक्ष इस चीजों तक कैसे पहुंच सकता है। मतलब अगर मैं इस काम को करने के लिए थर्ड पार्टी से एक क्रोन सेट कर रहा हूं जैसे कि नया प्रोडक्ट बनाना या मौजूदा को अपडेट करना यह कैसे प्रमाणित कर सकता है।
अखिलेश पटेल

@ मार्स, क्या आपके उत्तर के लिए अंतिम ओपी टिप्पणी के लिए कोई समाधान पता है? OAuth और REST का उपयोग बिना रीडायरेक्ट और लॉगिंग प्रॉसेस के
sergio

@sergio। क्षमा करें, मैं नहीं
मेरियस

मैं इस oAuth व्यवसाय के लिए काफी नया हूं, लेकिन जैसा कि मैं इसे समझता हूं, इसका पूरा बिंदु एक इंटरैक्टिव लॉगिन को मजबूर करना है। एक पंजीकृत वेबसाइट ग्राहक या व्यवस्थापक को शारीरिक रूप से एप्लिकेशन को अधिकृत करने की आवश्यकता है। यदि आप ऐसा नहीं चाहते हैं, तो आप "अतिथि" भूमिका का उपयोग करने की कोशिश कर सकते हैं, जो मुझे लगता है कि oAuth कदम की आवश्यकता नहीं है (यह खुद की कोशिश नहीं की गई है); या REST के बजाय SOAP / XML-RPC API का उपयोग करें।
डग मैकलीन

@DougMcLean या आप कस्टम प्रमाणीकरण एडॉप्टर snowcore.net/magento-rest-without-oauth
रोमन Snitko

2

उपरोक्त कोड से, आप टोकन और टोकन गुप्त ले सकते हैं, बस इसे कॉपी करें:

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

तो, आप उत्पाद बनाने / संपादित करने के लिए नीचे जैसा कोड तैयार कर सकते हैं:

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

?>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.