Woocommerce REST API 状态:401 - 签名无效 - 提供的签名不匹配

问题描述 投票:0回答:7

您好,我正在使用 WooCommerce API - Node.js 客户端 https://www.npmjs.com/package/woocommerce-api

我正在尝试创建一个需要向服务器发出 POST 请求的客户。 这是初始化 woocomerece REST API 的代码:

var WooCommerceAPI = require('woocommerce-api');

var WooCommerce = new WooCommerceAPI({
  url: 'http://example.com',
  consumerKey: 'ck_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
  consumerSecret: 'cs_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
  wpAPI: true,
  version: 'wc/v1'
});

这是创建客户的代码:

  var data = {
  email: '[email protected]',
  first_name: 'John',
  last_name: 'Doe',
  username: 'john.doe',
  billing: {
    first_name: 'John',
    last_name: 'Doe',
    company: '',
    address_1: '969 Market',
    address_2: '',
    city: 'San Francisco',
    state: 'CA',
    postcode: '94103',
    country: 'US',
    email: '[email protected]',
    phone: '(555) 555-5555'
  },
  shipping: {
    first_name: 'John',
    last_name: 'Doe',
    company: '',
    address_1: '969 Market',
    address_2: '',
    city: 'San Francisco',
    state: 'CA',
    postcode: '94103',
    country: 'US'
  }
};

WooCommerce.post('customers', data, function(err, data, res) {
  console.log(res);
});

但是我不断从服务器收到以下响应。

{
"code":"woocommerce_rest_authentication_error",
"message":"Invalid signature - provided signature does not match.",
"data":{"status":401}
}

但是,对服务器上的任何 GET 请求都有效,例如:我可以获得产品列表。

wordpress woocommerce woocommerce-rest-api
7个回答
4
投票

因为错误是不言自明的。这显然是一个身份验证问题。文档中明确提到了

通过 HTTPS

您可以通过提供 API Consumer Key 作为用户名和 API Consumer Secret 作为密码来使用 HTTP 基本身份验证。

通过 HTTP

您必须使用 OAuth 1.0a“单腿”身份验证来确保 API 凭据不会被拦截。

有关更多详细信息,您可以参阅此处

的文档

1
投票

我也遇到了同样的问题。确保

url: 'http://example.com'
与您在 WordPress 常规设置页面中的完全匹配。例如,两者都以
www
开头,并且具有
https

的确切协议

1
投票

邮差错误(但可以适用于任何)

我最终发现问题是我提供给 PostMan 的主机的最后一个尾部斜杠。

为了了解该网站在浪费了这么多时间后所基于的网址,我进入了设置 - >常规设置WordPress地址(URL)和网站地址(URL)

因此我从那里选择了正确的主机。

在 Post man 中,我使用了 Aouth.1,确保将其设置为 Request Boddy / Request URL


0
投票

标头必须包含键“Content-Type”:“application/json”

我正在使用 OAuthRequest,其编码为:

request.addHeader("Content-Type", "application/json");

即使使用 HTTP,它对我来说也很好用。


0
投票

就我而言,我发现问题是由于 Postman 上使用的 URL 使用 www.,但在 WordPress > 常规设置下,WordPress 地址 (URL) 和站点地址 (URL) 上的设置均未设置 www.。因此,签名无效是有道理的。


0
投票

就我而言,发生此错误是因为我正在使用

desktop app
尝试访问
https://
,并且我通过以下方式关闭
SSL certificate verification
来修复:

文件 > 设置

然后

SSL certificate verification
关闭


-1
投票

在您传递给函数(var data)的对象中,您的密钥也需要是字符串。

例如。

var 数据 = { “名字”:“乔” //等等

}

© www.soinside.com 2019 - 2024. All rights reserved.