magento REST API를 타사와 통합하는 방법은 무엇입니까?


9

REST API에 대한 정보를 찾으려고했습니다. magento 리소스 및 일부 개인 블로그에 몇 가지 예가 있습니다. 모두 동일합니다 !!

REST API를 통해 제품을 업데이트하려는 경우 기본 정보로 관리자 권한 끝점을 사용해야합니다. (/ admin / oauth_authorize) 고객 또는 게스트를 사용하는 경우 데이터를 검색 할 수 있습니다.

샘플 코드를 작성하고 확인하려고 시도했으며 브라우저를 통해 코드를 실행할 때 관리자를 먼저 로그인해야하고 액세스 권한을 수락해야하며 API 리소스를 사용할 수 있음을 알았습니다.

왜 먼저 관리자로 로그인하도록 요청하는지 모르겠습니다. 액세스하기 위해 로그인 해야하는 경우 서버간에 내부적으로 작동하는 방식.

아래 블로그를 사용하여 샘플 코드를 만들려고했습니다.

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

잘 작동하고 응답을 제공합니다.

실제로 두 서버 사이에서 내부적으로 작동하는 방법과 클라이언트가 REST API를 magento에 호출하여 인증 방법과 magento가 응답을 반환하는 방법을 찾고 있습니다.

조언을 찾고 있습니다.


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 / authorize '를 사용하면 고객 로그인으로 먼저 리디렉션되고 $ adminAuthorizationUrl = ' magentohost / admin / oauth_authorize '를 사용하면 먼저 관리자 로그인으로 리디렉션됩니다. 먼저 인증하십시오. 제 3자가 어떻게이 일에 액세스 할 수 있습니까? 의미 새로운 제품을 만들거나 기존 제품을 업데이트하는 방법과 같이이 작업을 수행하기 위해 타사에서 하나의 cron을 설정하는 경우 어떻게 인증 할 수 있습니까?
Akhilesh Patel

@Marius, 답변에 대한 마지막 OP 의견에 대한 해결책을 알고 있습니까? 프로세스 리디렉션 및 로깅없이 oAuth 및 REST를 사용하려면
sergio

@sergio. 죄송합니다, 난 몰라
마리우스

저는이 oAuth 비즈니스를 처음 접했지만 이해했지만 그 핵심은 대화식 로그인을 강제하는 것입니다. 등록 된 웹 사이트 고객 또는 관리자는 앱을 물리적으로 승인해야합니다. 이를 원하지 않으면 oAuth 단계가 필요하지 않다고 생각되는 "게스트"역할을 사용해보십시오 (이는 직접 시도하지 않음). 또는 REST 대신 SOAP / XML-RPC API를 사용하십시오.
Doug McLean

@DougMcLean 또는 사용자 정의 인증 어댑터를 구현할 수 있습니다 snowcore.net/magento-rest-without-oauth
Roman 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);
}

?>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.