magento REST APIをサードパーティと統合するにはどうすればよいですか?


9

REST APIに関する情報を探していました。magentoリソースといくつかのプライベートブログにいくつかの例があります。すべて同じです!!

REST APIを使用して製品を更新する場合に基本的な情報として、管理者承認エンドポイントを使用する必要があります。(/ admin / oauth_authorize)そして、私が顧客またはゲストを使用する場合、データを取得することができます。

サンプルコードを作成して確認しようとしましたが、ブラウザーからコードを実行すると、最初にadminにログインし、次にアクセスを受け入れて、APIリソースを使用できることがわかりました。

最初にadminにログインするように求められる理由がわかりません。そして、それにアクセスするためにログインする必要がある場合、サーバー間で内部的にどのように機能しますか。

以下のブログを利用してサンプルコードを作成してみました

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

そして、それはうまく機能し、応答も与えています。

実際、2つのサーバー間で内部的にどのように機能するか、クライアントがREST APIを呼び出してmagentoに認証する方法とmagentoが応答を返す方法を探しています。

アドバイスを探しています。


REST APIはOAuthアクセス、つまりユーザー操作を目的としているため、あなたの場合はおそらく正しい選択ではありません。あなたがSOAP APIを使用したくない場合は、多分この質問+回答は、次のことに役立ちます。magento.stackexchange.com/questions/510/...
ファビアン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 'を使用すると、最初に管理者ログインにリダイレクトされ、次に最初に認証します。サードパーティがこれにどのようにアクセスできるか。つまり、新しい製品の作成や既存の製品の更新など、このジョブを実行するようにサードパーティから1つのcronを設定する場合、それを認証するにはどうすればよいですか。
Akhilesh Patel 2014

@マリウス、あなたの答えに対する最後のOPコメントの解決策を知っていますか?プロセスをリダイレクトおよびロギングせずにoAuthおよびRESTを使用するには
sergio

@sergio。申し訳ありません、私はしません
マリウス

私はこのoAuthビジネスにかなり慣れていませんが、私が理解しているように、対話型のログインを強制することが全体のポイントです。登録済みのWebサイトの顧客または管理者は、アプリを物理的に承認する必要があります。それを望まない場合は、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.