Wordpress WooCommerce-WooCommerce\u rest\u无法\u查看-状态401

Wordpress WooCommerce-WooCommerce\u rest\u无法\u查看-状态401,wordpress,woocommerce,woocommerce-rest-api,wordpress-rest-api,Wordpress,Woocommerce,Woocommerce Rest Api,Wordpress Rest Api,我已生成使用者密钥和使用者机密。该网站已安装SSL。我还安装了JSON和REST服务所需的插件。以下是url的外观: https://<url>/wp-json/wc/v1/products 我拥有与使用者密钥对应的读写权限。我遇到了相同的问题 下面是我如何解决它的: require "woocommerce_api" woocommerce = WooCommerce::API.new( "https://example.com", "consumer_key",

我已生成使用者密钥和使用者机密。该网站已安装SSL。我还安装了JSON和REST服务所需的插件。以下是url的外观:

https://<url>/wp-json/wc/v1/products
我拥有与使用者密钥对应的读写权限。

我遇到了相同的问题

下面是我如何解决它的:

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\u string\u auth:true

您需要在
HTTPS

下强制基本身份验证为查询字符串true这就是我停止担心并继续前进的方式

简而言之,woocommerce rest控制器几乎都有一个
SOMEWPRESTCLASS::get\u item\u permissions\u check()
方法,该方法依次调用
wc\u rest\u check\u post\u 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;
}
试图帮助他人: 我在尝试CURL时遇到了401响应,VBA也在尝试以内容类型“application/json”请求 但是,我只需在浏览器地址栏中输入以下内容,即可获得有效的响应:

按照这一思路,我回到我的VBA应用程序,将内容类型更改为“application/text”,并能够提取响应代码为200的有效响应文本。
希望这对其他人有所帮助。

试试这个,我在Automatic/woocommerce库中遇到了同样的问题,我只是通过在查询中添加customer\u密钥和customer\u secret使其正常工作

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

快速编辑


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

查询\u字符串\u验证设置为true

必须深入研究代码才能找到此设置

在文档中找不到它

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

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


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

我刚刚遇到了这个问题。显然,curl处理url的方式很有趣,所以我不得不用双引号将其封装起来

这不起作用: 卷曲

这确实有效:
curl

以下是对Quickredfox anwer的一个修改答案:

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) {
    if($_GET['consumer_key'] == 'asdfghj' && $_GET['consumer_secret'] == 'qwerty') {
        return true;
    }

    return $permission;
}
这样做的缺点是失去了为使用gui的用户添加和取消访问权限的灵活性。但是,如果其他方法都不起作用,而您也无法找出原因,那么这将起作用,并且不会将API公开给全世界

哦,这需要将密钥和机密作为参数a la传递:

https://foo.bar.com/wp-json/wc/v3/products/123&consumer_key=asdfghj&consumer_secret=qwerty

这在没有https的情况下可以工作,但是如果您使用它而没有https,请记住,您随请求发送的任何凭据都将以纯文本形式发送。

对于本地开发(localhost),您也可以使用基本身份验证(例如,对于邮递员),而不是消费者密钥和消费者机密。它可以无缝地工作。

您可以与postman一起尝试Oauth 1.0:


尝试使用查询参数发出请求,如下所示:

https://www.exemple.com/wp-json/wc/v3/orders?consumer_key=ck_01234567890&consumer_secret=cs_01234567890
此处:
https://www.exemple.com
您需要填写您的url域


这里
consumer\u key和consumer\u secret
是您以前在WooCommerce>Settings>Advanced>restapi上生成的ckcs密码。我刚刚遇到这个问题,得到的错误消息与OP完全相同。我使用的是https和OAuth 1。问题最终变成了领域。我正试图访问
example.com
,而该站点的正确域是
www.example.com

此URL返回401\u rest\u无法\u查看错误:

https://example.com/wp-json/wc/v3/products
此URL工作并返回结果:

https://www.example.com/wp-json/wc/v3/products

将以下代码添加到function.php以解决此问题:

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;
}

在节点js代码中

const-WooCommerceRestApi=require(@woocommerce/WooCommerceRestApi”)。默认值;
const api=新的Woocmercerestapi({
url:“http://example.com",
消费市场:“ck_uxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”,
消费者信用证:“cs_uuxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”,
queryStringAuth:是的,
版本:“wc/v3”

});通过将下面的这一行添加到.htaccess文件的末尾,问题得以解决

您只需将这一行添加到.htaccess,我就可以使用它了

SetEnv HTTPS on

并确保使用OAuth 1.0进行授权


这其实不是很好,因为这样你就向所有人敞开了大门!虽然我知道这样做的风险,但我现在找不到任何其他解决方案,谢谢。将用作临时fix@Aloha我应该在哪里使用它?请详细解释你的答案。太好了!这对我很有效。我在这方面做了很多努力。我试过这样做,但我仍然有同样的结果。我有一个httpswebsite@Rom-888您是否选择了将身份验证数据添加到:请求正文/请求URL?WooCommerce wiki REST部分设置了错误的选项,以至于很多开发人员在基本身份验证中都存在此问题。经过很长一段时间,我找到了您的解决方案,将查询\字符串\身份验证设置为true,最后我修复了它!非常感谢,伙计;)@dieter我可以知道哪些文件附加这些代码请+1,因为这是我让邮递员发送请求的方式。谢谢在http上,它使用的是OAuth 1.0。对于https上的生产服务器,它可以与此配合使用。真奇怪!此链接已解决问题:)此链接已解决问题:)
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;
}