EC-CUBEのAjax APIを使う

EC-CUBE 2.12からAjaxで使う用のAPIがコソッと入ってるんですね。 リリースアナウンスとかではまったく触れられてなかったので、 ソース見るまでまったく気付かなかった。。。

使い方を解説してるページとかも全然見付からないので、 使い方を簡単に書いてみることにしました。

リクエストURL

APIリクエストを送るためのURLは、以下の形式になります。

http://ホスト名/api/出力フォーマット.php

出力フォーマットとしては、以下の3種類が使えます。

フォーマット 説明
json JSON形式でレスポンスを返す
xml XML形式でレスポンスを返す(デフォルト)
php PHPのデータをserialize()したものを返す

例えばリクエストをJSONで受け取りたい時は、URLは以下のようになります。

http://examples.com/api/json.php

リクエストパラメータ

具体的にどのようなオペレーションを要求するかは、 POSTで送信したパラメータによって決まります。 また、オペレーションの内容によっては認証を要求される場合もあります(設定で変更可)。

まずは全オペレーション共通のパラメータは、以下の2つです。

パラメータキー 説明
Operation オペレーションの種類を指定
Service 必須キーなので指定しないとエラーになるが、何も使われていな いので適当な値を渡せば良い

EC-CUBE 2.12.2の時点では、以下のようなオペレーションが可能です。

オペレーション 認証の必要性 説明
GetVersion 不要 EC-CUBEのバージョンを取得出来る。テスト用途などに。
ItemLookup 不要 商品ID等をキーに商品データを取得
ItemSearch 不要 商品データを検索
BrowseNodeLookup 不要 商品カテゴリを指定して商品データを取得
CartCreate カートの新規作成
CartAdd カートへの商品追加
CartGet カートの取得
CartModify カートの修正
CartClear カートのクリア

実際に使ってみる

cURLで実際にAPIを叩いて、一番簡単なオペレーションである GetVersion を使ってみます。

$ curl -d 'Operation=GetVersion' -d 'Service=none' http://examples.com/api/xml.php
<?xml version="1.0" encoding="UTF-8"?>
<GetVersionResponse xml:lang="ja" xmlns="http://www.ec-cube.net/ECCUBEApi/2.12.1">
    <OperationRequest>
        <HTTPHeaders>
            <Header Name="UserAgent" Value="curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5" />
        </HTTPHeaders>
        <RequestId>1348211643.3904</RequestId>
        <Arguments Name="Operation" Value="GetVersion" />
        <Arguments Name="Service" Value="none" />
        <RequestProcessingTime>0.024797916412354</RequestProcessingTime>
    </OperationRequest>
    <VersionResponse>
        <Request>
            <IsValid>True</IsValid>
            <GetVersionRequest />
        </Request>
        <Version>2.12.1</Version>
    </VersionResponse>
</GetVersionResponse>

Serviceにはnoneという値を渡してますが、ここは何でもいいです。 チェックされてないので。

正しく値が返って来る時は <IsValid>True</IsValid> となってます。

今度はエラーとなるリクエストを送ってみます。

$ curl -d 'Operation=GetVersion' http://examples.com/api/xml.php
<?xml version="1.0" encoding="UTF-8"?>
<ECCUBEApiCommonResponse xml:lang="ja" xmlns="http://www.ec-cube.net/ECCUBEApi/2.12.1">
    <OperationRequest>
        <HTTPHeaders>
            <Header Name="UserAgent" Value="curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5" />
        </HTTPHeaders>
        <RequestId>1348211887.2225</RequestId>
        <Arguments Name="Operation" Value="GetVersion" />
        <RequestProcessingTime>0.0092852115631104</RequestProcessingTime>
    </OperationRequest>
    <Response>
        <Request>
            <IsValid>False</IsValid>
            <Errors>
                <Error>
                    <Code>Service</Code>
                    <Message>※ Serviceが入力されていません。&lt;br /&gt;</Message>
                </Error>
            </Errors>
        </Request>
    </Response>
</ECCUBEApiCommonResponse>

今度は <IsValid>False</IsValid> が返って来ました。

他のオペレーションについて

続く…

スポンサーリンク
スポンサーリンク:

フォローする