Hi all,
I'm tring to get the list of all my store customers through the REST API; work fine with an uniq identifier :
V1/rest/customers/1
but how to get the full list of customers or search with filters?
it seems that for example :
GET http://<magento_host>/rest/V1/customers?
searchCriteria[filter_groups][0][filters][0][field]=created_at&
searchCriteria[filter_groups][0][filters][0][value]=2016-07-01 00:00:00&
searchCriteria[filter_groups][0][filters][0][condition_type]=gt
Thank you,
Thomas
Hi Thomas,
I was able to use this API to search for customers :
GET /V1/customers/search
Here is the bash command :
curl -X GET "http://my.website.com/index.php/rest/V1/customers/search? \ searchCriteria[filterGroups][0][filters][0][field]=email& \ searchCriteria[filterGroups][0][filters][0][value]=%& \ searchCriteria[filterGroups][0][filters][0][condition_type]=like" \
-H "Authorization: Bearer xxxxxxxxxxxxxxxxxxxxx" \
-H "Content-type: application/json" -g
But I'm still enable to use it in a php script, see my code below :
<?php $search = [ 'searchCriteria' => [ "filterGroups" => [ "filters" => [ "field" => "email", "value" => "%", "condition_type" => "like" ] ] ] ]; $token = "xxxxxxxxxxxxxxxxx";$api = "rest/V1/customers/search";
$ch = curl_init("http://my.website.com/index.php/".$api);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($search)); //curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json", "Authorization: Bearer ".$token));
$result = curl_exec($ch);
$result = json_decode($result, 1);
print_r($result); ?>
It always return the message below :
[message] => %fieldName is a required field. [parameters] => Array ( [fieldName] => searchCriteria )
Can someone help about fixing this piece of code ?
Hello,
please try below code
$token = "xxxxxxxxxxxxxxxxx";$api = "rest/V1/customers/search";
$ch = curl_init("http://my.website.com/index.php/".$api."?searchCriteria[filterGroups][0][filters][0][field]=email");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json", "Authorization: Bearer ".$token));
Thanks for your answer.
With your code, I get this :
Array
(
[items] => Array
(
)
[search_criteria] => Array
(
[filter_groups] => Array
(
[0] => Array
(
[filters] => Array
(
[0] => Array
(
[field] => email
[value] =>
[condition_type] => eq
)
)
)
)
)
[total_count] => 0
)From your example, I got the expected result by using this :
$ch = curl_init("http://my.website.com/index.php/".$api."?searchCriteria[filterGroups][0][filters][0][field]=email&searchCriteria[filterGroups][0][filters][0][value]=%&searchCriteria[filterGroups][0][filters][0][condition_type]=like"); Result :
Array
(
[items] => Array
(
[0] => Array
(
[id] => 1
[group_id] => 1
[created_at] => 2017-05-02 11:00:12
[updated_at] => 2017-05-03 08:24:58
[created_in] => myshop
[email] => user@example.com
[firstname] => John2
[lastname] => Doe2
[store_id] => 2
[website_id] => 1
[addresses] => Array
(
)
[disable_auto_group_change] => 0
)
)
[search_criteria] => Array
(
[filter_groups] => Array
(
[0] => Array
(
[filters] => Array
(
[0] => Array
(
[field] => email
[value] => %
[condition_type] => like
)
)
)
)
)
[total_count] => 1
)But the json is not used, how can it be used ?
I finally fixed my question with http_build_query() and json_decode().
$api = "rest/V1/customers/search";
$json = '
{
"search_criteria": {
"filter_groups": [
{
"filters": [
{
"field": "email",
"value": "%",
"condition_type": "like"
}
]
}
]
}
}
';
$j = json_decode($json);
$get_params = http_build_query($j);
$ch = curl_init("http://my.website.com/index.php/".$api."?".$get_params);
hi.. i try with
"/rest/V1/customers/search?searchCriteria[filter_groups][0][filters][0][field]=created_at&searchCriteria[filter_groups][0][filters][0][value]=#{start_time}&searchCriteria[filter_groups][0][filters][0][condition_type]=from&searchCriteria[filter_groups][1][filters][1][field]=created_at&searchCriteria[filter_groups][1][filters][1][value]=#{end_time}&searchCriteria[filter_groups][1][filters][1][condition_type]=to&searchCriteria[page_size]=10&searchCriteria[current_page]=1"
but pagination not work, can you please suggest any solution
my requirement is I try to search contact with start date and end date but getting only 10 contact (I was try with . => searchCriteria[page_size]=100)
but not work only get 10 contact
I tried with your code
$json = '
{
"search_criteria": {
"filter_groups": [
{
"filters": [
{
"field": "email",
"value": "gmail.com",
"condition_type": "like"
}
]
}
],
"page_size": 10
}
}
';
$j = json_decode($json);
$get_params = http_build_query($j);
$customername = "gmail.com";
$requestUrl = $url.'index.php/rest/V1/customers/search?'.$get_params;
I have 22k customers with like gmail.com but
(
[items] => Array
(
)
[search_criteria] => stdClass Object
(
[filter_groups] => Array
(
[0] => stdClass Object
(
[filters] => Array
(
[0] => stdClass Object
(
[field] => email
[value] => gmail.com
[condition_type] => like
)
)
)
)
[page_size] => 10
)
[total_count] => 0
)can you please tell me how we can search customer by email