Загрузка вложений

При добавлении/обновлении записи через API у вас есть возможность передать вложения для полей типа Вложения, Файл, Изображения. Существует два способа загрузки файл:

1) Передать файл по ссылке

$item = array(
  'field_158' => 'Test api PROJECT ',
  'field_242' => 'https://www.rukovoditel.net.ru/images/docs/dogovor_template.docx',
  'field_162' => 'https://www.rukovoditel.net.ru/images/docs/dogovor_template.jpg',
);

Для поля вложения можно передать несколько ссылок через запятую

2) Передать содержимое файла.

$files = [];
$files[] = ['name'=>'file1.pdf','content'=>base64_encode(file_get_contents('file1.pdf'))];
$files[] = ['name'=>'file2.jpg','content'=>base64_encode(file_get_contents('file2.jpg'))];

$item = array(
  'field_158' => 'Test api project ',
  'field_162' =>$files, 	
);

В данном примере поле field_162 - это поле с типом "Вложения". В данное поле передаются массив из двух файлов. В массиве указано название файла и его контент. Контент необходимо закодировать в base64

Обновление вложений

При обновлении записи может возникнуть необходимость добавить вложение к уже существующим фалам. Что бы обновить вложения, вначале нужно получить название фалов уже существующей записи и в последствии передать только названия фалов, без параметра "content". 

//получаем данные записи #33
$params = array(
  'key' => '58p3crBBgK8Y5wzN5QIjI0cHeG78uibvt9xyuZaa',  
  'username' => 'admin',
  'password' => 'admin',
  'action' => 'select',
  'entity_id' => 21,
  'select_fields' => '162',
  'filters' => ['id'=>33],
);

//...

$result = json_decode($result,true);

//Добавляем название существующих файлов, без параметра "content"
$files = [];
foreach(explode(',',$result['data'][0][162]) as $filename)
{
  $files[] = ['name'=>$filename];
}

//Добавляем новые файлы
$files[] = ['name'=>'file3.jpg','content'=>base64_encode(file_get_contents('file3.jpg'))];

$data = array(
  'field_158' => 'Test api project upd ' . date('Y-m-d H:i:s'),
  'field_162' =>$files, 	
);

Скачивание вложений 

Новая возможность для версии 3.6

Для скачивания файла через API существует метод download_attachment.  При вызове метода вам необходимо передать ID записи и ID поля в котором хранится файл.

$params = array(
  'key' => 'KUhUvp8sGZv1vIlQATEQXr4HJT4SsWEjd8LWGSN6',  
  'username' => 'admin',
  'password' => 'admin',
  'action' => 'download_attachment',
  'entity_id' => 21,
  'item_id' => 1,
  'field_id' => 207,	
);
 						                                    
$ch = curl_init('http://localhost/rukovoditel/product_3.6/api/rest.php');
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);			
$result = curl_exec($ch);
curl_close($ch);

if($result)
{
  $result = json_decode($result,true);
  if($result['status']=='success')
  {
    file_put_contents($result['data']['filename'], base64_decode($result['data']['content']));
  }
}

При успешном выполнении программа возвращает название файла $result['data']['filename'] и его содержимое  $result['data']['content'] в кодировке base64.

Обратите внимание: если в поле хранится несколько файлов, будет возвращен zip архив со всеми файлами.