@mirexdoors

Как изменить заголовок curl запроса?

здравствуйте! Делаю интеграцию с Омнидеском и столкнулся со следующей проблемой: необходимо отправлять комментарий с прикрепленным файлом. В доках Омнидеска описано так:
Важно! Содержание отправляемого запроса должно быть в виде multipart/form-data.
{
  "message" : {
    "message_id" : 2001,
    "user_id" : 0,
    "staff_id" : 123,
    "content" : "I need help",
    "content_html" : "",
    "attachments" : [
      {
          "file_id" : 345,
          "file_name" : "test.jpg",
          "file_size" : 40863,
          "mime_type" : "image/jpeg",
          "url" : "https://[domain].omnidesk.ru/some_path_here/345"
      },
      {
          "file_id" : 346,
          "file_name" : "new.jpg",
          "file_size" : 50863,
          "mime_type" : "image/jpeg",
          "url" : "https://[domain].omnidesk.ru/some_path_here/346"
      }
    ],
    "note" : false,
    "created_at" : "Mon, 06 May 2014 00:15:17 +0300",
  }
}
}

и пример:
curl -u [staff_email]:[api_key] -F "message[attachments][0]=@/path/to/file1.ext" -F "message[attachments][1]=@/path/to/file2.ext" -F "message[content]=I need help" -F "message[staff_id]=123" -X POST https://[domain].omnidesk.ru/api/cases/200/messages.json


Я формирую массив для отправки:
$request = array(
                "message" => array(
                    "staff_id" => "xxxxx",
                    "content_html" => $resultMessage
                )
            );

            if (!empty($messageArray['attach'])) {
                foreach ($messageArray['attach'] as $key => $attach) {
                    $attachArray = array();
                    $attachArray['file_id'] = $key;
                    $attachArray['file_name'] = $attach['name'];
                    $attachArray['url'] = $attach['url'];
                    $request['message']['attachments'][] = $attachArray;
                }
            }

            $queryData = http_build_query($request);

            $curl = curl_init();
            curl_setopt_array($curl, array(
                CURLOPT_USERPWD => "xxx@xxx.ru:" . self::TOKEN,
                CURLOPT_SSL_VERIFYPEER => 0,
                CURLOPT_HTTPHEADER => array('Content-Type: multipart/form-data'),
                CURLOPT_HEADER => 0,
                CURLOPT_RETURNTRANSFER => 1,
                CURLOPT_POSTFIELDS => $queryData,
                CURLOPT_URL => $url
            ));
            $result = curl_exec($curl);
            curl_close($curl);

В $request['message']['attachments'] - всё есть, сообщение в Омнидеск уходит, но вот файл - нет. Заголовок на формдату тоже не меняется.
Смотрю логи, а там исходящий запрос выглядит так:
"message": {
        "message_id": 45609717,
        "user_id": 0,
        "staff_id": xxxxx,
        "content": "",
        "content_html": "ss",
        "attachments": [],
        "note": false,
        "sent_via_rule": false,
        "created_at": "Fri, 09 Nov 2018 17:49:16 +0200",
        "parent_id": 0
    }
}


Спасибо!
  • Вопрос задан
  • 468 просмотров
Пригласить эксперта
Ответы на вопрос 2
toxa82
@toxa82
Чтоб заголовок был multipart/form-data нужно CURLOPT_POSTFIELDS передавать в виде массива. А файл нужно передавать с помощью объекта CURLFile. Читайте мануал про CURLOPT_POSTFIELDS, там обе ваши проблемы и описаны.
Ответ написан
Комментировать
dimonchik2013
@dimonchik2013
non progredi est regredi
1) декомпозиция
2) обработка fiddler 'om работающего примера
3) инфа для благодарных сллушателей - ссылка на где что написано
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы