是否可以添加使用WooCommerce';授权书?
我需要在我的WordPress插件中添加一个API端点,该端点将写入数据库,等等。我希望它由调用此新API的远程系统触发 但是,我想使用内置的WooCommerce REST身份验证,即在此处设置的身份验证: (不,这些证书不再有效) 有办法做到这一点吗?要添加一个自定义HTTP端点,该端点将使用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
或者有没有办法在现有的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()
将取决于密钥/密码的正确组合。如果正确,关联用户的身份验证将与Wordpress相同wp\u get\u current\u user()
- 如果组合正确,您将得到
,如果键不正确[true,WP\u用户\u对象]
[false,空的\u用户\u对象]
- 如果正确的密钥和不正确的密码,将抛出401(不是我示例中的那个,woocommerce的另一个401。
。我相信这就像wp登录一样,正确登录时自定义错误消息(密钥),很好^^ ^)my_awesome_func()
- 检查用户是否已登录,如
如果(!is_user_logged_in())返回false
- 正在检查用户ID
wp\u get\u current\u user()->ID
- 按您的角色/权限系统进行检查
- 既然您有了用户ID,就可以使用它做您想做的事情
- 使用
参数处理GET或POST HTTP参数WP\u REST\u Request$Request
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等)实现同样的功能。。。就像上面描述的那样。效果很好!你链接到一个很棒的替代方法。