2013-12-19 15 views
26

カスタムREST APIを作成しようとしています。 私は独自のモジュールCustom/Restapi.Custom [Namespace]、Restapi [Module name]を作成しました。カスタムREST APIをマゼンタで実装する方法は?

私はconfig.xmlとapi2.xmlを作成しました。

のConfig.xml

<?xml version="1.0"?> 
<config> 
    <modules> 
     <Custom_Restapi> 
      <version>0.1.0.0</version> 
     </Custom_Restapi> 
    </modules> 
    <global> 
     <models> 
      <restapi> 
       <class>Custom_Restapi_Model</class> 
      </restapi> 
     </models> 
</config> 

api2.xml

<config> 
    <api2> 
     <resource_groups> 
      <restapi translate="title" module="Custom_Restapi"> 
       <title>Custom Rest API</title> 
       <sort_order>10</sort_order> 
      </restapi> 
     </resource_groups> 
     <resources> 
      <restapi translate="title" module="Custom_Restapi"> 
       <group>restapi</group> 
       <model>restapi/api2_restapi</model> 
       <title>Testing My Rest API</title> 
       <sort_order>10</sort_order> 
       <privileges> 
        <admin> 
         <create>1</create> 
         <!-- <retrieve>1</retrieve> 
         <delete>1</delete>--> 
        </admin> 
        <!-- <customer> 
         <create>1</create> 
         <retrieve>1</retrieve> 
         <delete>1</delete> 
        </customer> 
        <guest> 
         <create>1</create> 
         <retrieve>1</retrieve> 
         <delete>1</delete> 
        </guest>--> 
       </privileges> 
       <routes> 
        <route_entity> 
         <route>/custom/createwebsite/:s</route> 
         <action_type>entity</action_type> 
        </route_entity> 
       </routes> 
       <versions>1</versions> 
      </restapi> 
     </resources> 
    </api2> 

ローカルモデルのディレクトリ構造

アプリは\ code \:下記のコード - です\ C ustom \ Restapi \ Model \ Api2 \ Restapi.php。下記のファイル - のコードです:

Restapi.phpが

class Custom_Restapi_Model_Api2_Restapi extends Mage_Api2_Model_Resource 
{ 

} 

アプリは\ code \ローカル\カスタム\ Restapi \モデル\ API2 \ Restapi \休憩\管理\ V1.phpは、以下のコードであります[ファイル] - :

V1.php

class Custom_Restapi_Model_Api2_Restapi_Rest_Admin_V1 extends Custom_Restapi_Model_Api2_Restapi 
{ 
    protected function _create(){ 


    return json_encode(array("testing","hello")); 
} 

protected function _retrieveCollection() 
{ 
     return json_encode(array("testing","hello")); 
} 
} 

その他、各種/モジュールの設定ファイルも設定されています。私はOAuthの役割管理者を作成する必要があり

  1. を設定

    管理。左側のタブの下に、 "Role Api Resource"モジュール設定が表示され、選択されます。

  2. その他コンシューマー設定も構成されています。以下は

コード - スクリプトを呼び出すREST APIです:スクリプトコード

$consumerKey = 'ozr74egldg07dpxtkk9uq1o8bj6wwd65'; // from Admin Panel's &quot;REST - OAuth Consumers page&quot; 
$consumerSecret = 'ozr74egldg07dpxtkk9uq1o8bj6wwd65'; // from Admin Panel's &quot;REST - OAuth Consumers page&quot; 

// Set the OAuth callback URL to this script since it contains the logic 
// to execute *after* the user authorizes this script to use the Coupon AutoGen API 
$callbackUrl = "http://127.0.0.1/magento/testscript.php"; 

// Set the URLs below to match your Magento installation 
$temporaryCredentialsRequestUrl = "http://127.0.0.1/mage_restapi/oauth/initiate?oauth_callback=" . urlencode($callbackUrl); 
$adminAuthorizationUrl = 'http://127.0.0.1/mage_restapi/admin/oauth_authorize'; 
$accessTokenRequestUrl = 'http://127.0.0.1/mage_restapi/oauth/token'; 
$apiUrl = 'http://127.0.0.1/mage_restapi/api/rest'; 

session_start(); 

if (!isset($_GET['oauth_token']) && isset($_SESSION['state']) && $_SESSION['state'] == 1) { 
    $_SESSION['state'] = 0; 
    echo "try"; 
} 

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 { 

     // We have the OAuth client and token. Now, let's make the API call. 
     $oauthClient->setToken($_SESSION['token'], $_SESSION['secret']); 



     // Generate coupon codes via POST 
     $resourceUrl = "$apiUrl/custom"; 

     $oauthClient->fetch($resourceUrl, OAUTH_HTTP_METHOD_POST, array(
      'Accept' => 'application/json', 
      'Content-Type' => 'application/json', 
     )); 


     $data= json_decode($oauthClient->getLastResponse(), true); 


     echo "Data is:<br/>".$data; 

    } 
} catch (OAuthException $e) { 

    print_r($e->getMessage()); 
    //echo "<br/>"; 
    //print_r($e->lastResponse); 
} 

私はAPIにアクセスしようとしていた場合、それが承認

を求めるの呼び出し

アピ

アプリケーション管理者にアカウントへのアクセスを許可する

認可申請後、あなたのアカウントにアクセスできます。

AUTHORIZEボタンと承認ボタンエラー - をクリックした後

ボタンを拒否:

無効な認証/悪い要求(HTTP/1期待される、404を得ました。1 20X又はリダイレクト) { "メッセージ":{ "エラー":[{ "コード":404、 "メッセージ": "要求は、任意の経路と一致しません"}]}}

PHPのOAuth拡張私のOAuth設定で

参考リンク http://www.magentocommerce.com/knowledge-base/entry/how-to-use-extend-the-magento-rest-api-to-use-coupon-auto-generation

http://ctodilemma.com/2013/04/customising-and-extending-the-magento-rest-api/

をRSA-SHA1のサポートをサポートしていない私たちは、以下の、残りのコードにアクセスするためのMagentoによって提供される機能を使用する関数であるリスト - :

  1. _CREATE()
  2. _retrieve()
  3. _delete()
  4. _retrieveCollection()
  5. _update()
  6. _multiUpdate()
  7. _multiDelete

エラー 認証/不正なリクエストが無効です(404 、期待されるHTTP/1.1 20Xまたはリダイレクト) {"メッセージ":{"エラー":[{"コード":404 "メッセージ": "リクエストはどのルートとも一致しません}}}}

私はすべての分析の上で共有しているが、私はデータにアクセスすることができません。あなたのフィードバックを共有してください。

あなたのressourceのURLが

$resourceUrl = "$apiUrl/custom"; 

があるべきあなたのapi2.xmlで1に対応している必要があり

答えて

関連する問題