Я использую PHP на сервере Win10 XAMPP для отправки запроса скручивания в BambooHR, чтобы он загрузил файл сотруднику.
Когда я тестирую его на Postman на рабочем столе, он работает правильно, и файл поступает в BambooHR. Когда я копирую PHP curl из Postman и внедряю его как можно точнее в PHP, используя curl, он просто отключается.
Я могу сделать запрос, используя другие вызовы API BambooHR, и он работает, и отправка и получение данных, но не загрузка файла.
Когда я реализую curl, который обращается к их бэкэнду без истечения времени ожидания, API BambooHR последовательно возвращает ошибку 400.
Я работал с поддержкой BambooHR для вызовов curl, хотя они не могут работать с самим кодом. Они пришли к выводу, что поскольку Postman работает, а PHP curl - нет, проблема не заканчивается.
Есть ли здесь кто-нибудь с опытом написания PHP загрузки curl-файла в BambooHR?
$b64Doc = "";
$b64Doc = chunk_split(base64_encode(file_get_contents($filepathname)));
$postpathname = str_replace("\\" ,"/" ,$filepathname);
$postpathname = "/" . $postpathname;
$sep = "--WebKitFormBoundary7MA4YWxkTrZu0gW";
$postfields = "\r\n"
. "\r\n{$sep}\r\nContent-Disposition: form-data; name=\"category\"\r\n\r\n17"
. "\r\n{$sep}\r\nContent-Disposition: form-data; name=\"fileName\"\r\n\r\n{$docname}"
. "\r\n{$sep}\r\nContent-Disposition: form-data; name=\"share\"\r\n\r\nyes"
. "\r\n{$sep}\r\nContent-Disposition: form-data; name=\"file\"; filename=\"{$postpathname}\"\r\nContent-Type: application/pdf\r\n\r\n"
. $b64Doc
. "\r\n\r\n"
. "\r\n{$sep}--"
;
$lenFields = strlen($postfields); $this->writemessage($fn, " postfield length = " . $lenFields);
$lenFile = filesize($filepathname); $this->writemessage($fn, " file length = " . $lenFile);
$lenTotal = ($lenFields); $this->writemessage($fn, " total length = " . $lenTotal);
$this->writemessage($fn, " \npostfields = \n$postfields");
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_ENCODING ,"");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_TIMEOUT ,0);
curl_setopt($curl, CURLOPT_HTTP_VERSION , CURL_HTTP_VERSION_1_1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'Authorization: Basic ' . base64_encode("{$this->apiKey}:x")
,"Host: api.bamboohr.com"
,"Content-Type: application/pdf"
,"content-type: multipart/form-data; boundary=$sep"
,"Content-length: $lenTotal"
));
curl_setopt($curl, CURLOPT_POSTFIELDS ,$postfields);
$response = curl_exec($curl);
$this->writemessage($fn, " Processed curl.");
$arrRet['thereturn'] = print_r($response ,true);
$errNo = curl_errno($curl);
$errTxt = curl_error($curl);
$this->writemessage($fn, "cURL Error #:$errNo => $errTxt");