Hello,
It's been long since I have worked on Magento and published a blog on it. But recently my team was stuck in Magento REST Products API so I have to look into it. Basically the problem was
V1/categories/:categoryId/products API.
This API gives following result in an array.
{
"sku": "Cotton"
"position": 10001
"category_id": "2"
}
Now that's little bit weird as there are no other info of products like product name, description etc. So to get this info we have to use other API which is.
V1/products/:sku
But practically that is not a solution. As we may have n number of products so we can call details API n number of times. So what to do in this case. I have spent almost couple of hours on this but could not get any solution so finally this is what I did.
I used SOAP V1/categories/:categoryId/products API in other PHP file go get array of SKUs and loop through an array and formed following strings of SKUs.
sku1,sku2,sku3,sku4,sku5
Now I used SOAP V1/products API will following search criteria.
V1/products?searchCriteria[filter_groups][0][filters][0][field]=sku&searchCriteria[filter_groups][0][filters][0][value]=sku1,sku2, sku3,sku4,sku5&searchCriteria[filter_groups][0][filters][0][condition_type]=in
As you can see above I used filed SKU in search criteria , passed all the SKU I need in comma separated format and used condition IN.
But wait there was another problem, After calling above API, I did not get any result. I used few different tricks like
[sku1,sku2,sku3,sku4,sku5]
['sku1','sku2','sku3','sku4','sku5']
'sku1','sku2','sku3','sku4','sku5'
But nothing worked. Again I tried to find solution for sometime ad found solution in Magento 2 GitHub repo.
Please check this link.
https://github.com/magento/magento2/commit/65819d2f61a63e4fa9fc978220f8662ee5472791
This problem is going to be fixed in next release but we could not wait so here I updated Magento code myself.
Open the following file.
lib/internal/Magento/Framework/DB/Adapter/Pdo/Mysql.php
Go to line no 2792
and add following code.
if (($key == 'in' || $key == 'nin') && is_string($value)) {
$value = explode(',', $value);
}
That's it and now run following API.
V1/products?searchCriteria[filter_groups][0][filters][0][field]=sku&searchCriteria[filter_groups][0][filters][0][value]=sku1,sku2, sku3,sku4,sku5&searchCriteria[filter_groups][0][filters][0][condition_type]=in
It's been long since I have worked on Magento and published a blog on it. But recently my team was stuck in Magento REST Products API so I have to look into it. Basically the problem was
V1/categories/:categoryId/products API.
This API gives following result in an array.
{
"sku": "Cotton"
"position": 10001
"category_id": "2"
}
Now that's little bit weird as there are no other info of products like product name, description etc. So to get this info we have to use other API which is.
V1/products/:sku
But practically that is not a solution. As we may have n number of products so we can call details API n number of times. So what to do in this case. I have spent almost couple of hours on this but could not get any solution so finally this is what I did.
I used SOAP V1/categories/:categoryId/products API in other PHP file go get array of SKUs and loop through an array and formed following strings of SKUs.
sku1,sku2,sku3,sku4,sku5
Now I used SOAP V1/products API will following search criteria.
V1/products?searchCriteria[filter_groups][0][filters][0][field]=sku&searchCriteria[filter_groups][0][filters][0][value]=sku1,sku2, sku3,sku4,sku5&searchCriteria[filter_groups][0][filters][0][condition_type]=in
As you can see above I used filed SKU in search criteria , passed all the SKU I need in comma separated format and used condition IN.
But wait there was another problem, After calling above API, I did not get any result. I used few different tricks like
[sku1,sku2,sku3,sku4,sku5]
['sku1','sku2','sku3','sku4','sku5']
'sku1','sku2','sku3','sku4','sku5'
But nothing worked. Again I tried to find solution for sometime ad found solution in Magento 2 GitHub repo.
Please check this link.
https://github.com/magento/magento2/commit/65819d2f61a63e4fa9fc978220f8662ee5472791
This problem is going to be fixed in next release but we could not wait so here I updated Magento code myself.
Open the following file.
lib/internal/Magento/Framework/DB/Adapter/Pdo/Mysql.php
Go to line no 2792
and add following code.
if (($key == 'in' || $key == 'nin') && is_string($value)) {
$value = explode(',', $value);
}
That's it and now run following API.
V1/products?searchCriteria[filter_groups][0][filters][0][field]=sku&searchCriteria[filter_groups][0][filters][0][value]=sku1,sku2, sku3,sku4,sku5&searchCriteria[filter_groups][0][filters][0][condition_type]=in
It should give all the details of mentioned SKU. Hope this helps you.
No comments:
Post a Comment