我收到错误错误:签名无效 - 当useinclude参数提供的签名与[woocommerce_rest_authentication_error]不匹配时,我也使用per_page = 20
使用10个或更低的项目时工作正常。
以下代码工作正常。
$orders = $woocommerce->get('orders/', array(
'per_page' => 20,
'include' => array(554, 553, 550, 549, 548, 547, 546, 545, 544, 543)
));
如果我扩展一个或多个id,那么我会得到上面提到的错误
$orders = $woocommerce->get('orders/', array(
'per_page' => 20,
'include' => array(554, 553, 550, 549, 548, 547, 546, 545, 544, 543, 542, 541)
));
我仔细检查所有订单ID都是正确的,我也使用个人ID进行调试 我使用以下代码获得所有订单
$orders = $woocommerce->get('orders/', array(
'per_page' => 20
));
答案 0 :(得分:0)
我几乎整天都在处理这个问题。 WooCommerce PHP API库中有一个小错误。
要了解此错误,您必须查看... / src / WooCommerce / HttpClient / OAuth.php:193
\uksort($parameters, 'strcmp');
它(按键)对参数进行排序,但是省略了嵌套数组,尽管$this->getParameters()
使用$this->getSortedParameters()
,后者更高级,并且还对嵌套数组进行排序。
所以这是问题所在:如果$parameters
的嵌套数组包含9个以上的元素,则$parameters
与$this->getParameters()
不同,更重要的是与带符号的字符串{{ 1}},因此OAuth会引发错误:“无效的签名-提供的签名不匹配。[woocommerce_rest_authentication_error]” 。
$参数
$stringToSign
$ this-getParameters();
[
'include' => [
0 => 554,
1 => 553,
2 => 550,
3 => 549,
4 => 548,
5 => 547,
6 => 546,
7 => 545,
8 => 544,
9 => 543,
10 => 542,
11 => 541,
],
...
];
只需稍作更改即可解决此问题。
... / src / WooCommerce / HttpClient / OAuth.php:193
[
'include' => [
0 => 554,
1 => 553,
10 => 542, // !!!
11 => 541, // !!!
2 => 550,
3 => 549,
4 => 548,
5 => 547,
6 => 546,
7 => 545,
8 => 544,
9 => 543,
],
...
];
更改为:
\uksort($parameters, 'strcmp');
我还提出了拉取请求:https://github.com/woocommerce/wc-api-php/pull/278