Есть ли способ сделать API WEST WooCommerce дружественным к клиентам? - PullRequest
0 голосов
/ 01 июня 2019

Я создаю интернет-магазин для приложений 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"
            }
        ]
    }
}

1 Ответ

0 голосов
/ 12 июля 2019

Итак, я бы нашел временное решение.Я сделал функцию, которая перехватывает WooCommerce REST API-разрешения, вы можете Google, как это сделать.Он зацепляет фильтр woocommerce_rest_check_permissions.Просто проверьте, залогинен ли пользователь, и предоставьте доступ к методам.Это так просто!

...