Статус Woocommerce REST API: 401 - Недействительная подпись - предоставленная подпись не соответствует

Здравствуйте, я использую WooCommerce API - клиент Node.js https://www.npmjs.com/package/woocommerce-api

И я пытаюсь создать клиента, которому требуется запрос POST на сервер. Вот код для инициализации REST API woocomerece:

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 работает на сервере, например: я могу получить список продуктов.


person Saad    schedule 09.12.2017    source источник
comment
ты когда-нибудь в этом догадывался? У меня такая же проблема ...   -  person minnow    schedule 09.03.2018
comment
@minnow Да, я использовал https вместо http. Я не мог выполнять какие-либо запросы POST с использованием http   -  person Saad    schedule 09.03.2018
comment
Спасибо за ответ. Не хочу я хотел слышать. Я уже использую https, но результат тот же: GET работают нормально, но не POST. Для GET мне нужно использовать oAuth1.0a. Обычная аутентификация не работает.   -  person minnow    schedule 09.03.2018
comment
@minnow Интересно для меня Basic Auth работает для GET и POST, когда я использовал HTTPS. Вы пробовали изменить версию на version: 'wc/v2?   -  person Saad    schedule 10.03.2018
comment
Да, я уже использовал https   -  person minnow    schedule 12.03.2018
comment
@minnow у вас есть решение этой проблемы. у меня такая же проблема   -  person Mukul Sharma    schedule 17.05.2018
comment
Нет, к сожалению, не @MukulSharma   -  person minnow    schedule 18.05.2018
comment
попробуйте добавить www. на ваш URL.   -  person Ibrahim.H    schedule 16.02.2019
comment
Работал для меня после использования query_string_auth = True с оболочкой python   -  person Bandiera    schedule 20.07.2020


Ответы (4)


Поскольку ошибка не требует пояснений. Это явно проблема аутентификации. Это явно упоминается в документации

По HTTPS

Вы можете использовать базовую аутентификацию HTTP, указав ключ потребителя API в качестве имени пользователя и секрет потребителя API в качестве пароля.

Через HTTP

Вы должны использовать «одноногую» аутентификацию OAuth 1.0a, чтобы учетные данные API не могли быть перехвачены.

Для получения дополнительных сведений обратитесь к документации по адресу здесь

person Saif    schedule 26.11.2018

В объекте, который вы передаете функциям (данные var), ваш ключ также должен быть строкой.

eg.

var data = {"first_name": "Joe" // и так далее

}

person Suluuboi    schedule 16.10.2018

У меня была такая же проблема. убедитесь, что url: 'http://example.com' точно соответствует тому, которое есть на странице общих настроек WordPress. например, оба начинаются с www и имеют точный протокол https

person Ali Kazemi    schedule 04.01.2020

Заголовок должен содержать ключ Content-Type: application / json

Я использую OAuthRequest, где он кодируется:

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

У меня отлично работает даже с HTTP.

person 6-ka    schedule 22.08.2020