2017-02-07 4 views
0

Я впервые пытаюсь подключить Лист из Smartsheet, используя API с PHP.
Я не могу соединить и дать мне эту ошибкуКак получить доступ к Smartsheet из PHP API?

Примечание: Попытка получить свойство не-объекта в C: \ XAMPP \ HTDOCS \ Smartsheet \ test.php в строке 22

Переменная $sheetObj пуста.
И в Authorization: Bearer, что делает Bearer означает? Это имя токена или оно всегда носитель?

Мой будущий план заключается в том, чтобы писать в строку smartsheet с помощью PHP. Может ли кто-нибудь дать мне совет, что пошло не так с моим кодом?

$baseURL = "https://api.smartsheet.com/1.1"; 
$sheetsURL = $baseURL . "/sheets/"; 
$getSheetURL = $baseURL . "/sheet/xxxxxxxxxxx"; 
$rowsURL = $baseURL . "/sheet/xxxxxxxxxxx/rows"; 

$accessToken = "xxxxxxxxxxxxxxxxxx"; 

// Create Headers array for cURL 
$headers = array(
    "Authorization: Bearer " . $accessToken, 
    "Content-Type: application/json" 
); 

$curlSession = curl_init($getSheetURL); 
curl_setopt($curlSession, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($curlSession, CURLOPT_RETURNTRANSFER, TRUE); 
$getSheetResponseData = curl_exec($curlSession); 

$sheetObj = json_decode($getSheetResponseData); 
echo "<h1>Sheet name: ". $sheetObj->name ."</h1>"; 
+0

Не решение ваша проблема, но важная информация: версия 1.1 API Smartsheet устарела - вы должны использовать версию 2.0 API. Это означает, что URI для операции «Получить лист» будет: https://api.smartsheet.com/2.0/sheets/SHEET_ID. Документы здесь: http://smartsheet-platform.github.io/api-docs/#get-sheet. Также - формат заголовка авторизации - это должно быть слово «авторизация», за которым следует двоеточие и пробел, за которым следует слово «носитель» и пробел, за которым следует значение вашего токена. (Похоже, у вас это правильно.) –

+0

Благодарим вас за ответ. После того, как я перешел на версию 2.0 и листы на листы, это все равно та же проблема. –

ответ

2

И stmcallister, и Kim предоставили хорошую информацию о том, как устранить проблему и некоторые возможные причины.

Были два вопроса с кодом, который вы предоставили.

  1. Как упоминалось в Scott, вы должны указать на версию 2.0 API.

    $baseURL = "https://api.smartsheet.com/2.0"; 
    
  2. У вас есть опечатка в вашем $getSheetURL. Как документировано here, адрес /sheets/{sheetId}. Так что ваш код должен иметь следующее:

    $getSheetURL = $baseURL. "/sheets/xxxxxxxxxxx"; 
    

Вот ваш код в рабочем состоянии. Обязательно замените YOUR_TOKEN, а также посмотрите на результат var_dump (который я добавил к вашему коду), чтобы узнать, какое сообщение оно вам дает.

<?php 
$baseURL = "https://api.smartsheet.com/2.0"; 
$getSheetURL = $baseURL. "/sheets/4925037959505796"; 
$accessToken = "YOUR_TOKEN"; 

$headers = array("Authorization: Bearer ". $accessToken); 

$curlSession = curl_init($getSheetURL); 
curl_setopt($curlSession, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($curlSession, CURLOPT_RETURNTRANSFER, TRUE); 
$getSheetResponseData = curl_exec($curlSession); 

// Remove this line when done debugging 
var_dump($getSheetResponseData); 

$sheetObj = json_decode($getSheetResponseData); 

echo "<h1>Sheet name: ". $sheetObj->name ."</h1>"; 
?> 
+0

Да. Я изменил это, и это все еще дает мне такую ​​же проблему. Является ли это beacuase из я использую smartsheet бесплатную учетную запись? $ getSheetURL = "https://api.smartsheet.com/2.0/sheets/4925037959505796"; –

+0

Я обновил свой ответ, чтобы дать вам рабочий пример. Строка 'var_dump' должна дать вам немного больше информации о том, что происходит. Если вы можете получить доступ к листу через приложение [Smartsheet App] (https://app.smartsheet.com/b/home), вы можете получить доступ к нему через API. – Brett

+0

Спасибо. Бретт. Он работает сейчас. –

0

Версия 1.1 API SmartSheet является no longer supported. Вы хотите использовать version 2.

Чтобы сделать это просто изменить $baseURL к этому:

$baseURL = "https://api.smartsheet.com/2.0";

Кроме того, каждый из объектов в API будут представлены множественными конечными точками. Таким образом, чтобы получить лист вы будете использовать:

$getSheetURL = $baseURL. "/sheets/xxxxxxxxxxx";

Чтобы получить строки, которые вы будете использовать:

$rowsURL = $baseURL. "/sheets/xxxxxxxxxxx/rows";

Bearer является type of Authorization header, что вы передаете к API , и тип, который требуется API Smartsheet.

+0

Спасибо за ур ответ. Но это все та же ошибка. Обратите внимание: попытка получить свойство не-объекта в C: \ xampp \ htdocs \ smartsheet \ test.php в строке 22 ". Переменная $ sheetObj пуста. –

+0

Если я удаляю символы '**', которые находятся до и после строки $ sheetObj = json_decode ($ getSheetResponseData), ваш код работает для меня. Я бы рекомендовал сделать echo $ getSheetResponseData, чтобы узнать, какой ответ вы возвращаете из API. – stmcallister

+0

Спасибо. Я добавляю **, чтобы выделить. Я не запускал код с **. Кстати, я использую smartsheet бесплатный аккаунт. Это из-за бесплатной учетной записи? Эхо «", а var_dump ($ getSheetResponseData) - это Bool (false). –

1

Search here on SO for the (partial) error message "Trying to get property of non-object" и вы увидите много связанных должностей. По сути, эта ошибка означает, что ваш код обрабатывает что-то как объект, который на самом деле не является объектом. Это произойдет, например, когда вы попытаетесь получить доступ к свойству name$sheetObj, если по какой-либо причине запрос API ранее был неудачным, и поэтому содержимое $sheetObj не является фактически объектом.

Я не очень хорошо знаком с PHP, но я подозреваю (на основе сообщения об ошибке в сочетании с тем, что вы говорите «var_dump($getSheetResponseData) is Bool(false)), что запрос« Получить лист »может не возвратить успешный Ответ. Для устранения неполадок я предлагаю вам попробовать выполнить тот же самый запрос «Получить лист» (то есть с идентичным URI, включая идентификатор листа) с помощью инструмента, такого как Postman (https://www.getpostman.com/) или через командную строку cURL, и посмотреть, вы получите успешный ответ.Если вы можете получить ваш запрос через Postman или cURL, вам следует просто обновить свой код, чтобы отправить тот же запрос, что приведет к успешному ответу. См. этот раздел документации API Smartsheet для получения информации об API Методы устранения неполадок с использованием Postman или cURL: http://smartsheet-platform.github.io/api-docs/#api-troubleshooting.

0

Здравствуйте использовать SmartSheet соединение API для PHP, версии API 2.0 используется, потому что старая версия устарела, код для подключения выглядит следующим образом:

$baseURL = "https://api.smartsheet.com/2.0/sheets"; 
// Insertar access token generado en SmartSheet 
$accessToken = "YOUR_TOKEN"; 
// Creación del Headers Array para el Curl 
$headers = array(
"Authorization: Bearer $accessToken", 
"Content-Type: application/json"); 

//Conexión de la API de SmartSheet 
$curlSession = curl_init($baseURL); 
curl_setopt($curlSession, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($curlSession, CURLOPT_RETURNTRANSFER, true); 

//Establece la sesión del Curl 
$smartsheetData = curl_exec($curlSession); 


// Asignar respuesta a un objeto PHP 
$createObj = json_decode($smartsheetData); 

 Смежные вопросы

  • Нет связанных вопросов^_^