【问题标题】:"cannot list resources" error from WooCommerce REST APIWooCommerce REST API 中的“无法列出资源”错误
【发布时间】:2017-07-24 10:31:38
【问题描述】:

我是 WordPres 的新手,第一次使用 WooCommerce 插件,想在我的 Android 应用程序中使用 WooCommerce REST API。

我已启用 REST API 并创建了消费者密钥和消费者密钥。

现在,当我在浏览器中使用此 url http://www.my-domain.com/wp-json/wc/v1/products/ 来检查 API 是否正常工作时,我收到此错误:

{"code":"woocommerce_rest_cannot_view","message":"抱歉,您不能 列出资源。","data":{"status":401}}

我的服务器上没有安装 SSL。我怎样才能解决这个问题?我需要使用 PHP 客户端库吗?

【问题讨论】:

    标签: php android wordpress woocommerce-rest-api


    【解决方案1】:

    身份验证方法

    对于较新的 v3 API(不是“旧版”API):

    • 对于安全连接 (HTTPS),您需要使用“基本身份验证”。
    • 对于非安全连接 (HTTP),您需要使用“oAuth1 身份验证”。

    如果您使用错误的身份验证和错误的连接,您将收到 401 响应消息。

    这在 WooCommerce API 文档中有介绍: https://woocommerce.github.io/woocommerce-rest-api-docs/#authentication-over-https

    API 登录用户名和密码 (还有“消费者密钥丢失”错误)

    通常您会将 CK 和 CS 作为头字段传递,但根据服务器的配置方式,您可能会发现它无法正确解析头字段,因此如果包含 CK 和 CS 可能会成功在 URL 中作为参数:

    https://website.tld/wp-json/wc/v1/products?consumer_key=[key]&consumer_secret=[secret]

    Apache 授权变量

    如果您使用 FCGId,您可能需要在 Apache 中填写授权变量。在您的 .htaccess 或网站部分中,添加以下内容:

    <IfModule mod_fcgid.c>
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    </IfModule>
    

    (https://fuelphp.com/forums/discussion/12825/rest-authentication-does-not-work-under-default-cgi-configurations-solution-within/p1)

    【讨论】:

    • v3 也是如此。例如,如果您在 localhost 上运行,只需使用 OAuth 1.0,只提供使用者密钥和使用者密码,并将所有其他属性留空
    • 工作魅力。谢谢
    【解决方案2】:

    您从服务器收到 401 响应。此响应表明您无权使用该 REST 端点。为了使用 woocommerce api,您需要在请求中包含您的授权。

    这里有示例和文档: http://woocommerce.github.io/woocommerce-rest-api-docs/#authentication

    woocommerce 示例不包括 java 示例。 (我假设这就是您用于 android 应用程序的内容)。但是有一个用于 woocommerce 的 3rd 方 java 库。在这里能找到它: https://github.com/icoderman/wc-api-java

    我没有亲自使用过那个库,但它应该包含授权和正确从 woocommerce api 请求数据所需的所有功能。

    【讨论】:

    • 好的!但是如何在请求中包含授权?
    • 如果您转到我发布的链接,您可以参考一些简单的示例。
    【解决方案3】:

    对于未来的 Google 员工...我需要将其添加到我的 .htaccess 中

    WooCommerce API 需要

    RewriteRule ^index.php$ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]

    【讨论】:

    • 这个答案救了我。为了测试HTTP,我将Basic Auth 固定为oAuth 1.0。但它还没有工作。在.htaccess 文件中最终添加该行后,它运行良好。
    • 对此有何解释?
    猜你喜欢
    • 1970-01-01
    • 2020-10-16
    • 2018-10-09
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-21
    相关资源
    最近更新 更多