@thinksdifferent

Как правильно сделать запрос через php curl к вб?

Добрый день. Помогите сделать правильный запрос к вб.
Условия (https://openapi.wb.ru/content/api/ru/#tag/Mediafaj...) :
Authorizations:HeaderApiKey
header Parameters
X-Vendor-Code
required

string
Example: 6000000001

Артикул продавца
X-Photo-Number
required

integer
Example: 2

Номер медиафайла на загрузку. Начинать с 1.
При загрузке видео всегда указывать значение 1.
Чтобы добавить фото к уже загруженным в НМ, номер медиафайла должен быть больше кол-ва загруженных в НМ медиафайлов.
Request Body schema: multipart/form-data
uploadfile
string

Мой код
if($result !=''){
  $character_object = photos($_POST['ARTICLE'], 1, $post_data, $boundary);
  echo "<pre>";
  print_r($character_object) ;
  echo "</pre>";
}

 function build_data_files($boundary, $fields, $files){
    $data = '';
    $eol = "\r\n";

    $delimiter = '-------------' . $boundary;

    foreach ($fields as $name => $content) {
        $data .= "--" . $delimiter . $eol
              . 'Content-Disposition: form-data; name="' . $name . "\"".$eol.$eol
              . $content . $eol;
    }

  foreach ($files as $name => $content) {
        $data .= "--" . $delimiter . $eol
              . 'Content-Disposition: form-data; name="' . $name . '"; filename="' . $name . '"' . $eol
              . 'Content-Type: image/webp'.$eol
              . 'Content-Transfer-Encoding: binary'.$eol;
    
        $data .= $eol;
        $data .= $content . $eol;
    }
    $data .= "--" . $delimiter . "--".$eol;

    return $data;
}

$delimiter = '-------------' . $boundary;
    

    $headers = [
      "Authorization: api key",
      "Content-Type: multipart/form-data; boundary=" . $delimiter ,
      "X-Vendor-Code:".(string)$article,
      "X-Photo-Number:".(int)$photo_number,  
    ];

    $url = 'https://suppliers-api.wildberries.ru/content/v1/media/file'; 
    
    $options = [
        CURLOPT_URL => $url,
        CURLOPT_CUSTOMREQUEST => 'POST', 
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POSTFIELDS => $post_data,
        CURLOPT_HTTPHEADER => $headers,
    ];

    $ch = curl_init();

    curl_setopt_array($ch, $options);
    $result = curl_exec($ch);
    curl_close($ch);
      
    return ['res' => $result,  'option' => $options]; 
    
}


Ответ приходит с ошибкой :

{"additionalErrors":null,"data":null,"error":true,"errorText":"Невозможно определить mime-тип файла; поддерживаемые форматы: изображения (\"image/bmp\", \"image/gif\", \"image/jpeg\", \"image/png\", \"image/webp\"), видео (\"video/mp4\", \"video/quicktime\")"}

post data :
[10002] => https://suppliers-api.wildberries.ru/content/v1/me...
[10036] => POST
[19913] => 1
[10015] => ---------------65735da51ff36
Content-Disposition: form-data; name="uploadfile"

https://www.сайт.ru/upload/resize_cache/webp/ibloc...
---------------65735da51ff36--

header :

[1] => Content-Type: multipart/form-data; boundary=-------------65735da51ff36
[2] => X-Vendor-Code:11129
[3] => X-Photo-Number:1
  • Вопрос задан
  • 575 просмотров
Решения вопроса 1
@WitER
Для начала вам стоит правильно подготовить данные о файле, например(у вас же в $photo - путь к файлу хранится?):
$filePhoto = new \CURLFile($photo, 'image/png', 'photo_' . $photo_number . '.png');


После чего в опциях указать:
$options = [
// ...
    CURLOPT_POSTFIELDS => ['uploadfile' => $filePhoto]
];
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
IvanU7n
@IvanU7n
тут JSON не поможет: https://ru.wikipedia.org/wiki/Multipart/form-data
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
01 мая 2024, в 02:11
5000 руб./за проект
01 мая 2024, в 00:29
2000 руб./за проект
01 мая 2024, в 00:20
15000 руб./за проект