Discussions

Ask a Question
Back to All

Post a document with PHP

Hello,

I'm trying to Upload a file with PHP. I took the example code from
https://developer.personio.de/reference#auth-1 and
https://developer.personio.de/reference#post_v1-recruiting-applications-documents

$token = NULL;

$curl = curl_init();

$params = [
  'client_id' => 'abc',
  'client_secret' => 'abc',
];

$url = 'https://api.personio.de/v1/auth?' . http_build_query($params);

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => TRUE,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Accept: application/json",
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
}
else {
  $data = json_decode($response);
  $token = $data->data->token;
}

if ($token) {
  $curl = curl_init();

  //$path = '/var/www/html/web/some.pdf';
  //$post_data[] = curl_file_create($path, 'application/pdf', 'some.pdf');

  curl_setopt_array($curl, [
    CURLOPT_URL => "https://api.personio.de/v1/recruiting/applications/documents",
    CURLOPT_RETURNTRANSFER => TRUE,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "POST",
    //CURLOPT_POSTFIELDS => $post_data,
    //CURLOPT_POSTFIELDS => [
    //  'token' => $token,
    //  'file' => '@/var/www/html/web/some.pdf',
    //],
    CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\ndata:application/pdf;name=Test.pdf;base64,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1znv7kzJafWfxqCWEKhtvk+umQoai78n9M4nV37ft5d0YgplbmRzdHJlYW0KZW5kb2JqCgo5IDAgb2JqCjw8L1R5cGUvRm9udC9TdWJ0eXBlL1RydWVUeXBlL0Jhc2VGb250L0JBQUFBQStMaWJlcmF0aW9uU2VyaWYKL0ZpcnN0Q2hhciAwCi9MYXN0Q2hhciA0Ci9XaWR0aHNbNzc3IDYxMCA0NDMgMzg5IDI3NyBdCi9Gb250RGVzY3JpcHRvciA3IDAgUgovVG9Vbmljb2RlIDggMCBSCj4+CmVuZG9iagoKMTAgMCBvYmoKPDwvRjEgOSAwIFIKPj4KZW5kb2JqCgoxMSAwIG9iago8PC9Gb250IDEwIDAgUgovUHJvY1NldFsvUERGL1RleHRdCj4+CmVuZG9iagoKMSAwIG9iago8PC9UeXBlL1BhZ2UvUGFyZW50IDQgMCBSL1Jlc291cmNlcyAxMSAwIFIvTWVkaWFCb3hbMCAwIDU5NS4zMDM5MzcwMDc4NzQgODQxLjg4OTc2Mzc3OTUyOF0vR3JvdXA8PC9TL1RyYW5zcGFyZW5jeS9DUy9EZXZpY2VSR0IvSSB0cnVlPj4vQ29udGVudHMgMiAwIFI+PgplbmRvYmoKCjQgMCBvYmoKPDwvVHlwZS9QYWdlcwovUmVzb3VyY2VzIDExIDAgUgovTWVkaWFCb3hbIDAgMCA1OTUgODQxIF0KL0tpZHNbIDEgMCBSIF0KL0NvdW50IDE+PgplbmRvYmoKCjEyIDAgb2JqCjw8L1R5cGUvQ2F0YWxvZy9QYWdlcyA0IDAgUgovT3BlbkFjdGlvblsxIDAgUiAvWFlaIG51bGwgbnVsbCAwXQovTGFuZyhkZS1ERSkKPj4KZW5kb2JqCgoxMyAwIG9iago8PC9DcmVhdG9yPEZFRkYwMDU3MDA3MjAwNjkwMDc0MDA2NTAwNzI+Ci9Qcm9kdWNlcjxGRUZGMDA0QzAwNjkwMDYyMDA3MjAwNjUwMDRGMDA2NjAwNjYwMDY5MDA2MzAwNjUwMDIwMDAzNjAwMkUwMDMxPgovQ3JlYXRpb25EYXRlKEQ6MjAxODEwMjYxMjI4MDUrMDInMDAnKT4+CmVuZG9iagoKeHJlZgowIDE0CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwNTcxNSAwMDAwMCBuIAowMDAwMDAwMDE5IDAwMDAwIG4gCjAwMDAwMDAxOTggMDAwMDAgbiAKMDAwMDAwNTg4NCAwMDAwMCBuIAowMDAwMDAwMjE4IDAwMDAwIG4gCjAwMDAwMDQ5MjggMDAwMDAgbiAKMDAwMDAwNDk0OSAwMDAwMCBuIAowMDAwMDA1MTQ0IDAwMDAwIG4gCjAwMDAwMDU0NTMgMDAwMDAgbiAKMDAwMDAwNTYyOCAwMDAwMCBuIAowMDAwMDA1NjYwIDAwMDAwIG4gCjAwMDAwMDU5ODMgMDAwMDAgbiAKMDAwMDAwNjA4MCAwMDAwMCBuIAp0cmFpbGVyCjw8L1NpemUgMTQvUm9vdCAxMiAwIFIKL0luZm8gMTMgMCBSCi9JRCBbIDwxQjlGRjNGNkE3MDE5MzhEMzYxMUJFOTQ2NTg0QjFEQj4KPDFCOUZGM0Y2QTcwMTkzOEQzNjExQkU5NDY1ODRCMURCPiBdCi9Eb2NDaGVja3N1bSAvMTk1MThCRDUxQ0Y4MEVGMzc4RUIzRTY0QkE3QkVDNzkKPj4Kc3RhcnR4cmVmCjYyNTUKJSVFT0YK\r\n-----011000010111000001101001--\r\n\r\n",
    CURLOPT_HTTPHEADER => [
      "Authorization: Bearer $token",
      "Accept: application/json",
      "Content-Type: multipart/form-data; boundary=---011000010111000001101001",
    ],
  ]);
  $response = curl_exec($curl);
  $err = curl_error($curl);

  curl_close($curl);

  if ($err) {
    echo "cURL Error #:" . $err;
  }
  else {
    echo $response;
  }
}

Receiving a token works fine, but the response from the second request is just empty. I also tried different options of attaching the file to the curl command without any success.

Could you point me in the right direction?

regards
Hendrik