Я создаю интернет-магазин для приложений WordPress
+ WooCommerce
и Android
, которые получают данные из API-интерфейса WEST WomCommerce. Я использую 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"
}
]
}
}