Интеграция с ПОС Госуслуги (витрина), не могу отправить файл csv
Кто проходил этот слабо документированный квест, пожалуйста, откликнитесь. Речь идёт о Витрине ПОС Госуслуг, когда статистические данные о городских проблемах и жалобах отправляем из города --> в Москву. Это вот отсюда
Проблема: при отправке файла CSV на точку /analytic-service/statistic-data получаем ответ null со статусом 400. Пробовали отправлять и на тест, и на прод.
$url="$gosusREST/analytic-service/statistic-data";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_POST , 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, ['file' => $csv, "type"=>"application/vnd.ms-excel"]);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer '.$resultAuth["access_token"],
"Content-Type: multipart/form-data",
));
$rawdata=curl_exec($curl);
Ключи авторизации верные, далее получаем валидные токены, и даже приём есть, а передачи нет! Если поломать bearer, сервер ответит
401 {"error":"unauthorized","error_description":"Full authentication is required to access this resource"}
...то есть сервер жив. Но как понять пустой ответ 400 и что может быть у них не так?
Ответы (1 шт):
Успешный вариант отправки отличается в 3 местах: file, ssl и httpauth. Файл надо предварительно сохранить на диск.
...
curl_setopt($curl, CURLOPT_POSTFIELDS, ['file' => new CURLFile($tempFilename), "type"=>"application/vnd.ms-excel"]);//только так! а иначе 500
//curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible;)"); //не надо
curl_setopt($curl, CURLOPT_AUTOREFERER, TRUE);
curl_setopt($curl, CURLOPT_FRESH_CONNECT, 1);
curl_setopt($curl, CURLOPT_FORBID_REUSE, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, 100);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
//curl_setopt($curl, CURLOPT_HEADER, true);//чтобы выдало заголовки, но они тут неинформативные
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
...
А недокументированный код ответа 400, это если file пытаться послать прямым вложением.