За последние 24 часа нас посетили 21778 программистов и 1012 роботов. Сейчас ищут 669 программистов ...

Как передать изображение пользователю в Битрикс24 CRM ?

Тема в разделе "Решения, алгоритмы", создана пользователем Алексей Др, 30 июн 2020.

Метки:
  1. Алексей Др

    Алексей Др Новичок

    С нами с:
    28 авг 2018
    Сообщения:
    36
    Симпатии:
    0
    Есть тут, кто нибудь, кто в программировании на Битрикс разбирается ?
    Я путаюсь написать файл обработчик, который отредактирует пользователя со стороннего ресурса.
    Проблемы с тем, как передать ему файл с фотографией пользователя.
    Код (Text):
    1. $file=file_get_contents("https://xxx/image.jpg");
    2.  
    3. $data="user.update?".http_build_query(
    4.         [
    5.             "ID"=>"38",
    6.             "PERSONAL_PHOTO"=>$file
    7.         ]
    8.     );
    9. $ch = curl_init('https://xxx.bitrix24.ru/rest/1/xxx/'.$data);
    10. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    11. $response=curl_exec($ch);
    12. curl_close($ch);
    13. var_dump($response);
    Выдает "414 Request-URI Too Large".
    Пробовал просто адрес изображения передать
    Код (Text):
    1.             "PERSONAL_PHOTO=>"https://xxx/image.jpg"
    Он выдает "неверный тип файла".
    Как эту картинку правильно передать ?
     
  2. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Параметр PERSONAL_PHOTO явно не в адресе должен передаваться ;)
     
  3. Алексей Др

    Алексей Др Новичок

    С нами с:
    28 авг 2018
    Сообщения:
    36
    Симпатии:
    0
    Читал, что от "414 Request-URI Too Large" может помочь передача POST запроса вместо GET, А как её правильно организовать ?
    Вариант
    Код (Text):
    1. $file=file_get_contents("https://xxx/image.jpg");
    2.  
    3. $data="user.update?".http_build_query(
    4.         [
    5.             "ID"=>"38",
    6.             "PERSONAL_PHOTO"=>$file
    7.         ]
    8.     );
    9. $ch = curl_init('https://xxx.bitrix24.ru/rest/1/xxx/'.$data);
    10. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    11. curl_setopt($ch, CURLOPT_POST, true);
    12. $response=curl_exec($ch);
    13. curl_close($ch);
    14. var_dump($response);
    не помогает.
     
  4. Алексей Др

    Алексей Др Новичок

    С нами с:
    28 авг 2018
    Сообщения:
    36
    Симпатии:
    0
    Нашел способ передачи, на который ошибка 414 не появляется.
    Код (Text):
    1. $file=base64_encode(file("https://xxx/image"));
    2. $data=http_build_query(
    3.         [
    4.             "ID"=>"38",
    5.             "PERSONAL_PHOTO"=>$file
    6.         ]
    7.     );
    8. $ch = curl_init('https://xxx.bitrix24.ru/rest/1/xxx/user.update');
    9. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    10. curl_setopt($ch, CURLOPT_POST, true);
    11. curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    12. $response=curl_exec($ch);
    13. curl_close($ch);
    14. var_dump($response);
    Вот только при такой записи фото пользователя не меняется, а при
    Код (Text):
    1. $file=file("https://xxx/image");
    Просто слетает уже имеющееся изображение.
    На попытку задать $file через file_get_contents что с шифрованием через base64 что без него реагирует как на неправильный тип файла.
    В каком виде задать "PERSONAL_PHOTO", чтобы этот запрос прошел ?