Làm cách nào để tích hợp API REST magento với bên thứ ba?


9

Tôi chỉ cố gắng tìm thông tin về API REST. Có một số ví dụ tại tài nguyên magento và một số blog riêng. Tất cả đều giống nhau !!

Như thông tin cơ bản tôi đã tìm thấy nếu tôi muốn cập nhật sản phẩm thông qua API REST, tôi cần sử dụng điểm cuối ủy quyền quản trị viên. (/ admin / oauth_ Authorize) và nếu tôi sử dụng khách hàng hoặc khách, tôi chỉ có thể truy xuất dữ liệu.

Tôi đã thử tạo mã mẫu và kiểm tra và tôi thấy khi chạy mã qua trình duyệt, trước tiên tôi cần đăng nhập quản trị viên và sau đó tôi cần chấp nhận quyền truy cập và sau đó tôi có thể sử dụng tài nguyên API.

Tôi không biết tại sao nó lại yêu cầu tôi đăng nhập vào quản trị viên trước. Và nếu tôi phải đăng nhập để truy cập nó thì nó sẽ hoạt động như thế nào giữa các máy chủ.

Tôi đã cố gắng tạo mã mẫu bằng cách sử dụng blog bên dưới

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

và nó đang hoạt động tốt và cũng đưa ra phản hồi.

Trên thực tế tôi đang tìm kiếm cách nó sẽ hoạt động nội bộ giữa hai máy chủ và cách máy khách sẽ gọi API REST đến magento như thế nào để xác thực và magento sẽ trả lời như thế nào.

Tìm kiếm lời khuyên.


API REST có nghĩa là để truy cập OAuth, tức là tương tác người dùng, vì vậy đối với trường hợp của bạn, đây có lẽ không phải là lựa chọn đúng đắn. Nếu bạn không muốn sử dụng API SOAP, có thể câu hỏi + câu trả lời này sẽ giúp bạn: magento.stackexchange.com/questions/510/ Kẻ
Fabian Schmengler

Câu trả lời:


6

Bạn có thể tìm thấy một lời giải thích tốt về API Magento REST tại đây . Ngoài ra còn có một ví dụ về cách lấy lại các sản phẩm như một khách hàng đã đăng nhập. Tôi sẽ sao chép nó ở đây, để làm cho câu trả lời dài hơn.

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

Tôi đã thử mã này. Khi tôi đang sử dụng $ adminAuthorizationUrl = ' magentohost / oauth / ủy quyền ' thì trước tiên tôi sẽ chuyển hướng đến đăng nhập của khách hàng và khi tôi đang sử dụng $ adminAuthorizationUrl = ' magentohost / admin / oauth_ Authorize ' thì trước tiên tôi sẽ chuyển hướng cho tôi. xác thực nó trước. Làm thế nào bên thứ ba có thể truy cập những thứ này. có nghĩa là nếu tôi đang đặt một cron từ bên thứ ba để thực hiện công việc này như tạo sản phẩm mới hoặc cập nhật sản phẩm hiện có thì làm cách nào để xác thực nó.
Akhilesh Patel

@Marius, bạn có biết giải pháp nào cho bình luận cuối cùng của OP cho câu trả lời của bạn không? ĐỂ sử dụng oAuth và REST mà không cần chuyển hướng và ghi nhật ký
sergio

@sergio. Xin lỗi, tôi không
Marius

Tôi còn khá mới mẻ với doanh nghiệp oAuth này, nhưng theo tôi hiểu, toàn bộ vấn đề của nó là buộc đăng nhập tương tác. Một khách hàng hoặc quản trị viên trang web đã đăng ký cần phải ủy quyền về mặt vật lý cho ứng dụng. Nếu bạn không muốn điều đó, bạn có thể thử sử dụng vai trò "Khách" mà tôi tin rằng không yêu cầu bước oAuth (không tự mình thử điều này); hoặc sử dụng API SOAP / XML-RPC thay vì REST.
Doug McLean

@DougMcLean hoặc bạn có thể triển khai bộ điều hợp xác thực tùy chỉnh snowcore.net/magento-rest-without-oauth
Roman Snitko

2

Từ đoạn mã trên, bạn có thể mã thông báo và mã thông báo, chỉ cần sao chép nó:

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

Vì vậy, bạn có thể chuẩn bị một mã như dưới đây để tạo / chỉnh sửa sản phẩm:

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

?>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.