如何将Woocommerce REST API与普通的永久链接一起使用?

时间:2019-06-16 11:47:18

标签: permalinks woocommerce-rest-api

我想向Woocommerce REST API发出请求,以检查状态并更新产品。我的Wordpress安装使用普通的永久链接,因为前端是内置在React中的,它在静态主页上呈现。因此,我需要将所有查询都传递到首页,以便我的React路由器可以处理请求(如果我将永久链接设置为pretty,则wordpress路由器将引导任何非主页的请求,并且该请求不会到达React路由器) 。

我正在使用ssl,并且设置了使用者密钥和机密。如果将永久链接设置为漂亮,我可以成功发出请求。但是,我需要这样查询:

https://example.com/?rest_route=/wc/v3/products

我尝试将消费者的机密和密钥作为额外的参数传递:

https://example.com/?rest_route=/wc/v3/products&consumer_key=xxx&consumer_secret=xxx

但这不起作用。我还尝试将它们作为标头传递给我在php中的手动curl请求。我还尝试通过命令行使用curl发出请求。当我使用漂亮的永久链接使用文档中概述的方法时,所有这些方法均有效,但使用永久链接至普通格式时,它们均会导致401响应,表明我未通过身份验证。

有什么解决办法吗?还是我只需要创建自定义端点?

1 个答案:

答案 0 :(得分:0)

文档(woocommerce.github.io)说:

要使用最新版本的REST API,您必须使用:

...

默认永久链接不起作用

(强调他们的)

对于“旧版API”,其工作原理如下:

mywebsite.com/index.php?wc-api-version=1&wc-api-route=/products/1234

发件人:

add_rewrite_rule( '^wc-api/v([1-3]{1})(.*)?', 'index.php?wc-api-version=$matches[1]&wc-api-route=$matches[2]', 'top' );

class-wc-legacy-api.php:80

WC_Legacy_API::add_endpoint()

如果需要,可以注册自己的重写规则,并在其中执行类似的操作:

$rest_server = rest_get_server();

$request = new WP_REST_Request( 'GET', '/wc/v3/products' );

$response = rest_do_request( $request );

return...