如何从PHP API访问Smartsheet?

时间:2017-02-07 23:07:19

标签: php api smartsheet-api

这是我第一次尝试使用API​​与PHP连接Smartsheet中的Sheet 我似乎无法连接并给我这个错误

  

注意:尝试在第22行的C:\ xampp \ htdocs \ smartsheet \ test.php中获取非对象的属性

变量DateTime为空 在$sheetObj中,Authorization: Bearer的含义是什么?它是一个令牌名称还是永远是Bearer?

我未来的计划是使用PHP写入智能表行。任何人都可以给我建议我的代码出了什么问题?

Bearer

4 个答案:

答案 0 :(得分:2)

stmcallisterKim提供了有关如何解决问题以及可能的原因的良好信息。

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

  1. 正如Scott所说,你必须指向API的2.0版本。

    $baseURL = "https://api.smartsheet.com/2.0";
    
  2. 您的$getSheetURL中有拼写错误。据记录here,网址为/sheets/{sheetId}。所以你的代码应该有以下内容:

    $getSheetURL = $baseURL. "/sheets/xxxxxxxxxxx";
    
  3. 这是您处于工作状态的代码。请务必替换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>";
    ?>
    

答案 1 :(得分: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)Bool(false)”的事实)“Get Sheet”请求可能无法返回成功的响应。要进行问题排查,我建议您尝试使用Postman(https://www.getpostman.com/等工具运行完全相同的“获取工作表”请求(即使用相同的URI,包括工作表ID) )或通过cURL的命令行,看看你是否得到了成功的回复。如果你能通过Postman或cURL得到你的请求,那么更新你的代码就可以直接发送相同的请求,从而获得成功的响应。有关使用Postman或cURL的API故障排除技术的信息,请参阅Smartsheet API文档的这一部分:http://smartsheet-platform.github.io/api-docs/#api-troubleshooting

答案 2 :(得分:0)

Smartsheet API 1.1版是no longer supported。您需要使用version 2

要执行此操作,只需将$baseURL更改为:

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

此外,API中的每个对象将由多个端点表示。所以,要获得一张你将使用的表格:

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

获取您将使用的行:

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

Bearer是您传递给API的type of Authorization header,以及Smartsheet API所需的类型。

答案 3 :(得分:0)

您好使用与PHP的smartsheet API连接,使用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);