簡體   English   中英

在magento中使用REST API時出錯

[英]Error while using REST api in magento

我已經使用XAMPP在系統中本地設置了magento

我已經在根目錄中創建了一個名為dm.php的文件,內容如下

<?php
/**
* Example of products list retrieve using Customer account via Magento REST API. OAuth authorization is used
*/
$callbackUrl = "http://localhost/dm.php";
$temporaryCredentialsRequestUrl = "http://localhost/mage2/oauth/initiate?oauth_callback=" . urlencode($callbackUrl);
$adminAuthorizationUrl = 'http://localhost/mage2/oauth/authorize';
$accessTokenRequestUrl = 'http://localhost/mage2/oauth/token';
$apiUrl = 'http://localhost/mage2/api/rest';
$consumerKey = 'enhksf7u33p3snubewb6zcq0z9c63bvv';
$consumerSecret = 'p7e835cdcxofokeep749jgzz4l1e306p';

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

但這給了我以下錯誤

Fatal error: Class 'OAuth' not found in D:\Webserver\xampp\htdocs\dm.php on line 19

任何人都可以對此有所了解嗎?

由於無法在xampp Windows中安裝oauth,因此我將dm.php文件的內容更改為此。

<?php
$ch = curl_init('http://localhost/mage2/api/rest/customers');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$customers = curl_exec($ch);
echo $customers;
?>

現在我收到這樣的錯誤

{"messages":{"error":[{"code":403,"message":"Access denied"}]}}

我究竟做錯了什么?

首先,轉到magento管理面板, System->Webservice->RESt Roles->Guest->Resources Access ->SET ALL

同樣,轉到System->Webservice->RESt Attribute->Guest->Resources Access ->SET ALL

然后在Web瀏覽器中點擊此URL http://****/chanchal/magento/api/rest/products ,並檢查顯示的錯誤。

據我說,它必須以xml格式在您的網站中顯示產品。

請告訴我..

編輯:我剛才配置了一個本地主機,並得到此輸出,請參閱屏幕快照。 確保您的magento中有產品。 在此處輸入圖片說明

同樣地,按照上述步驟進行管理,客戶然后從管理面板創建Ouath使用者,為Mozilla Firefox安裝RESTClient並按照此處

這些設置步驟是必需的。此鏈接可能會為您提供幫助。

認證端點

1. /oauth/initiate此端點用於檢索請求令牌。

2. /oauth/authorize此端點用於用戶授權(客戶)。

3. /admin/oauth_authorize此端點用於用戶授權(Admin)。

4. /oauth/token此端點用於檢索訪問令牌。

如果您有任何問題,請告訴我。

祝你好運

稍加修改代碼即可輕松解決403 forbidden錯誤。

magento引擎的作用是使用默認的guest用戶提供對REST api方法的訪問。 來賓用戶沒有太多功能,因此最好更改magento的此功能。 有兩種方法可以做到這一點:

1)快速而骯臟的修復:
在文件/app/code/core/Mage/Api2/Model/Auth.php中 ,更改以下值:
DEFAULT_USER_TYPE = 'guest'

DEFAULT_USER_TYPE = 'admin'

在文件中
/app/code/core/Mage/Api2/Model/Auth/Adapter.php
更改此行從
return (object) array('type' => Mage_Api2_Model_Auth::DEFAULT_USER_TYPE, 'id' => null);
對此:
return (object) array('type' => Mage_Api2_Model_Auth::DEFAULT_USER_TYPE, 'id' => '1');

這樣,身份驗證系統就不會被破壞。

2)正確且長期的修復:
使用magento覆蓋機制覆蓋這兩個功能,以根據magento標准提供更好的解決方案。 這樣,核心文件將保持完整。

我們使用此鏈接為php安裝oauth。 它的好和容易添加擴展名的PHP。

安裝oauth php

希望對所有人有幫助,並解決“ OAuth”未發現致命錯誤。

我遇到了同樣的問題,苦苦掙扎了一周,但是嘗試用支持ouath安裝新版本的xammp或wamp。更好的解決方案是,我安裝了Ammps 1.9,並在php5.4中解決了oauth的擴展問題,但仍要確保您選擇支持擴展名oauth的適當php(php5.4)

對於安裝Oauth: http : //www.magentocommerce.com/api/rest/authentication/oauth_authentication.html

安裝用於Oauth的PHP擴展:1.下載php_oauth.dll文件,並將其添加到C:\\ xampp \\ php \\ ext \\下。2.在php.ini中添加[PHP_OAUTH] extension = php_oauth.dll

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM