Shopify产品API分页请求?被转义为%3F返回404错误如何解决?
问题解决方案
根因
osiset/laravel-shopify 扩展的 rest() 方法会自动对传入的第二个参数(请求路径)做URL编码处理,你手动将查询参数拼接到路径末尾时,路径中的?会被识别为路径的一部分编码为%3F,导致接口无法正确识别查询参数,返回404错误。
修复代码
不要手动拼接查询字符串到路径后,所有查询参数通过rest()方法的第三个参数传入,扩展会自动处理参数拼装和编码:
// 从返回结果中获取next对应的page_info值 $nextPageInfo = $productsall['link']['container']['next']; // 调用接口时第三个参数传入查询参数数组 $productsall = $shop->api()->rest('GET', '/admin/api/2021-07/products.json', [ 'limit' => 50, 'page_info' => $nextPageInfo ])['body']['container'];
更优的分页处理方案
该扩展已经内置了自动分页能力,不需要手动解析Link字段获取page_info,可以直接用内置方法遍历全量数据,降低出错概率:
// 首次请求设置每页条数 $productsResponse = $shop->api()->rest('GET', '/admin/api/2021-07/products.json', ['limit' => 250]); $productsall = $productsResponse['body']['container']; // 循环获取下一页,直到没有更多数据 while ($productsResponse->next()) { $nextPageData = $productsResponse->json(); // 合并下一页产品数据到集合中即可 $productsall = array_merge($productsall, $nextPageData['products']); }
内容的提问来源于stack exchange,提问作者Mohammad Fahad
相关产品推荐
相关产品推荐

