是否可以添加使用WooCommerce';授权书?

是否可以添加使用WooCommerce';授权书?,woocommerce,hook-woocommerce,wordpress-rest-api,woocommerce-rest-api,Woocommerce,Hook Woocommerce,Wordpress Rest Api,Woocommerce Rest Api,我需要在我的WordPress插件中添加一个API端点,该端点将写入数据库,等等。我希望它由调用此新API的远程系统触发 但是,我想使用内置的WooCommerce REST身份验证,即在此处设置的身份验证: (不,这些证书不再有效) 有办法做到这一点吗?要添加一个自定义HTTP端点,该端点将使用WooCommerce的身份验证,然后运行一些我想要运行的任意代码 或者有没有办法在现有的WooCommerceAPI端点上添加一个钩子,以便在该端点执行之前运行?我只需要一种方法来使用现有的WooC

我需要在我的WordPress插件中添加一个API端点,该端点将写入数据库,等等。我希望它由调用此新API的远程系统触发

但是,我想使用内置的WooCommerce REST身份验证,即在此处设置的身份验证:

(不,这些证书不再有效)

有办法做到这一点吗?要添加一个自定义HTTP端点,该端点将使用WooCommerce的身份验证,然后运行一些我想要运行的任意代码


或者有没有办法在现有的WooCommerceAPI端点上添加一个钩子,以便在该端点执行之前运行?我只需要一种方法来使用现有的WooCommerce REST API auth来触发我需要在插件中运行的一些更新。

您可以在WooCommerce端点下添加一个路由来使用此密钥/秘密身份验证系统

下面是一个工作示例:

add_action('rest_api_init', function () {
    register_rest_route('wc', '/test', [
        'methods'  => 'GET',
        'callback' => 'my_awesome_func',
    ]);
});

function my_awesome_func(WP_REST_Request $request)
{

    if (is_user_logged_in() && (int)wp_get_current_user()->ID === 123) {
        //your stuff only for legged in user 123
        return new WP_REST_Response('ok', 200);
    }

    return new WP_Error('unauthorized', __('You shall not pass'), [ 'status' => 401 ]); //can also use WP_REST_Response

 }
这将:

  • 在“wc”端点(一个)下添加一个新的GET路由,因此
    https://example.com/wp-json/wc/test
  • 然后使用“HTTP基本身份验证”按照
  • 的结果是\u user\u logged\u in()
    wp\u get\u current\u user()
    将取决于密钥/密码的正确组合。如果正确,关联用户的身份验证将与Wordpress相同
  • 如果组合正确,您将得到
    [true,WP\u用户\u对象]
    ,如果键不正确
    [false,空的\u用户\u对象]
  • 如果正确的密钥和不正确的密码,将抛出401(不是我示例中的那个,woocommerce的另一个401。
    my_awesome_func()
    。我相信这就像wp登录一样,正确登录时自定义错误消息(密钥),很好^^ ^)
然后,您需要按照您的规则保护您的路线:

  • 检查用户是否已登录,如
    如果(!is_user_logged_in())返回false
  • 正在检查用户ID
    wp\u get\u current\u user()->ID
  • 按您的角色/权限系统进行检查
  • 既然您有了用户ID,就可以使用它做您想做的事情
  • 使用
    WP\u REST\u Request$Request
    参数处理GET或POST HTTP参数
所以它可能看起来像:

add_action('rest_api_init', function () {
    register_rest_route('wc', '/test', [
        'methods'  => 'GET',
        'callback' => 'my_awesome_func',
    ]);
});

function my_awesome_func(WP_REST_Request $request)
{

    if (is_user_logged_in() && (int)wp_get_current_user()->ID === 123) {
        //your stuff only for legged in user 123
        return new WP_REST_Response('ok', 200);
    }

    return new WP_Error('unauthorized', __('You shall not pass'), [ 'status' => 401 ]); //can also use WP_REST_Response
}
似乎需要添加一个RESTAPI端点(找不到关于它的适当文档…)。但我对此进行了测试,并且至少在使用Woocommerce密钥/秘密身份验证系统时起到了作用,我相信该系统是在
/wc/
端点下应用的

注意:小心地将管线添加到wc端点,因为您可能会覆盖现有管线端点。例如:添加
/product/mytest
可能与处理
/product/[product\u id]
的官方商业路线冲突

注2:我首先测试了一个,并传递了Woocommerce密钥/密码,以查看WordPress是否能够正确地验证和识别我。但它不起作用(WP使用)。因此,我转到WooCommerceAPI端点


注3:您可以使用Wordpress REST API和自定义路由以及“机器到机器”身份验证插件(如Oauth、应用程序密码、JWT等)实现同样的功能。。。就像上面描述的那样。

效果很好!你链接到一个很棒的替代方法。