【问题标题】:Podio error when getting apps获取应用程序时出现 Podio 错误
【发布时间】:2018-07-10 23:03:07
【问题描述】:
Error
ErrorException: array_merge(): Argument #1 is not an array in /my/server/vendor/podio/podio-php/lib/PodioObject.php:200
Stack trace:
#0 [internal function]: Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(2, 'array_merge(): ...', '/my/server/...', 200, Array)
#1 /my/server/vendor/podio/podio-php/lib/PodioObject.php(200): array_merge(NULL, Array)
#2 /my/server/vendor/podio/podio-php/models/PodioApp.php(39): PodioObject::member(Object(PodioResponse))
#3 /my/path.php(413): PodioApp::get(xxxxxxx)

这似乎是 Podio PHP SDK 或 Podio API 的错误。 json_response(导致 array_merge 错误)为空,但 http 响应为 200。我无法让它定期发生,但它在运行 30 次调用的脚本上大约有 10% 的时间发生。我可以直接从文档中运行 GetApp 调用。

我知道这是响应错误,因为我的脚本在每次重新运行时会在不同位置中断,具体取决于未从 API 正确加载的数据。

测试 1:第 344 行出现异常,因为 $app1 为空

测试 2:第 814 行出现异常,因为 $app3 为空

等等……

这是一个未修改的脚本,已经使用了 6 个多月,但上周某个时候停止工作。

编辑:我还确认 cURL 也会出现同样的错误,因此这不是 SDK 特定的问题。

【问题讨论】:

  • 您能分享可以重现此问题的示例 php 代码吗? (当然没有您的 clientID/clientSecret 和其他私人/机密信息)
  • 我可以通过运行 \PodioApp::get($app); 重现它例如,其中 $app 是... 19641970、19641961、18706934 之一。如果您创建一个包含这些应用程序的数组,运行 app::get 调用 50 次,您将能够重现该错误。我已经使用多个用户 access_tokens 帐户进行了测试。谢谢!

标签: php podio


【解决方案1】:

同样的间歇性错误也发生在我们身上。自 TLS 更改推出以来。

临时解决方法是将调用包装在 do while 循环中,以便在出现错误时重试。

例如

// Get item from API
$attempts = 0;
do {
    try {
        $item = PodioItem::get($itemId);
    } catch (\Exception $e) {
        $attempts++;
        Log::error("PodioItemGetFailure #" . $attempts . ". " . $e->getMessage());
        sleep(3);
        continue;
    }
    break;
} while ($attempts < 3);

这有点令人讨厌,所以希望我们能尽快解决 Podio 方面的原因。

【讨论】:

  • PodioItem::get 是否也发生在您身上?很高兴知道它是否都是端点。我们目前只在获取应用程序方面遇到问题,但是我们使用的实现会为每个项目调用产生大约 3 打应用程序调用。
  • 我之前还实现了一个 try/catch,但无济于事 - 无论如何都会抛出相同的错误。可能是我的实现。我会再尝试。谢谢!
  • 据我所知,所有 get 请求都(随机)发生。我不得不对错误捕获进行一些尝试,以确保我捕获到了正确的东西。注意 \Error 之前的 \,这对我来说是关键。不过取决于您的命名空间。
【解决方案2】:

这种间歇性错误不应再发生 :)
除非您的网络连接不稳定或不连贯。

无论如何,对依赖于网络的调用(如任何 Podio API 调用)进行适当处理是件好事。我只能建议所有 Podio API 调用都应该通过队列机制,如果网络不稳定或 Podio 正在维护(例如),将允许重试。

【讨论】:

  • 处理依赖于网络的调用绝对是理想的——但是当 HTTP 状态代码与返回的数据不匹配时会变得模糊 =) 再次感谢...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-16
  • 1970-01-01
相关资源
最近更新 更多