Bagaimana cara mengintegrasikan magento REST API dengan pihak ketiga?

9

Saya hanya mencoba mencari informasi tentang REST API. Ada beberapa contoh di sumber daya magento dan beberapa blog pribadi. Semua sama !!

Sebagai info dasar yang saya temukan jika saya ingin memperbarui produk melalui REST API saya perlu menggunakan titik akhir otorisasi admin. (/ admin / oauth_authorize) dan jika saya menggunakan pelanggan atau tamu saya hanya bisa mengambil data.

Saya mencoba membuat kode sampel dan memeriksa dan saya menemukan ketika saya menjalankan kode melalui browser saya harus login admin terlebih dahulu dan kemudian saya harus menerima akses dan kemudian saya dapat menggunakan sumber daya API.

Saya tidak tahu mengapa itu meminta saya untuk masuk admin terlebih dahulu. Dan jika saya harus masuk untuk mengaksesnya maka bagaimana ia akan bekerja secara internal antara server.

Saya mencoba membuat kode sampel menggunakan blog di bawah ini

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

dan itu berfungsi dengan baik dan memberikan respons juga.

Sebenarnya saya mencari bagaimana ini akan bekerja secara internal antara dua server dan bagaimana klien akan memanggil REST API ke magento bagaimana hal itu akan mengotentikasi dan bagaimana magento akan mengembalikan respons.

Mencari saran.

Akhilesh Patel
sumber
API REST dimaksudkan untuk akses OAuth, yaitu interaksi pengguna, jadi untuk kasus Anda, itu mungkin bukan pilihan yang tepat. Jika Anda tidak ingin menggunakan SOAP API, mungkin pertanyaan + jawaban ini membantu Anda: magento.stackexchange.com/questions/510/…
Fabian Schmengler

Jawaban:

6

Anda dapat menemukan penjelasan yang bagus tentang API REST Magento di sini . Ada juga contoh tentang cara mengambil produk sebagai pelanggan yang login. Saya akan mereproduksi di sini, untuk membuat jawabannya lebih lama.

<?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
sumber
Saya sudah menguji kode ini. ketika saya menggunakan $ adminAuthorizationUrl = ' magentohost / oauth / otorisasi ' itu mengarahkan saya terlebih dahulu ke login pelanggan dan ketika saya menggunakan $ adminAuthorizationUrl = ' magentohost / admin / oauth_authorize ' itu mengarahkan saya ke admin login terlebih dahulu dan kemudian saya perlu otentikasi dulu. bagaimana pihak ketiga dapat mengakses hal-hal ini. berarti Jika saya menetapkan satu cron dari pihak ketiga untuk melakukan pekerjaan ini seperti membuat produk baru atau memperbarui yang sudah ada, bagaimana cara mengautentikasi itu.
Akhilesh Patel
@Marius, apakah Anda tahu solusi apa pun untuk komentar OP terakhir untuk jawaban Anda? MENGGUNAKAN oAuth dan REST tanpa mengarahkan ulang dan mencatat proses
sergio
@sergio. Maaf, saya tidak
Marius
Saya cukup baru dalam bisnis oAuth ini, tetapi seperti yang saya pahami, intinya adalah untuk memaksa login interaktif. Pelanggan atau administrator situs web yang terdaftar perlu mengotorisasi aplikasi secara fisik. Jika Anda tidak menginginkannya, Anda dapat mencoba menggunakan peran "Tamu" yang saya yakin tidak memerlukan langkah oAuth (tidak mencoba ini sendiri); atau gunakan SOAP / XML-RPC API alih-alih REST.
Doug McLean
@DougMcLean atau Anda dapat menerapkan adaptor otentikasi kustom snowcore.net/magento-rest-without-oauth
Roman Snitko
2

Dari kode di atas, Anda dapat token dan token secret, cukup salin:

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

Jadi, Anda dapat menyiapkan kode seperti di bawah ini untuk membuat / mengedit produk:

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