如何从 PHP API 访问 Smartsheet?
How to access Smartsheet from PHP API?
这是我第一次尝试使用 API 和 PHP 从 Smartsheet 连接 Sheet。
我似乎无法连接并给我这个错误
Notice: Trying to get property of non-object in C:\xampp\htdocs\smartsheet\test.php on line 22
变量$sheetObj
为空。
而在Authorization: Bearer
中,Bearer
是什么意思?它是令牌名称还是始终是 Bearer?
我未来的计划是使用 PHP 写入 smartsheet 行。谁能给我建议我的代码出了什么问题?
$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>";
Smartsheet API 的 1.1 版是 no longer supported. You'll want to use version 2。
为此,只需将 $baseURL
更改为:
$baseURL = "https://api.smartsheet.com/2.0";
此外,API 中的每个对象都将由多个端点表示。因此,要获得 sheet,您将使用:
$getSheetURL = $baseURL. "/sheets/xxxxxxxxxxx";
要获取您将使用的行:
$rowsURL = $baseURL. "/sheets/xxxxxxxxxxx/rows";
Bearer 是您传递给 API 的 type of Authorization header,以及 Smartsheet API 所需的类型。
Search here on SO for the (partial) error message "Trying to get property of non-object" 你会看到很多相关的帖子。从本质上讲,此错误意味着您的代码将某些东西视为实际上不是对象的对象。例如,当您尝试访问 $sheetObj
的 name
属性 时,如果 API 请求先前由于某种原因失败并且 [=11 的内容=] 因此实际上不是一个对象。
我对 PHP 不是很熟悉,但我怀疑(根据错误消息,结合您所说的“var_dump($getSheetResponseData)
是 Bool(false)
”这一事实) "Get Sheet" 请求可能没有返回成功的响应。要排除故障,我建议您尝试 运行 完全相同的 "Get Sheet" 请求(即具有相同的 URI,包括 sheet Id) 使用像 Postman 这样的工具 (https://www.getpostman.com/) or via the commandline with cURL, and see if you get a successful response. If you can get your request working via Postman or cURL, it should be straightforward to update your code to send the same request, resulting in a successful response. See this section of the Smartsheet API docs for info about API Troubleshooting techniques using Postman or cURL: http://smartsheet-platform.github.io/api-docs/#api-troubleshooting.
两者 and 都提供了有关如何解决您的问题和一些可能原因的有用信息。
您提供的代码实际上存在两个问题。
正如 Scott 提到的,您必须指向 API.
的 2.0 版本
$baseURL = "https://api.smartsheet.com/2.0";
您的 $getSheetURL
中有错字。正如所记录的 here,url 是 /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>";
?>
你好使用smartsheetAPI连接PHP,使用的是API2.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);
这是我第一次尝试使用 API 和 PHP 从 Smartsheet 连接 Sheet。
我似乎无法连接并给我这个错误
Notice: Trying to get property of non-object in C:\xampp\htdocs\smartsheet\test.php on line 22
变量$sheetObj
为空。
而在Authorization: Bearer
中,Bearer
是什么意思?它是令牌名称还是始终是 Bearer?
我未来的计划是使用 PHP 写入 smartsheet 行。谁能给我建议我的代码出了什么问题?
$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>";
Smartsheet API 的 1.1 版是 no longer supported. You'll want to use version 2。
为此,只需将 $baseURL
更改为:
$baseURL = "https://api.smartsheet.com/2.0";
此外,API 中的每个对象都将由多个端点表示。因此,要获得 sheet,您将使用:
$getSheetURL = $baseURL. "/sheets/xxxxxxxxxxx";
要获取您将使用的行:
$rowsURL = $baseURL. "/sheets/xxxxxxxxxxx/rows";
Bearer 是您传递给 API 的 type of Authorization header,以及 Smartsheet API 所需的类型。
Search here on SO for the (partial) error message "Trying to get property of non-object" 你会看到很多相关的帖子。从本质上讲,此错误意味着您的代码将某些东西视为实际上不是对象的对象。例如,当您尝试访问 $sheetObj
的 name
属性 时,如果 API 请求先前由于某种原因失败并且 [=11 的内容=] 因此实际上不是一个对象。
我对 PHP 不是很熟悉,但我怀疑(根据错误消息,结合您所说的“var_dump($getSheetResponseData)
是 Bool(false)
”这一事实) "Get Sheet" 请求可能没有返回成功的响应。要排除故障,我建议您尝试 运行 完全相同的 "Get Sheet" 请求(即具有相同的 URI,包括 sheet Id) 使用像 Postman 这样的工具 (https://www.getpostman.com/) or via the commandline with cURL, and see if you get a successful response. If you can get your request working via Postman or cURL, it should be straightforward to update your code to send the same request, resulting in a successful response. See this section of the Smartsheet API docs for info about API Troubleshooting techniques using Postman or cURL: http://smartsheet-platform.github.io/api-docs/#api-troubleshooting.
两者
您提供的代码实际上存在两个问题。
正如 Scott 提到的,您必须指向 API.
的 2.0 版本$baseURL = "https://api.smartsheet.com/2.0";
您的
$getSheetURL
中有错字。正如所记录的 here,url 是/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>";
?>
你好使用smartsheetAPI连接PHP,使用的是API2.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);