Какие различия существуют между почтальоном и вызовом BambooHR php curl? - PullRequest
0 голосов
/ 14 февраля 2020

Я использую 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");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...