有什么方法可以让 WooCommerce REST API 对客户友好吗?
Is there any way to make WooCommerce REST API be friendly to customers?
我正在 WordPress
+ WooCommerce
和 Android
应用程序上构建一个电子商店,从 WooCommerce REST API 检索数据。我正在使用 WooCommerce
的 REST API 和 JWT 来获取有关产品、类别等的信息。还可以下订单、添加到购物车等。
如果您有管理员的 OAuth 1.0a 凭据,那很好,但是,我使用的是客户的 JWT。我让 WordPress
接受这个身份验证方法(通过我的插件)。
如果我向 http://SERVER/wp-json/wc/v3/products/categories
发出请求,我将收到此错误:
{
"code": "woocommerce_rest_cannot_view",
"message": "Вы не можете просматривать список ресурсов.",
"data": {
"status": 403
}
}
我通过了 Authentification: Bearer "JWT"
并且 WordPress
接受了,但是 WooCommerce
没有给我任何信息。
我如何让 WordPress
接受我的 JWT:
function test_rest_user($result, $th, $request){
$secret_key = defined('JWT_AUTH_SECRET_KEY') ? JWT_AUTH_SECRET_KEY : false;
$auth = $request->get_header_as_array("Authorization");
if ($auth){
$token = explode(" ", $auth[0])[1];
$user = api::exchange_token_to_wp_user($token, $secret_key);
if ($user){
set_current_user($user->data->ID);
}
}
}
add_filter("rest_pre_dispatch", "test_rest_user", 10, 3);
这个问题的主题是WooCommerce
不接受JWT。这是 WordPress
REST API 对客户 JWT (http://SERVER/wp-json/wp/v2/users/me
) 的响应:
{
"id": 7,
"name": "test",
"url": "",
"description": "",
"link": "http://SERVER/author/test/",
"slug": "test",
"avatar_urls": {},
"meta": [],
"_links": {
"self": [
{
"href": "http://SERVER/wp-json/wp/v2/users/7"
}
],
"collection": [
{
"href": "http://SERVER/wp-json/wp/v2/users"
}
]
}
}
所以,我会暂时解决。我做了一个函数,它挂钩了 WooCommerce
REST API 权限,你可以 Google
如何做到这一点。它挂钩 woocommerce_rest_check_permissions
过滤器。只需检查用户是否登录并提供对方法的访问。就是这么简单!
我正在 WordPress
+ WooCommerce
和 Android
应用程序上构建一个电子商店,从 WooCommerce REST API 检索数据。我正在使用 WooCommerce
的 REST API 和 JWT 来获取有关产品、类别等的信息。还可以下订单、添加到购物车等。
如果您有管理员的 OAuth 1.0a 凭据,那很好,但是,我使用的是客户的 JWT。我让 WordPress
接受这个身份验证方法(通过我的插件)。
如果我向 http://SERVER/wp-json/wc/v3/products/categories
发出请求,我将收到此错误:
{
"code": "woocommerce_rest_cannot_view",
"message": "Вы не можете просматривать список ресурсов.",
"data": {
"status": 403
}
}
我通过了 Authentification: Bearer "JWT"
并且 WordPress
接受了,但是 WooCommerce
没有给我任何信息。
我如何让 WordPress
接受我的 JWT:
function test_rest_user($result, $th, $request){
$secret_key = defined('JWT_AUTH_SECRET_KEY') ? JWT_AUTH_SECRET_KEY : false;
$auth = $request->get_header_as_array("Authorization");
if ($auth){
$token = explode(" ", $auth[0])[1];
$user = api::exchange_token_to_wp_user($token, $secret_key);
if ($user){
set_current_user($user->data->ID);
}
}
}
add_filter("rest_pre_dispatch", "test_rest_user", 10, 3);
这个问题的主题是WooCommerce
不接受JWT。这是 WordPress
REST API 对客户 JWT (http://SERVER/wp-json/wp/v2/users/me
) 的响应:
{
"id": 7,
"name": "test",
"url": "",
"description": "",
"link": "http://SERVER/author/test/",
"slug": "test",
"avatar_urls": {},
"meta": [],
"_links": {
"self": [
{
"href": "http://SERVER/wp-json/wp/v2/users/7"
}
],
"collection": [
{
"href": "http://SERVER/wp-json/wp/v2/users"
}
]
}
}
所以,我会暂时解决。我做了一个函数,它挂钩了 WooCommerce
REST API 权限,你可以 Google
如何做到这一点。它挂钩 woocommerce_rest_check_permissions
过滤器。只需检查用户是否登录并提供对方法的访问。就是这么简单!