【问题标题】:Error on integrating php and google sheets api集成 php 和 google sheet api 时出错
【发布时间】:2020-12-31 16:01:18
【问题描述】:

我正在尝试将 google sheet api 与 php 集成,以便我可以捕获 html 表单数据并将其附加到电子表格中,但我遇到了一个奇怪的错误。

下面是php sn-p:

$client = new \Google_Client();
$client->setApplicationName('WEBMONK_QUOTATION_REQUESTS');
$client->setScopes([\Google_Service_Sheets::SPREADSHEETS]);
$client->setAccessType('offline');
$client->setAuthConfig('../credentials.json');
$service = new Google_Service_Sheets($client);
$spreadsheets_id = '1S2LPDl5XmOEx4TQ3cR4yZ4SAALcxXRyxU5nFMU7RW0I';
$range = 'QUOTESHEET';

$sheet_rows = [
    strval($datetime),
    strval($name),
    strval($email),
    strval($url),
    strval($extras)
];

$body = new Google_Service_Sheets_ValueRange(['values' => [$sheet_rows]]);
$params = ['valueInputOption' => 'RAW'];
$insert = ['insertDataOption' => 'INSERT_ROWS'];
$result = $service->spreadsheets_values->append(
    $spreadsheets_id,
    $range,
    $body,
    $params,
    $insert
);

这是我得到的错误:

<br />
<b>Fatal error</b>:  Uncaught TypeError: implode(): Argument #2 ($array) must be of type ?array, string given in C:\xampp\htdocs\webric.org\api\vendor\google\apiclient\src\Google\Service\Resource.php:291
Stack trace:
#0 C:\xampp\htdocs\webric.org\api\vendor\google\apiclient\src\Google\Service\Resource.php(291): implode(Array, '&amp;')
#1 C:\xampp\htdocs\webric.org\api\vendor\google\apiclient\src\Google\Service\Resource.php(190): Google_Service_Resource-&gt;createRequestUri('v4/spreadsheets...', Array)
#2 C:\xampp\htdocs\webric.org\api\vendor\google\apiclient-services\src\Google\Service\Sheets\Resource\SpreadsheetsValues.php(64): Google_Service_Resource-&gt;call('append', Array, 'Google_Service_...')
#3 C:\xampp\htdocs\webric.org\api\post\insert.php(68): Google_Service_Sheets_Resource_SpreadsheetsValues-&gt;append('1S2LPDl5XmOEx4T...', 'QUOTESHEET', Object(Google_Service_Sheets_ValueRange), Array, Array)
#4 {main}
  thrown in <b>C:\xampp\htdocs\webric.org\api\vendor\google\apiclient\src\Google\Service\Resource.php</b> on line <b>291</b><br />

到目前为止,据我所知,Google lib 中的 implode() 函数由于参数类型错误而出现故障。但我找不到我上面的 php 代码有什么问题。我已经完成了这里提到的 google 表格和 php 集成程序: PHP with Google Sheets Quickstart

PHP 版本:8.0.0, 谷歌 API 客户端:2.0

请告诉我哪里出错了。提前致谢。

【问题讨论】:

  • 它是 google api 库中的代码。我还没有通过那个代码。
  • 您传递给其中一个调用的参数应该是一个数组,但不是数组。查看手册了解您正在拨打的所有电话

标签: php google-sheets-api


【解决方案1】:

在切换到 PHP 8.0 后遇到了同样的问题(之前使用 PHP 7.2 可以正常工作)。

与以前的版本相比,PHP 8.0 中的 implode() 函数基本上切换了两个参数。我查看了 Google 库中最新版本的 Resource.php 文件,您应该会看到第 303 行已经反映了这些更改。

我去了我的 Resource.php 文件并替换了

$requestUrl .= '?' . implode($queryVars, '&');

$requestUrl .= '?' . implode('&', $queryVars);

它又开始工作了。希望对您有所帮助!

【讨论】:

    【解决方案2】:

    你的价值观一定有问题

    修改$body

    $body = new Google_Service_Sheets_ValueRange([
      "values" => [[1, 2, 3]]
    ]);
    

    如果此请求对您有效 - 登录 [$sheet_rows] 以比较结构并查看问题所在。

    PS:除了快速入门,还有method specific documentation for PHP

    【讨论】:

      猜你喜欢
      • 2016-05-26
      • 2012-03-12
      • 1970-01-01
      • 2023-02-07
      • 1970-01-01
      • 2017-03-29
      • 2013-09-06
      • 1970-01-01
      • 2013-01-09
      相关资源
      最近更新 更多