magento2を使用しているREST APIで詳細を含む製品リストを取得するにはどうすればよいですか?


9

ネイティブモバイルアプリケーションに取り組んでいて、顧客がカテゴリを選択した後に製品を表示したい。残りのリクエストでカテゴリ別に製品のリストを取得できますが、そのリストには製品の詳細があまりありません。

Request : http://localhost/magento2/index.php/rest/V1/categories/24/products        

24はカテゴリーIDです

Response : [{"sku":"WH01","position":1,"category_id":"24"},...]

以前のMagento 1.9製品リストは次のようなものでした

{
2:{
entity_id: "2"
type_id: "シンプル"
sku:「リーバイスバッグパック」
説明:「バッグパック」
short_description: "バッグパック"
meta_keyword:null
名前:「リーバイスバッグパック」
meta_title:null
meta_description:null
regular_price_with_tax:45
regular_price_without_tax:45
final_price_with_tax:45
final_price_without_tax:45
is_saleable:true
image_url: "http://172.16.8.24:8080/magento/media/catalog/product/cache/0/image/9df78eab33525d08d6e5fb8d27136e95/images/catalog/product/placeholder/image.jpg"
}-

モバイルアプリで画像などを表示できるように、製品に関する詳細情報を取得するにはどうすればよいですか?


SOAP APIを呼び出す方法(例:カスタマーAPI)?
Manoj Kumar

回答:


4

おそらく、GET / V1 / products /:sku REST APIを試してすべての詳細を取得できます(https://github.com/magento/magento2/blob/develop/app/code/Magento/Catalog/etc/webapi.xml #l36

戻り値は\ Magento \ Catalog \ Api \ Data \ ProductInterfaceの表現になります(追加の属性を含む) https://github.com/magento/magento2/blob/develop/app/code/Magento/Catalog/Api/Data /ProductInterface.php

GET / V1 / products /:sku REST APIにサービスを提供する\ Magento \ Catalog \ Api \ ProductRepositoryInterface :: getを確認します。

すべての製品SKUに対して複数のリクエストを作成できます。

または

検索APIを使用して、条件に基づいて1つのリクエストでリスト全体をフェッチできます。

例:http://localhost/magento2/index.php/rest/V1/products?searchCriteria [filter_groups] [0] [filters] [0] [field] = sku&searchCriteria [filter_groups] [0] [filters] [0] [値] = simple&searchCriteria [filter_groups] [0] [filters] [1] [field] = sku&searchCriteria [filter_groups] [0] [filters] [1] [value] = Simple2&searchCriteria [filter_groups] [0] [filters] [0 ] [condition_type] = eq&searchCriteria [current_page] = 1&searchCriteria [page_size] = 2

この場合、SKU-simpleおよびSimple2の製品が検索されます。


SOAP APIを呼び出す方法(例:カスタマーAPI)?
Manoj Kumar


私たちは試しましたが、私はこれで打たれました。スレッドmagento.stackexchange.com/questions/76569/…
Manoj Kumar

@airboss 192.168.1.180/magento/index.php/rest/V1/products/SKU apiの画像のURLは完全なURLではありません。このようなものです{{"attribute_code": "small_image"、 "value ":" /6/4/64275-152378-large.jpg "}、 '。このURLのプレフィックスを取得する方法はありますか?
nr5

storeConfigManagerサービスを使用してbaseMediaUrlを取得し、イメージから取得したパスを追加してフルパスを作成します。セキュアベースURLにsecureMediaUrlを使用することもできます。-リンク:devdocs.magento.com/swagger/index.html#!
Chuck


2
define('BASEURL','http://localhost/magento20_0407/');

$apiUser = 'testUser'; 
$apiPass = 'admin123';
$apiUrl = BASEURL.'index.php/rest/V1/integration/admin/token';
/*
    Magento 2 REST API Authentication
*/
$data = array("username" => $apiUser, "password" => $apiPass);                                                                    
$data_string = json_encode($data);                       
try{
    $ch = curl_init($apiUrl); 
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                                                                  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                                                                      
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                                                          
        'Content-Type: application/json',                                                                                
        'Content-Length: ' . strlen($data_string))                                                                       
    );       
    $token = curl_exec($ch);
    $token = json_decode($token);
    if(isset($token->message)){
        echo $token->message;
    }else{
        $key = $token;
    }
}catch(Exception $e){
    echo 'Error: '.$e->getMessage();
}


/*
    Get Product By SKU REST API Magento 2
    Use above key into header
*/
$headers = array("Authorization: Bearer $key"); 
//$requestUrl = BASEURL.'index.php/rest/V1/products/24-MB01';//24-MB01 is the sku.
//$requestUrl = BASEURL.'index.php/rest/V1/products?searchCriteria[page_size]=10';// get total 10 products
//$requestUrl = BASEURL.'index.php/rest/V1/categories/24/products';// 24 category id
$requestUrl = BASEURL.'index.php/rest/V1/products?searchCriteria=';//get all products

$ch = curl_init();
try{
    $ch = curl_init($requestUrl); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);   

    $result = curl_exec($ch);
    $result = json_decode($result);

    if(isset($result->message)){
        echo $result->message;
    }else{
        print_r($result);
    }
}catch(Exception $e){
    echo 'Error: '.$e->getMessage();
}

同様に、$ requestUrlを変更し、カテゴリIDで製品リストをフィルタリングして、製品の詳細を取得できます。

問題が解決するか確認してください。それ以外の場合は、別のソリューションを投稿します。


1

@airbossが言ったことに加えて、私たちは「統合」スタイルのAPIに取り組んでいます。これは、拡張可能な属性を追加するAPI呼び出しです(Catalog、Sales)。

数週間で、GET / V1 / products /:sku REST API呼び出しを実行し、その製品に関連するすべてを取得できるようになります(顧客として承認されている場合、在庫オブジェクトは表示されません)。たとえば、バンドルされた製品であるSKUを呼び出すと、シンプルな製品、製品オプションの配列、製品リンクの配列、メディアURL、および在庫オブジェクト*が取得されます。検索API(すぐに代わりにフィルターと呼びます)を使用する場合も同様です。

-チャック


V1 / products APIにはcategory_idパラメータが含まれていませんか?そのための回避策はありますか?
nr5
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.