需求是status=pending OR status=processing,客户端却把两个条件放进两个filter_groups,结果一条都没有。Magento的规则有点反直觉:同一个FilterGroup里的filters是OR,不同FilterGroup之间是AND。

searchCriteria[filter_groups][0][filters][0][field]=status
searchCriteria[filter_groups][0][filters][0][value]=pending
searchCriteria[filter_groups][0][filters][0][condition_type]=eq
searchCriteria[filter_groups][0][filters][1][field]=status
searchCriteria[filter_groups][0][filters][1][value]=processing
searchCriteria[filter_groups][0][filters][1][condition_type]=eq

如果还要加customer_id=10,就把customer_id放到第二个FilterGroup,这样是 (pending OR processing) AND customer_id=10。

数组编码也会坑

某些HTTP客户端把中括号编码或重排,Magento收到的层级变了。抓实际URL或JSON,不要只看调用代码。复杂查询建议封装一个明确的自定义Service Contract,避免前端拼几十个参数。

最后用已知数据集验证四种订单:pending/客户10、processing/客户10、complete/客户10、pending/客户20,返回集合应该一眼能判断逻辑是否正确。