如何调用crm.lead.list方法获取下组线索?PHP分页拉取超50条数据
问题根因
- 核心错误是变量名拼写失误:第一次调用的返回值存入了
$fistSet(缺了字母r),后续读取分页偏移量next时用的是未定义的$firstSet变量,导致$next实际为空值,第二次调用传入的OFFSET参数值为0,和第一次请求偏移量一致,因此返回的数据集完全相同。 - 次要可优化点:请求参数格式可以更规范,避免参数层级错误。
修正后可运行代码
单次二次拉取修正版
// 第一次请求 变量名修正为firstSet $firstSet = CRest::call("crm.lead.list", [ "order"=> [ "ID"=> "ASC" ], "filter"=> [ "UF_CRM_1600929716160"=> 632], "select"=> [ "ID", "TITLE", "STATUS_ID", "OPPORTUNITY", "CURRENCY_ID" ] ]); echo "<pre>"; var_dump($firstSet); echo "</pre>"; echo "<br>----------------------------------------------------------------------------------------------------------------------------------------------------------------------------<br>"; $total = $firstSet["total"]; $next = $firstSet["next"] ?? 0; // 加判空避免不存在时报错 // 第二次请求 偏移量参数位置对齐,更易读 $secondSet = CRest::call("crm.lead.list", [ "order"=> [ "ID"=> "ASC" ], "filter"=> [ "UF_CRM_1600929716160"=> 632], "OFFSET"=> $next, "select"=> [ "ID", "TITLE", "STATUS_ID", "OPPORTUNITY", "CURRENCY_ID" ] ]); echo "<pre>"; var_dump($secondSet); echo "</pre>";
全量批量拉取通用版
如果需要一次性拉取所有符合条件的线索,可以用循环批量拉取:
$allLeads = []; $offset = 0; do { $result = CRest::call("crm.lead.list", [ "order"=> [ "ID"=> "ASC" ], "filter"=> [ "UF_CRM_1600929716160"=> 632], "select"=> [ "ID", "TITLE", "STATUS_ID", "OPPORTUNITY", "CURRENCY_ID" ], "OFFSET" => $offset ]); // 合并当前页数据 if (isset($result['result'])) { $allLeads = array_merge($allLeads, $result['result']); } // 读取下一页偏移量 $offset = $result['next'] ?? 0; } while ($offset > 0); // 打印所有拉取到的线索 echo "<pre>"; var_dump($allLeads); echo "</pre>";
额外注意事项
- 如果单次请求需要调整返回条数,可以加上
'LIMIT' => 100参数,Bitrix CRM接口默认单页最大返回50条,部分版本支持最高调整到200条。 - 批量拉取时注意控制请求频率,避免触发接口限流规则。
内容的提问来源于stack exchange,提问作者reventcake295
相关产品推荐
相关产品推荐

