Ram*_*Ram 7 wordpress woocommerce wordpress-rest-api woocommerce-rest-api
我已经生成了一个消费者密钥和消费者秘密.该网站已安装SSL.我还安装了JSON和REST服务所需的插件.这是网址的样子:
https://<url>/wp-json/wc/v1/products
Run Code Online (Sandbox Code Playgroud)
当我试图通过使用Instagram插件(Chrome插件)使用Basic Auth获取(获取)产品详细信息时,我得到一个JSON响应,如:
{
"code": "woocommerce_rest_cannot_view",
"message": "Sorry, you cannot list resources.",
"data": {
"status": 401
}
}
Run Code Online (Sandbox Code Playgroud)
我同时拥有与Consumer键对应的READ和WRITE权限.
小智 11
我遇到了同样的问题.
以下是我如何解决它:
require "woocommerce_api"
woocommerce = WooCommerce::API.new(
"https://example.com",
"consumer_key",
"consumer_secret",
{
wp_json: true,
version: "wc/v1",
query_string_auth: true
}
)
Run Code Online (Sandbox Code Playgroud)
关键是query_string_auth: true
您需要强制基本身份验证作为查询字符串trueHTTPS
这就是我停止担忧并继续前进的方式。
简而言之,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;
}
Run Code Online (Sandbox Code Playgroud)
小智 6
您收到的401错误是因为您使用的是基本身份验证,即使您的网站不安全(没有https)。
邮递员中的解决方案是使用OAuth 1.0。只需添加消费者密钥和消费者秘密并发送请求即可。
试试这个,我对 automattic/woocommerce 库也有同样的问题,我只是通过将 customer_key 和 customer_secret 附加到查询中来使其工作。
$woocommerce->get("customers/$userId?consumer_key={$this->key}&consumer_secret={$this->secret}");
Run Code Online (Sandbox Code Playgroud)
快速编辑
上面的方法有效,但我为 automattic/woocommerce 库找到了更好的解决方案。
将query_string_auth设置为true
必须深入研究代码才能找到此设置。
在文档中没有找到任何内容
return new Client($this->url, $this->key, $this->secret, [
"query_string_auth" => true
]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10347 次 |
| 最近记录: |