有什么方法可以使WooCommerce REST API对客户友好?

时间:2019-05-31 22:34:17

标签: woocommerce woocommerce-rest-api

我正在WordPress + WooCommerceAndroid应用程序上构建一个网上商店,该商店从WooCommerce REST API检索数据。我在JWT上使用WooCommerce的REST API来获取有关产品,类别等的信息,还可以下订单,添加到购物车等。

这很好,如果您拥有管理员的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 :(得分:0)

所以,我会临时解决。我做了一个函数,该函数挂钩了WooCommerce REST API权限,您可以Google来做到这一点。它从woocommerce_rest_check_permissions过滤器中挂接。只需检查用户是否登录并提供对方法的访问即可。很简单!