magento REST API를 타사와 통합하는 방법은 무엇입니까? 및 일부 개인 블로그에 몇 가지 예가

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가 응답을 반환하는 방법을 찾고 있습니다.

조언을 찾고 있습니다.



답변

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

답변

위의 코드에서 토큰과 토큰 비밀을 복사 할 수 있습니다.

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

?>