2014-01-23 152 views
2

我試圖從外部服務器連接到我的magento api,但我遇到了OAuth問題。Magento api rest oauth不授權消費者

我在後端創建了一個消費者,分配了它可以訪問的內容,通過使用終端的oauth授權消費者,它給了我我的令牌和令牌密鑰。

我的PHP如下;

<?php 

$hostUrl = 'redacted'; 
$callbackUrl = $hostUrl."oauth_customer.php"; 
$temporaryCredentialsRequestUrl = $hostUrl."oauth/initiate?oauth_callback=".urlencode($callbackUrl); 
$adminAuthorizationUrl = $hostUrl."oauth/authorize"; 
$accessTokenRequestUrl = $hostUrl."oauth/token"; 
$apiUrl = $hostUrl."api/rest"; 


$consumerKey = 'redacted'; 
$consumerSecret = 'redacted'; 

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

當我運行這個php文件時,它將我重定向到magento站點並說;

授權應用程序 consumer_name請求訪問您的帳戶 授權後,應用程序將有權訪問您的帳戶。 授權|拒絕

當我點擊「授權」時,它會將我重定向到magento中的404。如果我返回到php文件,它會一遍又一遍地將我重定向到同一個「授權應用程序」頁面。

我已經有令牌,所以我認爲它應該已經被授權。

我試圖訪問產品的名稱以及他們的庫存數量,所以我不能簡單地使用訪客訪問。任何幫助將不勝感激。

+0

嗨user1678025,答案很可能是肯定的,但你有沒有樹立正確的角色等在Magento管理面板?我花了一段時間纔得到所有的各種方格。 –

+0

@ user1678025你有什麼解決方案嗎?我陷入了同樣的問題。請幫忙 –

回答

0

你的回調URL不應該在遠程主機上,它應該在你的應用程序的主機上。

0

刪除$ callbackUrl行和交換使用此代碼:

$callbackUrl = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];