Нужно передавать в кассу бифит по апи csv-файл с товарами.
У них есть
документация (в конце, importCsvData).
Использую такой POST-запрос через curl
$url = "https://kassa.bifit.com/cashdesk-api/v1/protected/exchange/csv/upload?organization_id=1611916961259-481504684&charset=UTF-8";
$post_data = array (
);
$post_data['file'] = new \CurlFile('file.csv', 'text/csv', 'file.csv');
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data', $authorization ));
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// Указываем, что у нас POST запрос
curl_setopt($ch, CURLOPT_POST, 1);
// Добавляем переменные
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$output = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo 'http code: ' . $http_code; // Выведет: 0
echo $output;
Почему-то при передаче файла не возвращается ответ от сервера, а возвращается http_code 0. Как понимаю, ошибка.
Если не передавать файл, то ответ от сервера возвращается, но соответственно ругается на отсутствие файла в теле запроса.
Попробовал логировать запрос - судя по логу, соединение просто закрывается или я чего-то не понимаю
* Trying 109.232.254.149...
* TCP_NODELAY set
* Connected to kassa.bifit.com (109.232.254.149) port 443 (#0)
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
CAfile: c:/ospanel/modules/php/PHP_5.6/cacert.pem
CApath: none
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server accepted to use http/1.1
* Server certificate:
* subject: CN=kassa.bifit.com
* start date: Jan 8 09:10:59 2021 GMT
* expire date: Apr 8 09:10:59 2021 GMT
* subjectAltName: host "kassa.bifit.com" matched cert's "kassa.bifit.com"
* issuer: C=US; O=Let's Encrypt; CN=R3
* SSL certificate verify ok.
* Closing connection 0
В чем может быть проблема? Куда копать, как дебажить?
UPD:
При таком же запросе через
https://web.postman.co/ всё корректно работает. Так что проблема точно в прикреплении файла curl'ом