WooCommerce - woocommerce_rest_cannot_view - 状态401

问题描述 投票:6回答:5

我已经生成了一个消费者密钥和消费者秘密。该网站已安装SSL。我还安装了JSON和REST服务所需的插件。这是网址的样子:

https://<url>/wp-json/wc/v1/products

当我试图通过使用Instagram插件(Chrome插件)使用Basic Auth获取(获取)产品详细信息时,我得到一个JSON响应,如:

{
  "code": "woocommerce_rest_cannot_view",
  "message": "Sorry, you cannot list resources.",
  "data": {
    "status": 401
  }
}

我同时拥有与Consumer键对应的READ和WRITE权限。

wordpress woocommerce woocommerce-rest-api wordpress-rest-api
5个回答
9
投票

我遇到了同样的问题。

以下是我如何解决它:

require "woocommerce_api"

woocommerce = WooCommerce::API.new(
  "https://example.com",
  "consumer_key",
  "consumer_secret",
  {
    wp_json: true,
    version: "wc/v1",
    query_string_auth: true
  }
)

关键是query_string_auth: true你需要在HTTPS下强制基本身份验证作为查询字符串true


2
投票

试图帮助其他人:我在尝试使用CURL时遇到了401响应,并且VBA试图以内容类型“application / json”请求,但是,我只能在浏览器中输入有效的响应地址栏:https://mywebsite.com/wp-json/wc/v2/products?consumer_key=ck_blahblah&consumer_secret=cs_blahblah

按照这种思路,我回到了我的VBA应用程序并将内容类型更改为“应用程序/文本”,并且能够提取响应代码为200的有效响应文本。希望这有助于某人。


2
投票

您获得的401错误是因为您使用的是基本身份验证,即使您的网站不安全(没有https)。

postman中的解决方案是使用OAuth 1.0。只需添加消费者密钥和消费者密钥并发送请求即可。


1
投票

试试这个,我在automattic / woocommerce库中遇到了同样的问题,我只是通过将customer_key和customer_secret附加到查询中来实现它。

$woocommerce->get("customers/$userId?consumer_key={$this->key}&consumer_secret={$this->secret}");

快速编辑


上述方法有效,但我找到了自动/ woocommerce库的更好的解决方案。

将query_string_auth设置为true

不得不深入研究代码来找到这个设置。

在文档中找不到任何内容

return new Client($this->url, $this->key, $this->secret, [
    "query_string_auth" => true
]);

-1
投票

这就是我不再担心和继续前进的方式。

简而言之,woocommerce休息控制器几乎都有一个SOMEWPRESTCLASS::get_item_permissions_check()方法,反过来调用wc_rest_check_post_permissions()来决定它是否返回该错误;

因此,您可以使用您想要的方式进行操作并验证:

add_filter( 'woocommerce_rest_check_permissions', 'my_woocommerce_rest_check_permissions', 90, 4 );

function my_woocommerce_rest_check_permissions( $permission, $context, $object_id, $post_type  ){
  return true;
}
© www.soinside.com 2019 - 2024. All rights reserved.