Не получается составить запрос к API на PHP, может кто поможет идеями?
Добрый день Подключаюсь к стороннему API, есть Мануал по отправке GET запроса для оформления заказа :
Мануал
Не могу составить параметр items в котором не понятный мне формат массива в строке я как только не пробовал отправить данные разными способами собрать массив в том числе и в ручную к примеру:
spoiler
[{290775П29,ГАЗ,Ростов-на-Дону,14.04,1,0,0,,77068}]
[{'290775П29','ГАЗ','Ростов-на-Дону','14.04','1','0','0','','77068'}]
[{"290775П29","ГАЗ","Ростов-на-Дону",14.04,1,0,0,"",77068}]
[{"290775П29","ГАЗ","Ростов-на-Дону","14.04","1","0","0","","77068"}]
[{article='290775П29',brand='ГАЗ',supplierName='Ростов-на-Дону',costSale='14.04',quantity='1',supplierTimeMin='0',supplierTimeMax='0',comment='',GioID='77068'}]
[{article=>'290775П29',brand=>'ГАЗ',supplierName=>'Ростов-на-Дону',costSale=>'14.04',quantity=>'1',supplierTimeMin=>'0',supplierTimeMax=>'0',comment=>'',GioID=>'77068'}]
[{'article'=>'290775П29','brand'=>'ГАЗ','supplierName'=>'Ростов-на-Дону','costSale'=>'14.04','quantity'=>'1','supplierTimeMin'=>'0','supplierTimeMax'=>'0','comment'=>'','GioID'=>'77068'}]
[{'article'='290775П29','brand'='ГАЗ','supplierName'='Ростов-на-Дону','costSale'='14.04','quantity'='1','supplierTimeMin'='0','supplierTimeMax'='0','comment'='','GioID'='77068'}]
Не один из вариантов не проходит, пробовал и serialize и json даже print_r. не пойму что имели ввиду разработчики API? Естественно строка была пропущена через urlencode.
Итог API меня не понимает и не разбирает то что я отправляю.
Запрос формирую методами PHP. Так же есть такой пример :
Пример С
HttpClient client = new HttpClient(); string lp = Convert.ToBase64String(Encoding.UTF8.GetBytes(login + ":" + password)).ToString(); Uri url = new Uri("https://api.xn--80aep1aarf3h.xn--p1ai/SearchService/AddOrder?items=" + HttpUtility.UrlEncode(items)); client.BaseAddress = url; client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", lp); var response = client.GetAsync(url).Result; |
HttpClient client = new HttpClient(); string lp = Convert.ToBase64String(Encoding.UTF8.GetBytes(login + ":" + password)).ToString(); Uri url = new Uri("https://api.xn--80aep1aarf3h.xn--p1ai/SearchService/AddOrder?items=" + HttpUtility.UrlEncode(items)); client.BaseAddress = url; client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", lp); var response = client.GetAsync(url).Result;
Но мне он не дает ни какой полезной инфы.
Другие функции API все реализованы без непонятного массива и все просто реализованы и работают без проблем.
Может я не понимаю очевидного? Буду рад любым идеям. Спасибо.
Код
$SendPart[0]['article']= $Part['WebService_Data']['Article']; $SendPart[0]['brand']= $Part['WebService_Data']['brand']; $SendPart[0]['SupplierName']= $Part['WebService_Data']['SupplierName']; $SendPart[0]['CostSale']= $Part['WebService_Data']['CostSale']; $SendPart[0]['SupplierTimeMin']= $Part['WebService_Data']['supplierTimeMin']; $SendPart[0]['SupplierTimeMax']= $Part['WebService_Data']['supplierTimeMax']; $SendPart[0]['Quantity']= (int)$Part['count']; $SendPart[0]['Comment']=$Comment; $SendPart[0]['GioID']= (int)$Part['parts_id']; $SendUri=json_encode($SendPart); $data = AddOrder($SendUri); public function AddOrder($SendUri) { $url = $this->url.'/SearchService/AddOrder?items='.urlencode($SendUri).''; $auth = base64_encode($this->login.":".$this->pass); $arrContextOptions=array( "ssl"=>array( "verify_peer"=>false, "verify_peer_name"=>false, ), "http"=>array( "header"=>"Authorization: Basic $auth", 'ignore_errors' => true, ), ); try { $result = file_get_contents($url,false, stream_context_create($arrContextOptions)); if($result==false){ throw new Exception('Error'); } else { //$result=json_decode($result, true); } }catch (Exception $e) { $result['Error']="file_get_contents Error"; } echo $url; return $result; } |
$SendPart[0]['article']= $Part['WebService_Data']['Article']; $SendPart[0]['brand']= $Part['WebService_Data']['brand']; $SendPart[0]['SupplierName']= $Part['WebService_Data']['SupplierName']; $SendPart[0]['CostSale']= $Part['WebService_Data']['CostSale']; $SendPart[0]['SupplierTimeMin']= $Part['WebService_Data']['supplierTimeMin']; $SendPart[0]['SupplierTimeMax']= $Part['WebService_Data']['supplierTimeMax']; $SendPart[0]['Quantity']= (int)$Part['count']; $SendPart[0]['Comment']=$Comment; $SendPart[0]['GioID']= (int)$Part['parts_id']; $SendUri=json_encode($SendPart); $data = AddOrder($SendUri); public function AddOrder($SendUri) { $url = $this->url.'/SearchService/AddOrder?items='.urlencode($SendUri).''; $auth = base64_encode($this->login.":".$this->pass); $arrContextOptions=array( "ssl"=>array( "verify_peer"=>false, "verify_peer_name"=>false, ), "http"=>array( "header"=>"Authorization: Basic $auth", 'ignore_errors' => true, ), ); try { $result = file_get_contents($url,false, stream_context_create($arrContextOptions)); if($result==false){ throw new Exception('Error'); } else { //$result=json_decode($result, true); } }catch (Exception $e) { $result['Error']="file_get_contents Error"; } echo $url; return $result; }
Дополнительно:
Но свой код на РНР ты нам не покажешь. И правда, зачем...
Подключаете АвтоСоюз, как я погляжу)
Вы просто пропустили `items`, в качестве ключа корневого массива
Отправляемый массив должен выглядеть примерно так:
$send = [ 'items' => [ 'Article' => 'sku22', 'Brand' => 'Toyota', 'SupplierName' => 'Kolesa LLP', 'CostSale' => 512, 'Quantity' => 1, 'SupplierTimeMin' => 1, 'SupplierTimeMax' => 10, 'Comment' => 'comment', 'GioID' => 2 ], [ 'Article' => 'ads2512', 'Brand' => 'Nissan', 'SupplierName' => 'RDM', 'CostSale' => 6115, 'Quantity' => 1, 'SupplierTimeMin' => 1, 'SupplierTimeMax' => 10, 'Comment' => 'comment', 'GioID' => 2 ] ]; |
$send = [ 'items' => [ 'Article' => 'sku22', 'Brand' => 'Toyota', 'SupplierName' => 'Kolesa LLP', 'CostSale' => 512, 'Quantity' => 1, 'SupplierTimeMin' => 1, 'SupplierTimeMax' => 10, 'Comment' => 'comment', 'GioID' => 2 ], [ 'Article' => 'ads2512', 'Brand' => 'Nissan', 'SupplierName' => 'RDM', 'CostSale' => 6115, 'Quantity' => 1, 'SupplierTimeMin' => 1, 'SupplierTimeMax' => 10, 'Comment' => 'comment', 'GioID' => 2 ] ];
UPDATE:
да, оказалось несколько сложнее, сначала нужно список товаров превратить в строку и только потом класть её в 'items'
вот код который работает аналогично нашему:
$parts = [ [ "Article" => 'H020', 'Brand' => 'ИННОВАТОР', 'SupplierName' => 'Ростов-на-Дону', 'CostSale' => '7.97', 'Quantity' => 1, 'SupplierTimeMin' => 0, 'SupplierTimeMax' => 0, 'Comment' => '', 'GioID' => 0] ]; $url = 'https://xn--80aep1aarf3h.xn--p1ai/SearchService/AddOrder'; $encoded = json_encode($parts, JSON_UNESCAPED_UNICODE); var_dump($encoded); $urlParams = ['items' => $encoded]; $get_params = http_build_query($urlParams); var_dump($get_params); $full_url = $url. '?' .$get_params; var_dump($full_url); |
$parts = [ [ "Article" => 'H020', 'Brand' => 'ИННОВАТОР', 'SupplierName' => 'Ростов-на-Дону', 'CostSale' => '7.97', 'Quantity' => 1, 'SupplierTimeMin' => 0, 'SupplierTimeMax' => 0, 'Comment' => '', 'GioID' => 0] ]; $url = 'https://xn--80aep1aarf3h.xn--p1ai/SearchService/AddOrder'; $encoded = json_encode($parts, JSON_UNESCAPED_UNICODE); var_dump($encoded); $urlParams = ['items' => $encoded]; $get_params = http_build_query($urlParams); var_dump($get_params); $full_url = $url. '?' .$get_params; var_dump($full_url);
дампы:
$encoded
[{"Article":"H020","Brand":"ИННОВАТОР","SupplierName":"Ростов-на-Дону","CostSale":"7.97","Quantity":1,"SupplierTimeMin":0,"SupplierTimeMax":0,"Comment":"","GioID":0}]``` |
[{"Article":"H020","Brand":"ИННОВАТОР","SupplierName":"Ростов-на-Дону","CostSale":"7.97","Quantity":1,"SupplierTimeMin":0,"SupplierTimeMax":0,"Comment":"","GioID":0}]```
$get_params
items=%5B%7B%22Article%22%3A%22H020%22%2C%22Brand%22%3A%22%D0%98%D0%9D%D0%9D%D0%9E%D0%92%D0%90%D0%A2%D0%9E%D0%A0%22%2C%22SupplierName%22%3A%22%D0%A0%D0%BE%D1%81%D1%82%D0%BE%D0%B2-%D0%BD%D0%B0-%D0%94%D0%BE%D0%BD%D1%83%22%2C%22CostSale%22%3A%227.97%22%2C%22Quantity%22%3A1%2C%22SupplierTimeMin%22%3A0%2C%22SupplierTimeMax%22%3A0%2C%22Comment%22%3A%22%22%2C%22GioID%22%3A0%7D%5D |
items=%5B%7B%22Article%22%3A%22H020%22%2C%22Brand%22%3A%22%D0%98%D0%9D%D0%9D%D0%9E%D0%92%D0%90%D0%A2%D0%9E%D0%A0%22%2C%22SupplierName%22%3A%22%D0%A0%D0%BE%D1%81%D1%82%D0%BE%D0%B2-%D0%BD%D0%B0-%D0%94%D0%BE%D0%BD%D1%83%22%2C%22CostSale%22%3A%227.97%22%2C%22Quantity%22%3A1%2C%22SupplierTimeMin%22%3A0%2C%22SupplierTimeMax%22%3A0%2C%22Comment%22%3A%22%22%2C%22GioID%22%3A0%7D%5D
$full_url
https://xn--80aep1aarf3h.xn--p1ai/SearchService/AddOrder?items=%5B%7B%22Article%22%3A%22H020%22%2C%22Brand%22%3A%22%D0%98%D0%9D%D0%9D%D0%9E%D0%92%D0%90%D0%A2%D0%9E%D0%A0%22%2C%22SupplierName%22%3A%22%D0%A0%D0%BE%D1%81%D1%82%D0%BE%D0%B2-%D0%BD%D0%B0-%D0%94%D0%BE%D0%BD%D1%83%22%2C%22CostSale%22%3A%227.97%22%2C%22Quantity%22%3A1%2C%22SupplierTimeMin%22%3A0%2C%22SupplierTimeMax%22%3A0%2C%22Comment%22%3A%22%22%2C%22GioID%22%3A0%7D%5D |
https://xn--80aep1aarf3h.xn--p1ai/SearchService/AddOrder?items=%5B%7B%22Article%22%3A%22H020%22%2C%22Brand%22%3A%22%D0%98%D0%9D%D0%9D%D0%9E%D0%92%D0%90%D0%A2%D0%9E%D0%A0%22%2C%22SupplierName%22%3A%22%D0%A0%D0%BE%D1%81%D1%82%D0%BE%D0%B2-%D0%BD%D0%B0-%D0%94%D0%BE%D0%BD%D1%83%22%2C%22CostSale%22%3A%227.97%22%2C%22Quantity%22%3A1%2C%22SupplierTimeMin%22%3A0%2C%22SupplierTimeMax%22%3A0%2C%22Comment%22%3A%22%22%2C%22GioID%22%3A0%7D%5D
плюс обращаю внимание на ключи массива: 'article' != 'Article'
- Да остался один АвтоСоюз из 24. И Никак.Подзабил.
Но , допустим есть такой массив с свежими валидными данными:Код
$SendPart = [ 'items' => [ 'article' => "290775П29", 'brand' => "ГАЗ", 'SupplierName' => "Ростов-на-Дону", 'CostSale' => "14.04", 'Quantity' => 1, 'SupplierTimeMin' => 0, 'SupplierTimeMax' => 0, 'Comment' => "", 'GioID' => 77068 ] ];
$SendPart = [ 'items' => [ 'article' => "290775П29", 'brand' => "ГАЗ", 'SupplierName' => "Ростов-на-Дону", 'CostSale' => "14.04", 'Quantity' => 1, 'SupplierTimeMin' => 0, 'SupplierTimeMax' => 0, 'Comment' => "", 'GioID' => 77068 ] ];
Дальше то что с ним сделать ? Как превратить в строку для GET параметра items? К примеру формируем json_encode или и отправляю выше приведенной функцией AddOrder
spoiler
$SendUri= json_encode($SendPart); $data = AddOrder($SendUri);
$SendUri= json_encode($SendPart); $data = AddOrder($SendUri);
Получаю кашу в URL:URL
/SearchService/AddOrder?items=%7B%22items%22%3A%7B%22article%22%3A%22290775%5Cu041f29%22%2C%22brand%22%3A%22%5Cu0413%5Cu0410%5Cu0417%22%2C%22SupplierName%22%3A%22%5Cu0420%5Cu043e%5Cu0441%5Cu0442%5Cu043e%5Cu0432-%5Cu043d%5Cu0430-%5Cu0414%5Cu043e%5Cu043d%5Cu0443%22%2C%22CostSale%22%3A14.04%2C%22Quantity%22%3A%221%22%2C%22SupplierTimeMin%22%3A0%2C%22SupplierTimeMax%22%3A0%2C%22Comment%22%3A%22%22%2C%22GioID%22%3A%2277068%22%7D%7DНу и собственно понятно что все не так {"Error":"Недопустимое значение для параметров article, brand, suppliername, costsale, quantity. Параметры не могут быть пустыми"}
Попробовал еще вот так
spoiler$SendPart = [ [ 'article' => "290775П29", 'brand' => "ГАЗ", 'SupplierName' => "Ростов-на-Дону", 'CostSale' => "14.04", 'Quantity' => 1, 'SupplierTimeMin' => 0, 'SupplierTimeMax' => 0, 'Comment' => "", 'GioID' => 77068 ] ]; $SendUri= json_encode($SendPart); $data = AddOrder($SendUri);
$SendPart = [ [ 'article' => "290775П29", 'brand' => "ГАЗ", 'SupplierName' => "Ростов-на-Дону", 'CostSale' => "14.04", 'Quantity' => 1, 'SupplierTimeMin' => 0, 'SupplierTimeMax' => 0, 'Comment' => "", 'GioID' => 77068 ] ]; $SendUri= json_encode($SendPart); $data = AddOrder($SendUri);
получаю вполне логичный URL
spoiler/SearchService/AddOrder?items=%5B%7B%22article%22%3A%22290775%5Cu041f29%22%2C%22brand%22%3A%22%5Cu0413%5Cu0410%5Cu0417%22%2C%22SupplierName%22%3A%22%5Cu0420%5Cu043e%5Cu0441%5Cu0442%5Cu043e%5Cu0432-%5Cu043d%5Cu0430-%5Cu0414%5Cu043e%5Cu043d%5Cu0443%22%2C%22CostSale%22%3A14.04%2C%22Quantity%22%3A%221%22%2C%22SupplierTimeMin%22%3A0%2C%22SupplierTimeMax%22%3A0%2C%22Comment%22%3A%22%22%2C%22GioID%22%3A%2277068%22%7D%5D
/SearchService/AddOrder?items=%5B%7B%22article%22%3A%22290775%5Cu041f29%22%2C%22brand%22%3A%22%5Cu0413%5Cu0410%5Cu0417%22%2C%22SupplierName%22%3A%22%5Cu0420%5Cu043e%5Cu0441%5Cu0442%5Cu043e%5Cu0432-%5Cu043d%5Cu0430-%5Cu0414%5Cu043e%5Cu043d%5Cu0443%22%2C%22CostSale%22%3A14.04%2C%22Quantity%22%3A%221%22%2C%22SupplierTimeMin%22%3A0%2C%22SupplierTimeMax%22%3A0%2C%22Comment%22%3A%22%22%2C%22GioID%22%3A%2277068%22%7D%5D
Но ошибка что API не видит параметры повторяется..{"Error":"Недопустимое значение для параметров article, brand, suppliername, costsale, quantity. Параметры не могут быть пустыми"}
- IceNix, обновил ответ, у нас всё работает через свою библиотеку, поэтому не сразу заметил хитрости с запаковкой запроса
перевёл принцип работы на чисты php и сравнил с нашим результатом - получается идентично
надеюсь поможет вам - Тёска, Друг !!! Спасибо огромное, просто добавил JSON_UNESCAPED_UNICODE к json_encode и все заработало ! Я даже и не думал в эту сторону - что не стоит кодировать кириллицу, столько потраченного времени ...Спасибо !!
Ответы:
Там же написано массив объектов. Если не знаешь, что это, то можно загуглить. В твоей задаче в PHP примерно следующий вид:
$items = array( 0 => array( 'article' => 'sku22', 'brand' => 'Toyota', 'SupplierName' => 'Kolesa LLP', 'CostSale' => 512 ), 1 => array( 'article' => 'ads2512', 'brand' => 'Nissan', 'SupplierName' => 'RDM', 'CostSale' => 6115 ), ); echo json_encode($items); //Результат [{"article":"sku22","brand":"Toyota","SupplierName":"Kolesa LLP","CostSale":512},{"article":"ads2512","brand":"Nissan","SupplierName":"RDM","CostSale":6115}] |
$items = array( 0 => array( 'article' => 'sku22', 'brand' => 'Toyota', 'SupplierName' => 'Kolesa LLP', 'CostSale' => 512 ), 1 => array( 'article' => 'ads2512', 'brand' => 'Nissan', 'SupplierName' => 'RDM', 'CostSale' => 6115 ), ); echo json_encode($items); //Результат [{"article":"sku22","brand":"Toyota","SupplierName":"Kolesa LLP","CostSale":512},{"article":"ads2512","brand":"Nissan","SupplierName":"RDM","CostSale":6115}]
- Да я тоже думал что все так просто
spoiler
$SendPart[0]['article']= $Part['WebService_Data']['Article']; $SendPart[0]['brand']= $Part['WebService_Data']['brand']; $SendPart[0]['supplierName']= $Part['WebService_Data']['SupplierName']; $SendPart[0]['costSale']= $Part['WebService_Data']['CostSale']; $SendPart[0]['supplierTimeMin']= (int)$Part['WebService_Data']['supplierTimeMin']; $SendPart[0]['supplierTimeMax']= (int)$Part['WebService_Data']['supplierTimeMax']; $SendPart[0]['quantity']= (int)$Part['count']; $SendPart[0]['comment']=$Comment; $SendPart[0]['GioID']= (int)$Part['parts_id']; $items =json_encode($SendPart);
$SendPart[0]['article']= $Part['WebService_Data']['Article']; $SendPart[0]['brand']= $Part['WebService_Data']['brand']; $SendPart[0]['supplierName']= $Part['WebService_Data']['SupplierName']; $SendPart[0]['costSale']= $Part['WebService_Data']['CostSale']; $SendPart[0]['supplierTimeMin']= (int)$Part['WebService_Data']['supplierTimeMin']; $SendPart[0]['supplierTimeMax']= (int)$Part['WebService_Data']['supplierTimeMax']; $SendPart[0]['quantity']= (int)$Part['count']; $SendPart[0]['comment']=$Comment; $SendPart[0]['GioID']= (int)$Part['parts_id']; $items =json_encode($SendPart);
$items =
[{"article":"290775u041f29","brand":"u0413u0410u0417","supplierName":"u0420u043eu0441u0442u043eu0432-u043du0430-u0414u043eu043du0443","costSale":14.039999999999999,"supplierTimeMin":0,"supplierTimeMax":0,"quantity":1,"comment":"","GioID":77068}]
В том то и дело что не работает
Готовый URL :spoiler
/SearchService/AddOrder?items=%5B%7B%22article%22%3A%22290775%5Cu041f29%22%2C%22brand%22%3A%22%5Cu0413%5Cu0410%5Cu0417%22%2C%22supplierName%22%3A%22%5Cu0420%5Cu043e%5Cu0441%5Cu0442%5Cu043e%5Cu0432-%5Cu043d%5Cu0430-%5Cu0414%5Cu043e%5Cu043d%5Cu0443%22%2C%22costSale%22%3A14.039999999999999%2C%22supplierTimeMin%22%3A0%2C%22supplierTimeMax%22%3A0%2C%22quantity%22%3A1%2C%22comment%22%3A%22%22%2C%22GioID%22%3A77068%7D%5D - IceNix, запомни, что фраза "не работает" не дает ничего, от слова "совсем". Какой ответ ответа от API, текст ошибки? Полный код реализации покажи, а то получается гадание какое-то
- {"Error":"Недопустимое значение для параметров article, brand, suppliername, costsale, quantity. Параметры не могут быть пустыми"}
-
В переменной $Part необходимые данные валидные $SendPart[0]['article']= $Part['WebService_Data']['Article']; $SendPart[0]['brand']= $Part['WebService_Data']['brand']; $SendPart[0]['suppliername']= $Part['WebService_Data']['SupplierName']; $SendPart[0]['costsale']= $Part['WebService_Data']['CostSale']; $SendPart[0]['suppliertimemin']= $Part['WebService_Data']['supplierTimeMin']; $SendPart[0]['suppliertimemax']= $Part['WebService_Data']['supplierTimeMax']; $SendPart[0]['quantity']= (int)$Part['count']; $SendPart[0]['comment']=$Comment; $SendPart[0]['gioid']= (int)$Part['parts_id']; $SendUri=json_encode($SendPart); $data = $PrtAS->AddOrder($SendUri); public function AddOrder($SendUri) { $url = $this->url.'/SearchService/AddOrder?items='.urlencode($SendUri).''; $auth = base64_encode($this->login.":".$this->pass); $arrContextOptions=array( "ssl"=>array( "verify_peer"=>false, "verify_peer_name"=>false, ), "http"=>array( "header"=>"Authorization: Basic $auth", 'ignore_errors' => true, ), ); try { $result = file_get_contents($url,false, stream_context_create($arrContextOptions)); if($result==false){ throw new Exception('Error'); } else { //$result=json_decode($result, true); } }catch (Exception $e) { $result['Error']="file_get_contents Error"; } echo $url; return $result; }
В переменной $Part необходимые данные валидные $SendPart[0]['article']= $Part['WebService_Data']['Article']; $SendPart[0]['brand']= $Part['WebService_Data']['brand']; $SendPart[0]['suppliername']= $Part['WebService_Data']['SupplierName']; $SendPart[0]['costsale']= $Part['WebService_Data']['CostSale']; $SendPart[0]['suppliertimemin']= $Part['WebService_Data']['supplierTimeMin']; $SendPart[0]['suppliertimemax']= $Part['WebService_Data']['supplierTimeMax']; $SendPart[0]['quantity']= (int)$Part['count']; $SendPart[0]['comment']=$Comment; $SendPart[0]['gioid']= (int)$Part['parts_id']; $SendUri=json_encode($SendPart); $data = $PrtAS->AddOrder($SendUri); public function AddOrder($SendUri) { $url = $this->url.'/SearchService/AddOrder?items='.urlencode($SendUri).''; $auth = base64_encode($this->login.":".$this->pass); $arrContextOptions=array( "ssl"=>array( "verify_peer"=>false, "verify_peer_name"=>false, ), "http"=>array( "header"=>"Authorization: Basic $auth", 'ignore_errors' => true, ), ); try { $result = file_get_contents($url,false, stream_context_create($arrContextOptions)); if($result==false){ throw new Exception('Error'); } else { //$result=json_decode($result, true); } }catch (Exception $e) { $result['Error']="file_get_contents Error"; } echo $url; return $result; }
- IceNix,
{"Error":"Недопустимое значение для параметров article, brand, suppliername, costsale, quantity. Параметры не могут быть пустыми"}
ну так что не понятно? проверяйте что попадает в эти поля, очевидно что какая-то лажа с отправляемыми данными.
- ThunderCat, параметры имеются, не пустые , валидные, готовый json выдающий ошибку.
{"article":"290775u041f29","brand":"u0413u0410u0417","supplierName":"u0420u043eu0441u0442u043eu0432-u043du0430-u0414u043eu043du0443","costSale":14.039999999999999,"supplierTimeMin":0,"supplierTimeMax":0,"quantity":1,"comment":"","GioID":77068}] - IceNix, а где здесь квадратные скобки?
- $items =
[{"article":"290775u041f29","brand":"u0413u0410u0417","supplierName":"u0420u043eu0441u0442u043eu0432-u043du0430-u0414u043eu043du0443","costSale":14.039999999999999,"supplierTimeMin":0,"supplierTimeMax":0,"quantity":1,"comment":"","GioID":77068}]Все есть, скопировал со своего же ответа под спойлером выше неверно.
- Не хотелось, но придется мучать тех поддержку . Всем спасибо. Быстрого решения явно нет.
- IceNix,
$items = array( 0 => array( 'article' => 'sku22', 'brand' => 'Toyota', 'SupplierName' => 'Kolesa LLP', 'CostSale' => 512 ), 1 => array( 'article' => 'ads2512', 'brand' => 'Nissan', 'SupplierName' => 'RDM', 'CostSale' => 6115 ), ); $SendUri= http_build_query(['items' => $items]); public function AddOrder($SendUri) { $url = $this->url.'/SearchService/AddToBasket?'.$SendUri; $auth = base64_encode($this->login.":".$this->pass); $arrContextOptions=array( "ssl"=>array( "verify_peer"=>false, "verify_peer_name"=>false, ), "http"=>array( "header"=>"Authorization: Basic $auth", 'ignore_errors' => true, ), ); try { $result = file_get_contents($url,false, stream_context_create($arrContextOptions)); if($result==false){ throw new Exception('Error'); } else { //$result=json_decode($result, true); } }catch (Exception $e) { $result['Error']="file_get_contents Error"; } echo $url; return $result; }
$items = array( 0 => array( 'article' => 'sku22', 'brand' => 'Toyota', 'SupplierName' => 'Kolesa LLP', 'CostSale' => 512 ), 1 => array( 'article' => 'ads2512', 'brand' => 'Nissan', 'SupplierName' => 'RDM', 'CostSale' => 6115 ), ); $SendUri= http_build_query(['items' => $items]); public function AddOrder($SendUri) { $url = $this->url.'/SearchService/AddToBasket?'.$SendUri; $auth = base64_encode($this->login.":".$this->pass); $arrContextOptions=array( "ssl"=>array( "verify_peer"=>false, "verify_peer_name"=>false, ), "http"=>array( "header"=>"Authorization: Basic $auth", 'ignore_errors' => true, ), ); try { $result = file_get_contents($url,false, stream_context_create($arrContextOptions)); if($result==false){ throw new Exception('Error'); } else { //$result=json_decode($result, true); } }catch (Exception $e) { $result['Error']="file_get_contents Error"; } echo $url; return $result; }
- IceNix,
параметры имеются, не пустые , валидные, готовый json выдающий ошибку.
ну, как минимум "costSale":14.039999999999999 не соответствует ожидаемому типу double, который у вас флоат...
Хинт: Цену нельзя хранить в флоате, для этого есть другие, более подходящие форматы, например int или decimal.
В конце документации внимательно читали ? Там меж строк проскакивает, что бакенд скорее всего написан на сишарпе. И как понимаю их велосипед разбора параметров отличается от PHP.
Так, что внимательно на все их уточнения.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

Для того чтобы составить запрос к API на PHP, вам понадобится использовать функции и инструменты, предоставляемые этим языком программирования. Вот пример того, как можно сделать запрос к API с использованием PHP: