我已经生成了一个消费者密钥和消费者秘密。该网站已安装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权限。
我遇到了同样的问题。
以下是我如何解决它:
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
试图帮助其他人:我在尝试使用CURL时遇到了401响应,并且VBA试图以内容类型“application / json”请求,但是,我只能在浏览器中输入有效的响应地址栏:https://mywebsite.com/wp-json/wc/v2/products?consumer_key=ck_blahblah&consumer_secret=cs_blahblah
按照这种思路,我回到了我的VBA应用程序并将内容类型更改为“应用程序/文本”,并且能够提取响应代码为200的有效响应文本。希望这有助于某人。
您获得的401错误是因为您使用的是基本身份验证,即使您的网站不安全(没有https)。
postman中的解决方案是使用OAuth 1.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
]);
这就是我不再担心和继续前进的方式。
简而言之,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;
}