首次用Node.js连接WooCommerce REST API遇401权限错误求助
Node.js调用WooCommerce REST API返回401错误(Postman可正常请求)
我首次尝试用Node.js获取WordPress WooCommerce的订单数据,遵循官方REST API JS库文档实现,但本地localhost:5000服务无法获取数据,Postman却能正常返回结果。返回的错误信息如下:
code: 'woocommerce_rest_cannot_view'
message: 'Sorry, you cannot view this resource.'
data: { status: 401 }
我的代码实现
const express = require("express"); const app = express(); const bodyParser = require("body-parser"); const cors = require("cors"); const mysql = require("mysql2"); const WooCommerceRestApi = require("@woocommerce/woocommerce-rest-api").default; const api = new WooCommerceRestApi({ url: "https://fasbazar.com", consumerKey: "ck_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", consumerSecret: "cs_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", version: "wc/v3" }); app.use(cors()); app.use(express.json()); app.use(bodyParser.urlencoded({ extended: true })); const db = mysql.createPool({ host: "localhost", user: "root", password: "", database: "restapi" }); // 获取订单 api .get("orders/1", { per_page: 20 // 每页20条数据 }) .then(response => { // 请求成功 console.log("Response Status:", response.status); console.log("Response Headers:", response.headers); console.log("Response Data:", response.data); console.log("总页数:", response.headers["x-wp-totalpages"]); console.log("总条目数:", response.headers["x-wp-total"]); }) .catch(error => { // 请求失败(4xx/5xx状态码) console.log("Response Status:", error.response.status); console.log("Response Headers:", error.response.headers); console.log("Response Data:", error.response.data); }) .finally(() => { // 始终执行 }); app.listen(5000, () => { console.log("Server is running on port 5000"); });
输出结果截图

问题排查与解决办法
- 核对密钥准确性:仔细检查代码中
consumerKey和consumerSecret的字符,确保和WooCommerce后台生成的完全一致,无多余空格或遗漏字符;同时确认密钥拥有read_orders权限(生成密钥时需勾选对应权限)。 - 修正请求路径:API调用的路径需以斜杠开头,将
get("orders/1")改为get("/orders/1"),匹配官方API的路径规范。 - 临时关闭SSL验证(仅测试用):本地Node环境可能存在SSL证书验证问题,可在API初始化时添加
verifySsl: false参数(生产环境请勿使用):const api = new WooCommerceRestApi({ url: "https://fasbazar.com", consumerKey: "ck_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", consumerSecret: "cs_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", version: "wc/v3", verifySsl: false }); - 确认订单权限与存在性:确保
/orders/1对应的订单真实存在,且密钥关联的WordPress用户有权限查看该订单。
内容的提问来源于stack exchange,提问作者Shahrukh Altaf
相关产品推荐
相关产品推荐

