技术栈
PHP 7.4.2- Laravel 7
背景
我正试图从我们的WooCommerce网站上拉入活跃的产品,一次一页。然后将需要的数据提取出来并格式化为JSON,并返回给用户(在本例中是营销平台进行API调用)。
在我的列表中的第一个查询参数要么在它离开我的系统之前被删除,要么被WC/WP REST API忽略。
调用的代码
function getProducts($page = 1, $per_page = 100, $status = 'publish') {
$query = array(
// 't' => 1, // For testing first parameter bug
'page' => $page,
'per_page' => $per_page,
'status' => $status,
);
$string = http_build_query($query, null, '&', PHP_QUERY_RFC3986);
$url = $this->finalUrl . '/wp-json/wc/v3/products?' . $string;
$json = file_get_contents($url);
return json_decode($json);
}
如果我转储$url
,我得到:
https://user:pass@domain.com/wp-json/wc/v3/products?page=5&per_page=100&status=publish
据我所知,这似乎是有效的。把它放入邮差,我得到了100条记录的第五页,正如预期的那样。然而,如果我在我的系统中运行它,我每次都得到第一页。
然后如果我交换page
和per_page
轮,我将得到我想要的页面,但只有10条记录,这是默认的,而不是我要求的100条。当然,如果我把状态放在首位,我也会得到非活动/存档的产品。
另外,如果我将URL更改为Pipedream URL,我可以清楚地看到所有3个参数被列出。
最后,我通过首先添加t=1
参数作为虚拟参数进行测试,然后其余参数都可以正常工作,并且我将获得第5页的100条记录。
如果有人能帮助我或给我指出正确的方向,我将不胜感激。
欢呼,汤姆
在这种情况下,在wordpress站点的uri重写规则中有一个多余的字母,导致第一个参数的名称前面加上了该字母。
这是在try_files $uri /index.php?uri=$uri&i$args;
规则中发现的。注意i
在$args
之前。
在我上面的例子中,page
在到达API之前将被重命名为ipage
。
删除,现在可以使用