You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP Quickbooks SDK批量请求失败处理及Laravel队列集成咨询

问题解答

1 如何获取批量请求中执行失败的项

你当前的代码没有处理批量请求的返回结果,所以无法拿到失败项。QuickBooks PHP SDK的批量执行方法Execute()会返回包含所有子项执行状态的响应对象,你可以通过遍历响应结果筛选出失败的项,再推送到Laravel队列做延迟重试,参考代码调整如下:

class QuickBooksAPIController extends Controller
{
    public function batchDelete(Request $request, $category)
    {
        $chunks = array_chunk($request->data, 30);
        $allFailedIds = [];

        foreach ($chunks as $key => $value) {
            $batch[$key] = $this->dataService()->CreateNewBatch();

            foreach ($value as $id) {
                $item = $this->dataService()->FindById($category, $id);
                $batch[$key]->AddEntity($item, $id, "delete");
            }

            // 接收批量执行响应
            $batchResponse = $batch[$key]->Execute();
            foreach ($batchResponse->getBatchItemResponses() as $responseItem) {
                // getbId() 对应你调用AddEntity时传入的第二个参数,也就是资源ID
                $itemId = $responseItem->getbId();
                // 判断当前项是否执行出错
                if ($responseItem->getFault()) {
                    $allFailedIds[] = $itemId;
                }
            }
        }

        // 存在失败项时推送到队列,延迟1分钟重试
        if (!empty($allFailedIds)) {
            // 你需要提前创建对应的队列任务类处理重试逻辑
            \App\Jobs\RetryQuickBooksDelete::dispatch($category, $allFailedIds)
                ->delay(now()->addMinutes(1));
        }

        return response()->json(['message' => '批量删除操作已处理', 'failed_count' => count($allFailedIds)], 200);
    }
}

你还可以给队列任务设置$tries属性限制最大重试次数,避免因永久无效的请求导致队列无限重试。

2 删除前先查询再加入批量的实现是否合理

这个实现是符合QuickBooks API要求的,不存在逻辑错误:QuickBooks的删除操作要求传入完整的资源实体,特别是SyncToken字段做版本校验,所以必须先查询到最新的实体对象才能发起删除。
不过你当前的实现还有优化空间:现在每个资源ID都单独发起一次查询请求,30个条目就要发30次查询请求,抵消了批量操作的优势。你可以把同批次的30个查询也做成批量查询操作,只需要1次请求就能拿到所有需要删除的实体,进一步降低请求次数。

额外说明

你之前超过30个项返回报错没有具体失败信息,是因为触发了QuickBooks Batch API的单批次数量上限,属于全局请求级别的错误,不会返回单条目的处理状态。你现在已经按30条拆分批次的调整是正确的,拆分后如果是单个条目触发业务规则错误,就能从批量响应中拿到对应的失败条目信息。


内容的提问来源于stack exchange,提问作者Riza Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 12:30:03