You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决WooCommerce REST API 401 woocommerce_rest_cannot_view错误

问题描述

使用Postman通过Bearer授权访问https://website.nl/wp-json/wc/v3/orders时,收到401错误响应:

{"code": "woocommerce_rest_cannot_view", "message": "Je kunt gegevensbronnen niet weergeven.", "data": {"status": 401}}

计划用于获取订单数据的JavaScript代码如下:

function fetchOrderData(orderNumber) {
    return new Promise(function(resolve, reject) {
        var apiUrl = 'https://website.nl/wp-json/wc/v3/orders?order_number=' + orderNumber;
        fetch(apiUrl, {
            headers: {
                'Authorization': 'Bearer token'
            }
        })
        .then(response => {
            if (!response.ok) {
                throw new Error('Failed to fetch order details');
            }
            return response.json();
        })
        .then(orderDetails => {
            if (orderDetails && orderDetails.length > 0) {
                var customerInfo = orderDetails[0].billing;
                resolve(customerInfo);
            } else {
                reject(new Error('Order not found'));
            }
        })
        .catch(error => {
            console.error('Error fetching order data:', error);
            reject(error);
        });
    });
}

当前环境信息:

  • 账号角色:shopmanager
  • 服务器:Nginx
  • WooCommerce无特殊配置,已排查Bearer Token有效性、权限设置、API地址/版本、插件冲突,问题仍存在。
解决办法

1. 补全Shop Manager角色的REST API权限

WooCommerce默认的Shop Manager角色可能缺少订单读取的核心权限,需手动添加:

  • 安装User Role Editor插件(或通过代码添加权限)
  • 找到Shop Manager角色,添加以下权限:
    • read_shop_order
    • read_private_shop_orders
  • 保存角色设置后,重新测试API请求

2. 修正Nginx对Authorization头的拦截

Nginx默认配置可能会丢弃Bearer授权头,需在站点Nginx配置中添加规则:

location /wp-json/ {
    if ($http_authorization ~* "^Bearer\s+(.+)$") {
        set $auth_bearer $1;
        fastcgi_param HTTP_AUTHORIZATION "Bearer $auth_bearer";
    }
    try_files $uri $uri/ /index.php?$args;
}

修改后重启Nginx服务,再测试API。

3. 重新生成并验证Bearer Token

确保Token是通过WooCommerce官方路径生成且绑定正确角色:

  • 进入WooCommerce > 设置 > 高级 > REST API页面
  • 确认生成Token的用户是Shop Manager角色,若不确定则重新生成新Token,替换代码中的token字段

4. 排查主题/插件对REST权限的篡改

部分自定义主题或插件可能修改了REST API的权限回调:

  • 暂时切换到WordPress默认主题(如Twenty Twenty-Four)测试API是否正常
  • 搜索当前主题和插件代码中是否存在woocommerce_rest_check_permissions或rest_authentication_errors钩子的自定义逻辑,若有则注释后测试

5. 调试请求头部的实际发送情况

修改代码添加调试日志,配合浏览器Network面板确认Authorization头是否正确发送:

fetch(apiUrl, {
    headers: {
        'Authorization': 'Bearer YOUR_ACTUAL_TOKEN'
    }
})
.then(response => {
    console.log('Response status:', response.status);
    console.log('Request headers:', response.headers.get('Authorization'));
    if (!response.ok) {
        throw new Error('Failed to fetch order details, status: ' + response.status);
    }
    return response.json();
})

内容的提问来源于stack exchange,提问作者Menne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 18:12:28