如何从 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" 你会看到很多相关的帖子。从本质上讲,此错误意味着您的代码将某些东西视为实际上不是对象的对象。例如,当您尝试访问 $sheetObjname 属性 时,如果 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 都提供了有关如何解决您的问题和一些可能原因的有用信息。

您提供的代码实际上存在两个问题。

  1. 正如 Scott 提到的,您必须指向 API.

    的 2.0 版本
    $baseURL = "https://api.smartsheet.com/2.0";
    
  2. 您的 $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);