Сохранить smartsheet как.xls на сервере (curl / php)

Я хочу сохранить смарт-лист на моем сервере (как.xls). Но я всегда получаю.xls, заполненный JSON-кодом. Я получаю "file_put error", если я использую json_decode (..) и.xls полностью пуст. Если я делаю это с помощью curl на своем рабочем столе, я получаю нужные.xls, заполненные всем, что мне нужно.

$baseURL = "https://api.smartsheet.com/1.1";
$headers = array("Authorization: Bearer ".$inputToken);
.
.
array_push($headers,'"Accept: application/vnd.ms-excel" -o  tmpfile.xls --insecure');
$curlSession = curl_init($sheetDetail_url);
curl_setopt($curlSession, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curlSession, CURLOPT_RETURNTRANSFER, TRUE);
$smartsheetData = curl_exec($curlSession);

if (curl_errno($curlSession))
{
    echo "Oh No! Error: " . curl_error($curlSession);
}else{
    // Assign response to PHP object
    $sheetsObj = json_decode($smartsheetData);
    // close curlSession
    curl_close($curlSession);
}
$file1="tmpfile.xls";
if(!(file_put_contents($file1, $sheetsObj))){
    echo "file_put error";
} 

Я надеюсь, что вы можете мне помочь. Спасибо

1 ответ

Решение

Элементы, которые необходимо скорректировать в вашем примере, это заголовки и способ обработки ответа.

Во-первых, использование параметров командной строки curl в заголовках не будет работать. Вместо этого вам просто нужно указать, что файл XLS должен возвращаться с заголовками, как показано ниже:

$headers = array("Authorization: Bearer ".$inputToken,
    "Accept: application/vnd.ms-excel");

Во-вторых, поскольку файл XLS будет возвращен, мы не захотим анализировать этот ответ как JSON. Вместо этого немедленно запишите ответ в файл.

Имея это в виду, следующий пример должен работать для вас и получить указанный лист в виде файла XLS. Не забудьте заменить YOUR_TOKEN а также YOUR_SHEET_ID с соответствующими значениями.

<?php
$inputToken = 'YOUR_TOKEN';
$baseURL = "https://api.smartsheet.com/1.1";

$sheetDetail_url = $baseURL.'/sheet/YOUR_SHEET_ID';

$headers = array("Authorization: Bearer ".$inputToken,
    "Accept: application/vnd.ms-excel");

$curlSession = curl_init($sheetDetail_url);
curl_setopt($curlSession, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curlSession, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curlSession, CURLOPT_RETURNTRANSFER, TRUE);

$smartsheetData = curl_exec($curlSession);

// Check for error or save the file
if (curl_errno($curlSession))
{
    echo "Oh No! Error: " . curl_error($curlSession);
}else{
    curl_close($curlSession);

    $file1="tmpfile.xls";
    if(!(file_put_contents($file1, $smartsheetData))){
        echo "file_put error";
    }
}

?>
Другие вопросы по тегам