我已经生成了消费者密钥和消费者密钥。该网站已安装SSL。我还安装了JSON和REST服务所需的插件。这就是网址的样子:
https://<url>/wp-json/wc/v1/products
当我尝试使用基本身份验证通过使用Instagram插件(Chrome插件)获取(获取)产品详细信息时,我收到了以下JSON响应:
{
"code": "woocommerce_rest_cannot_view",
"message": "Sorry, you cannot list resources.",
"data": {
"status": 401
}
}
我同时拥有与Consumer键对应的READ和WRITE权限。
答案 0 :(得分:8)
我遇到了同样的问题。
以下是我的解决方法:
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
答案 1 :(得分:2)
试图帮助他人: 我在尝试使用CURL时遇到了401响应,并且在VBA试图请求内容类型&#34; application / json&#34; 但是,我只需在浏览器地址栏中输入一个有效的响应即可: https://mywebsite.com/wp-json/wc/v2/products?consumer_key=ck_blahblah&consumer_secret=cs_blahblah
按照这种思路,我回到了我的VBA应用程序并将内容类型更改为&#34; application / text&#34;并能够使用响应代码200提取有效的响应文本。 希望这有助于某人。
答案 2 :(得分:1)
尝试使用查询参数发出请求,如下所示:
https://www.exemple.com/wp-json/wc/v3/orders?consumer_key=ck_01234567890&consumer_secret=cs_01234567890
此处:https://www.exemple.com
,您需要填写您的网址域。
此处:consumer_key and consumer_secret
是您先前在 WooCommerce>设置>高级>中创建的 ck 和 cs 。 REST API
答案 3 :(得分:1)
通过在 .htaccess 文件的末尾添加以下这一行来解决问题
您只需将此行添加到 .htaccess 中即可,这对我有用
SetEnv HTTPS 开启
并确保使用OAuth 1.0进行授权
io.write() isn't writing to the console when a sleep function is called afterwards
答案 4 :(得分:0)
尝试一下,我在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
]);
答案 5 :(得分:0)
您遇到的401错误是因为您使用的是基本身份验证,即使您的网站不安全(没有https)。
邮递员中的解决方案是使用OAuth 1.0。只需添加消费者密钥和消费者秘密并发送请求即可。
答案 6 :(得分:0)
我刚遇到这个。显然,curl是如何处理URL的,这很有趣,所以我不得不将其封装在双引号中。
答案 7 :(得分:0)
这是Quickredfox回答的修改后的答案:
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暴露给全世界。
哦,这需要将密钥和秘密作为参数la传递:
https://foo.bar.com/wp-json/wc/v3/products/123&consumer_key=asdfghj&consumer_secret=qwerty
这在不使用https的情况下也可以使用,但是如果您在不使用https的情况下使用它,请记住,随请求一起发送的所有凭据都将以纯文本发送。
答案 8 :(得分:0)
对于本地开发(本地主机),您还可以使用基本身份验证(例如,邮递员)而不是使用者密钥和使用者秘密。它可以无缝运行。
答案 9 :(得分:0)
我刚刚遇到了这个问题,我收到了与 OP 完全相同的错误消息。我使用的是 https 和 OAuth 1。问题最终出在域上。当网站的正确域为 example.com
时,我试图访问 www.example.com
。
此 URL 返回 401 woocommerce_rest_cannot_view 错误:
https://example.com/wp-json/wc/v3/products
此网址有效并返回结果:
https://www.example.com/wp-json/wc/v3/products
答案 10 :(得分:0)
将此代码添加到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;
}
答案 11 :(得分:0)
在节点js代码中
const WooCommerceRestApi = require("@woocommerce/woocommerce-rest-api").default;
const api = new WooCommerceRestApi({
url: "http://example.com",
consumerKey: "ck_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
consumerSecret: "cs_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
queryStringAuth: true,
version: "wc/v3"
});
答案 12 :(得分:-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;
}
答案 13 :(得分:-1)