【问题标题】:Magento REST API OAuthMagento REST API OAuth
【发布时间】:2019-07-27 03:58:43
【问题描述】:

Magento 版本。 1.7.0.2

我是 Magento、REST 和 oauth 的新手。我希望能够使用 Magento REST API 来修改具有内部客户管理系统的在线商店。我已经能够很容易地设置 Magento,但我在 REST 方面遇到了困难,特别是在 oauth 方面。

我目前在 OSX 10.7.5 上的 MAMP 2.1.1 上运行 Magento。我能够使用以下说明安装 OAUTH:Installing PHP OAuth in MAMP environment

按照 Magento 教程,我正在使用 Firefox RESTClient 来测试 OAuth。我在 Magento 中设置了 Roles 和 Consumer,并将键放在 RESTClient 的相应字段中。

当我发布到

http://localhost:8888/store/oauth/initiate?oauth_callback=http://localhost:8888/store/oauth_admin.php

我收到了回复

oauth_problem=signature_invalid&debug_sbs=QiIiTo3WGTZLTOhyIest9B5+l5s=

在 Magento 上使用测试 PHP 脚本 (http://www.magentocommerce.com/api/rest/introduction.html)

<?php
/**
 * Example of products list retrieve using admin account via Magento REST
API. oAuth authorization is used
 */
$callbackUrl = "http://localhost:8888/store/oauth_admin.php";
$temporaryCredentialsRequestUrl =
"http://localhost:8888/store/oauth/initiate?oauth_callback=" .
urlencode($callbackUrl);
$adminAuthorizationUrl = 'http://localhost:8888/store/admin/oAuth_authorize';
$accessTokenRequestUrl = 'http://localhost:8888/store/oauth/token';
$apiUrl = 'http://localhost:8888/store/api/rest';
$consumerKey = 'obscured';
$consumerSecret = 'obscured';

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

我收到以下错误:

Notice: Undefined index: state in /Applications/MAMP/htdocs/store/test.php on line 23

Notice: Undefined index: state in /Applications/MAMP/htdocs/store/test.php on line 29
OAuthException Object ( [message:protected] => Invalid auth/bad request (got a 401,         expected HTTP/1.1 20X or a redirect) [string:private] => [code:protected] => 401     [file:protected] => /Applications/MAMP/htdocs/store/test.php [line:protected] => 31 [trace:private] => Array ( [0] => Array ( [file] => /Applications/MAMP/htdocs/store/test.php [line] => 31 [function] => getRequestToken [class] => OAuth [type] => -> [args] => Array ( [0] => http://localhost:8888/store/oauth/initiate?oauth_callback=http%3A%2F%2Flocalhost%3A8888%2Fstore%2Foauth_admin.php ) ) ) [lastResponse] => oauth_problem=signature_invalid&debug_sbs=c3Pb0LJa26al02LJh9hSubXlBs8= [debugInfo] => Array ( [sbs] => GET&http%3A%2F%2Flocalhost%3A8888%2Fstore%2Foauth%2Finitiate&oauth_callback%3Dhttp%253A%252F%252Flocalhost%253A8888%252Fstore%252Foauth_admin.php%26oauth_consumer_key%3D41rv8qwkai1og9yp6ragyew5rag5e9oj%26oauth_nonce%3D10898187885101843ed45b24.99726561%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1359053886%26oauth_version%3D1.0 [headers_sent] => GET /store/oauth/initiate?oauth_callback=http%3A%2F%2Flocalhost%3A8888%2Fstore%2Foauth_admin.php&oauth_consumer_key=41rv8qwkai1og9yp6ragyew5rag5e9oj&oauth_signature_method=HMAC-SHA1&oauth_nonce=10898187885101843ed45b24.99726561&oauth_timestamp=1359053886&oauth_version=1.0&oauth_signature=F36aIxyET2XEVXDCJxm4jxGsRPg%3D HTTP/1.1 User-Agent: PECL-OAuth/1.2.3 Host: localhost:8888 Accept: */* [headers_recv] => HTTP/1.1 401 Authorization Required Date: Thu, 24 Jan 2013 18:58:06 GMT Server: Apache/2.2.22 (Unix) mod_ssl/2.2.22 OpenSSL/0.9.8r DAV/2 PHP/5.2.17 X-Powered-By: PHP/5.2.17 Content-Length: 70 Content-Type: application/x-www-form-urlencoded [body_recv] => oauth_problem=signature_invalid&debug_sbs=c3Pb0LJa26al02LJh9hSubXlBs8= [info] => About to connect() to localhost port 8888 (#0) Trying ::1... connected Connected to localhost (::1) port 8888 (#0) Connection #0 to host localhost left intact Closing connection #0 ) ) 

据我所知,我所做的一切都是正确的,甚至完全擦除 Magento 并在弄清楚如何安装 Oauth 后进行全新安装。我不知道下一步该做什么,任何帮助将不胜感激,谢谢。

【问题讨论】:

    标签: php magento rest oauth magento-1.7


    【解决方案1】:

    我了解到您不能在 Oauth 请求中包含 URL 的端口号。端口号被剥离,因此在比较密钥时,它们不匹配。将端口更改为 80(这样它就不必包含在 url 中)解决了这个问题。

    【讨论】:

    • 但是解决方案是什么。我的意思是如果我因为某种原因不能更改端口号,那我该怎么办?
    • 你必须想办法在端口 80 (http) 或 443 (https) 上建立连接
    • 我击中了这个并且通过移动到端口 80 也得到了治愈,谢谢!给其他搜索者的一些注意事项:我在 Mac OS X 上使用 MAMP PRO,它默认为端口 8888,我在安装 Magento 时保持原样。基本 REST API 正在运行。我将 Python 与 rauth 和 OAuth1Service 一起使用。进一步提示:当这条线失败时:request_token,request_token_secret = service.get_request_token(...),我尝试使用:raw = service.get_raw_request_token(...) 然后打印“RAW Request Token reply:” + str(raw) ,并且我看到了“”,但我仔细检查了 Web 服务下的角色。
    • 在进行 OAuth 1.0 签名时,端口号必须被剥离(标准化)。完成此操作后,我能够连接到 Magento,就好像服务在端口 80 上一样。
    【解决方案2】:

    只需在第 52 行覆盖 Mage_Oauth_Model_Server::_validateSignature() (magetno CE 1.8.1)

    $this->_request->getHttpHost()
    

    并成功:

     $this->_request->getHttpHost(!Mage::getIsDeveloperMode())
    

    这样,如果你处于开发者模式(在你的 vhost &lt;Directory /&gt; 部分中设置它的SetEnv),该方法不会剥离端口号,而且它不会改变生产环境的行为。

    ++

    【讨论】:

      猜你喜欢
      • 2013-07-21
      • 2012-11-12
      • 1970-01-01
      • 2013-01-06
      • 2013-01-16
      • 1970-01-01
      • 2014-02-14
      • 2014-09-22
      • 2013-03-17
      相关资源
      最近更新 更多