Я работаю над приложением в WordPress, которому нужна возможность загрузить отчет. Когда пользователь выберет опцию экспорта, я позвоню в API Wordpress rest, который вызовет API клиента, который генерирует и возвращает необходимый отчет. При экспорте в csv все работает нормально, но при попытке экспортировать xlsx файл «поврежден». Вызов конечной точки API клиента напрямую через почтальон работает и возвращает функциональный файл Excel. Но при выполнении точно такого же вызова через wordpress возвращается буквальное строковое значение файла, заключенное в кавычки и с escape-символами для символов без визуального представления (например, байт значения 0x14 возвращается как \ n0020). У меня есть все комбинации установки заголовка типа контента на application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
, application/octet-stream
и кодировки контента на двоичный код.
Код wordpress, выполняющий вызов API и возвращающий результат, равен
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $endpoint);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, false);
$data = curl_exec($ch);
$err = curl_error($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$array_data;
if ($err)
{
$resData['message'] = "cURL Error #:" . $err;
}
else if( $code === 401 )
{
$resData['message'] = "Client session has expired. Please re login.";
}
else
{
$resData = $data;
}
$debug["endpoint"] = $endpoint;
$debug["token"] = $token;
return $resData;