如何通过Magento REST API获取数据

时间:2015-03-14 11:45:13

标签: api rest magento oauth

如何获取数据,包括必须通过Megento REST API授权的产品信息和客户信息?我一步一步地遵循指南,但仍然不知道该怎么做。 首先,我根据指南在管理员面板上创建了一个新的消费者。

  1. 在Magento管理面板菜单上,选择系统> Web服务> REST - OAuth消费者。
  2. 在OAuth使用者页面上,点击右上角的添加新内容以添加新用户。
  3. 将打开“新建消费者”页面。 “密钥”和“密钥”字段自动填充,无法编辑。这些值会自动生成,并将用于识别Magento中的消费者。
  4. 然后,我在我的主机根目录下构建了一个oauth_admin.php。

    <?php
    $callbackUrl = "http://demo1.sunpop.cn/oauth_admin.php";
    $temporaryCredentialsRequestUrl = "http://demo1.sunpop.cn/oauth/initiate?oauth_callback=" . urlencode($callbackUrl);
    $adminAuthorizationUrl = 'http://demo1.sunpop.cn/admin/oAuth_authorize';
    $accessTokenRequestUrl = 'http://demo1.sunpop.cn/oauth/token';
    $apiUrl = 'http://demo1.sunpop.cn/api/rest';
    $consumerKey = 'e94b6b9c113d4903aaab4f08c8150754';
    $consumerSecret = 'fcf5bdf58bc36c434e52f1ac916ba5ae';
    
    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']);
            header('Location: ' . $adminAuthorizationUrl . '?oauth_token=' . $requestToken['oauth_token'].'&oauth_token_secret='.$requestToken['oauth_token_secret']);
            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, array(), 'GET', array('Content-Type' => 'application/json'));
            $productsList = json_decode($oauthClient->getLastResponse());
            print_r($productsList);
        }
    } catch (OAuthException $e) {
        print_r($e->getMessage());
        echo "<br/>";
        print_r($e->lastResponse);
    }
    ?>
    

    之后,我尝试访问myhost / oauth_admin.php。这个地址响应404但是我可以像这样在重定向链接上获得oauth_token和oauth_token_secret。

      

    http://demo1.sunpop.cn/admin/oAuth_authorize?oauth_token=df226dce0223c2706f4a03a10583fb88&oauth_token_secret=46f96db257f7f0dcb1d768370f3d9fcd

    然后,我复制了oauth_token和oauth_token_secret,并尝试使用REST-Client向myhost / api / rest / stockitems发送请求,但返回了401。

    <?xml version="1.0"?>
    <magento_api>
      <messages>
        <error>
          <data_item>
            <code>401</code>
            <message>oauth_problem=consumer_key_rejected</message>
          </data_item>
        </error>
      </messages>
    </magento_api>

    我的环境可以在http://demo1.sunpop.cn/phpinfo.php找到 我是magento的初学者。我想知道在这个过程中我犯了什么错误。如何从RestAPI获取数据?如果有任何问题可以提供帮助,我将非常感激。

1 个答案:

答案 0 :(得分:0)

请将oAuth_authorize更改为所有小oauth_authorize