我如何在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:“ Levis Bagpack”
描述:“袋装”
short_description:“背包”
meta_keyword:空
名称:“ Levis Bagpack”
meta_title:null
meta_description:null
常规价格(含税):45
常规价格(不含税):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

Answers:


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

检查\ Magento \ Catalog \ Api \ ProductRepositoryInterface :: get哪些服务可获取GET / V1 / products /:sku REST API。

您可以对所有产品SKU发出多个请求。

要么

您可以根据自己的条件使用搜索API在单个请求中获取整个列表:

例如:http://localhost/magento2/index.php/rest/V1/products?searchCriteria [filter_groups] [0] [filters] [0] [field] = sku&searchCriteria [filter_groups] [0] [filters] [0] [value] = 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/...
马诺库马尔

@airboss 192.168.1.180/magento/index.php/rest/V1/products/SKU api中图像的URL 不是完整的url。其类似这样的符号{ “:” /6/4/64275-152378-large.jpg“},'。知道如何获取此URL的前缀吗?
nr5

使用storeConfigManager服务并获取baseMediaUrl,然后添加从映像获取的路径以提供完整路径。您还可以将secureMediaUrl用于安全基本URL。-链接: 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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.