错误:签名无效 - 提供的签名不匹配。 [woocommerce_rest_authentication_error]获取更多10项

时间:2017-09-18 17:41:17

标签: wordpress woocommerce woocommerce-rest-api

我收到错误错误:签名无效 - 当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
));

1 个答案:

答案 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