2011-07-14 13 views
8

Magento API対応モジュールの実例を探しています。どのように定義し、コードを記述し、呼び出すことができますか?Magento APIの例

+2

ここで使用される「API」は不明です。石鹸? RPC?ネイティブMagento PHPコール?より具体的にすると誰かが助けます。 –

+0

APIに接続されたモジュールを定義するのにXMLだけが必要です。 –

答えて

29

作業設定(ローカル/ ModuleNameのの/ etc /アプリ/コードで/私はapi.xmlに地雷を書きました。)は:

<?xml version="1.0" encoding="UTF-8"?> 
<config> 
    <modules> 
     <ModuleName> 
      <version>0.1.0</version> 
     </ModuleName> 
    </modules> 
    <api> 
     <resources> 
      <customer translate="title" module="xyz"> 
       <model>ModuleName_Model_Api</model> 
       <title>Customer Resource</title> 
       <acl>customer</acl> 
       <methods> 
        <info translate="title" module="xyz"> 
         <title>Retrieve customer data</title> 
         <acl>customer/info</acl> 
         <method>info</method> 
        </info> 
       </methods> 
       <faults module="xyz">     
       </faults> 
      </customer> 
     </resources> 
     <acl> 
      <resources> 
       <customer translate="title" module="xyz"> 
        <title>Customers</title> 
        <info translate="title" module="xyz"> 
         <title>Get Info Test</title> 
        </info> 
       </customer> 
       <all> 
       </all> 
      </resources> 
     </acl> 
    </api> 
</config> 

PHPコード(アプリ/コード/ローカル/ ModuleNameを/モデルで/Api.php)::実行結果スクリプトを前記

$mageUrl = 'http:/local.magecomm/api/?wsdl'; 
$mageUser = 'soaptest'; 
$mageApiKey = 'apitest'; 

$soap = new SoapClient($mageUrl); 

$sessionID = $soap->login($mageUser, $mageApiKey); 

var_dump($soap->call($sessionID, 'customer.info', array())); 

class ModuleName_Model_Api extends Mage_Api_Model_Resource_Abstract 
{ 
    function info() 
    { 
     return 'xxx'; 
    } 
} 

PHPコード実際にSOAPインターフェイスを呼び出します

C:/Temp>php magesoap.php 
string(3) "xxx" 

いくつかの注意:

Oエラー: "無効なAPIのパス"

  • これは、Magentoがモジュールを見つけることができないことを意味します。

oエラー:「リソースパスは呼び出し可能ではありません。

  • これは、Magentoのは、モジュール内のメソッドを呼び出すことができないことを意味します。

  • これをデバッグするのにsystem.logファイルを使用できます。計算されたファイルパスから要求されたクラスを自動ロードできなかった方法に関する1つ以上のエラーが表示されます。上記モジュールのconfig XML O

    2011-04-13T15:15:24+00:00 DEBUG (7): include(Mage/Customer/Model/Api.php) [function.include]: failed to open stream: No such file or directoryC:/Development/Projects/MagentoCommercial/lib/Varien/Autoload.php

    2011-04-13T15:15:24+00:00 DEBUG (7): include() [function.include]: Failed opening 'Mage/Customer/Model/Api.php' for inclusion (include_path='C:/Development/Projects/MagentoCommercial/app/code/local;C:/Development/Projects/MagentoCommercial/app/code/community;C:/Development/Projects/MagentoCommercial/app/code/core;C:/Development/Projects/MagentoCommercial/lib;.;C:/Development/Libraries;C:/Development/Libraries/Standard/_Pear')C:/Development/Projects/MagentoCommercial/lib/Varien/Autoload.php

は、「顧客」グループの下に「情報を見るテスト」と呼ばれるAPIの権限で新しいアイテムをこのSOAPインターフェイスをリンクします。特定のAPIユーザー/ロールを許可または拒否することができます。

o module-config XMLの/ config/api/resources/customer/methods/infoにある値は、SOAP resource-nameにバインドする必要があるメソッドの内部メソッド名です。それらが同じ場合は、これを省略することができます。

o「ModuleName_Model_Api」という名前の/ config/api/resources/customerの下の値は、明らかに私のクラスを参照しているので完全なクラス名です。これはMageの一部ではありません。 Mage内の既存のクラスを呼び出そうとしている場合は、簡略表記(xxx/yyy、xxx/yyy_zzzなど)を使用できます。

o "module"属性(< ... module = "">)の値が重要であると思われるのは、module-configのACL部分だけです。すべて同じですが、それが適切に設定されていることを確認してください(大文字と小文字は関係ありません)。彼らはまだそれを主流に実装していないかもしれませんが、それを無視することは後で問題を引き起こします。

ダスティンオペレーター

+0

あなたのメモセクションが私を助けました!私はあなたにもっと投票してもらいたい! – Jpepper

+0

これは役に立ちます!ありがとうございました!! – Becky

+0

リソースパスが呼び出せない場合があります。同じファイルをオーバーライドするモジュールの競合がある可能性があります。 – Muk