您好,我正在使用 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 请求都有效,例如:我可以获得产品列表。
因为错误是不言自明的。这显然是一个身份验证问题。文档中明确提到了
通过 HTTPS
您可以通过提供 API Consumer Key 作为用户名和 API Consumer Secret 作为密码来使用 HTTP 基本身份验证。
通过 HTTP
您必须使用 OAuth 1.0a“单腿”身份验证来确保 API 凭据不会被拦截。
有关更多详细信息,您可以参阅此处
的文档我也遇到了同样的问题。确保
url: 'http://example.com'
与您在 WordPress 常规设置页面中的完全匹配。例如,两者都以 www
开头,并且具有 https
的确切协议
标头必须包含键“Content-Type”:“application/json”
我正在使用 OAuthRequest,其编码为:
request.addHeader("Content-Type", "application/json");
即使使用 HTTP,它对我来说也很好用。
就我而言,我发现问题是由于 Postman 上使用的 URL 使用 www.,但在 WordPress > 常规设置下,WordPress 地址 (URL) 和站点地址 (URL) 上的设置均未设置 www.。因此,签名无效是有道理的。
在您传递给函数(var data)的对象中,您的密钥也需要是字符串。
例如。
var 数据 = { “名字”:“乔” //等等
}