Php 获取应用程序时出现Podio错误

Php 获取应用程序时出现Podio错误,php,podio,Php,Podio,这似乎是Podio PHP SDK或Podio API的错误。json_响应(导致数组_合并错误)为null,而http响应为200。我无法让它定期发生,但是在运行30~个调用的脚本上,它大约有10%的时间发生。我可以直接从文档中运行GetApp调用 我知道这是一个错误,因为每次重新运行时,脚本都会在不同的位置中断,这取决于哪些数据没有正确地从API加载 测试1:由于$app1为空,第344行出现异常 测试2:由于$app3为空,第814行出现异常 等等 这是一个未经修改的脚本,已经存在了6个多

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

我知道这是一个错误,因为每次重新运行时,脚本都会在不同的位置中断,这取决于哪些数据没有正确地从API加载

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

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

等等

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


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

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

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

例如

//从API获取项
$truments=0;
做{
试一试{
$item=PodioItem::get($itemId);
}捕获(\异常$e){
$s++;
日志::错误(“PodioItemGetFailure#。”$truments。”。“$e->getMessage());
睡眠(3);
继续;
}
打破
}而(<3);

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

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


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

您能否分享可以重现此问题的php示例代码?(当然没有你的clientID/clientSecret和其他私人/机密信息)我可以通过运行\PodioApp::get($app)复制它;其中$app是。。。例如,19641970、19641961、18706934。如果您为这些应用程序中的每一个创建一个数组,并运行app::get call 50次,您将能够重现错误。我已经用多用户访问令牌帐户fwiw进行了测试。非常感谢。您是否也在使用PodioItem::get时遇到过这种情况?很高兴知道它是否是所有端点。目前,我们只在获取应用程序方面遇到问题,但是我们正在使用的实现为每个项目调用大约3打应用程序调用。我之前也实现了一个try/catch,但没有效果-不管怎样都会抛出相同的错误。可能是我实现的。我再试一次。非常感谢。据我所知,它(随机)发生在所有get请求上。我不得不在错误捕捉方面做一些调整,以确保捕捉到正确的东西。注意\before\错误,这是我的关键。但这取决于您的名称空间。处理与网络相关的调用绝对是理想的-但是,当HTTP状态代码与返回的数据不匹配时,这会变得模糊=)再次感谢您。。。
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)
// 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);