【问题标题】:Can't POST/PUT/DELETE any products into WooCommerce by REST API无法通过 REST API 将任何产品发布/放置/删除到 WooCommerce
【发布时间】:2017-06-06 07:52:39
【问题描述】:

我正在使用 Wordpress 4.7.1 和 Woocommerce 2.6.13 插件并启用 REST API。我是从具有 read_write 权限的控制台插件 UI 创建的用户凭据。

现在我正在尝试使用 OAuth1 获取产品: 服务返回 200 OK,凭据正确。

然后我正在尝试删除一些产品: 或尝试创建新产品: 服务返回 401 Unauthorized。

怎么了?

UPD1: .htaccess 文件:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
RewriteBase /wordpress/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wordpress/index.php [L]
</IfModule>

# END WordPress

【问题讨论】:

  • 嗨,谢尔盖,我建议您将错误文本粘贴到问题中,而不是使用屏幕截图。在 Google 上更容易找到。
  • 嗨@JamesJones!谢谢你的回应。当然,我尝试使用在 Google 上找到它。你能帮助我并给我们工作解决方案吗?例如,来自 Google。
  • 我不是这个意思。我的意思是你不应该使用错误的截图。您应该将错误文本粘贴到您的问题中。这使人们更容易关注您的问题,并且有相同问题的人更容易使用 Google 找到您的问题。这样更有可能有人会回答您的问题。

标签: wordpress woocommerce woocommerce-rest-api


【解决方案1】:

这个https://github.com/woocommerce/woocommerce/wiki/Getting-started-with-the-REST-API#server-does-not-support-postdeleteput 可以帮我解决问题。

有时,服务器不支持 POST/DELETE/PUT 理想情况下,您的服务器应配置为接受这些类型的 API 请求,但如果没有,您可以使用 _method 属性。

https://developer.wordpress.org/rest-api/using-the-rest-api/global-parameters/#_method-or-x-http-method-override-header

执行 POST 请求并将 _method=PUT 作为查询参数传递对我有用。

【讨论】:

    【解决方案2】:

    您使用的是旧版本的 API 方法。使用带有更新的 woocommerce 插件的最新版本。您也可以点击此链接 https://woocommerce.github.io/woocommerce-rest-api-docs/?php#delete-a-product

    【讨论】:

      【解决方案3】:

      与 API 密钥关联的用户的角色是什么?

      我在使用 Woocommerce API 时遇到了一些授权错误,即使 API 密钥具有读/写权限。在我检查了 Wordpress 中的 Woocommerce API 密钥设置后,我注意到与我使用的密钥关联的用户没有任何 Woocommerce 角色,例如客户、商店经理或管理员。

      在将管理员用户与一些新的 API 密钥相关联后,我解决了这个问题并且可以对所有 API 端点进行授权。

      由于您仅获得部分端点的授权,因此可能是同一个问题。与 API 密钥关联的用户可能没有具有删除权限的角色。

      【讨论】:

        【解决方案4】:

        我在使用 WC REST API 时遇到了同样的问题,并使用 v2 解决了它,我使用 POST 而不是 PUT,例如:

        $woocommerce = new Client(
            '*** woocommerce-website-url ***',
            '*** key ***',
            '*** secret ***',
            [
                'version' => 'wc/v2',
                'verify_ssl' => false,
                'wp_api' => true,
                'query_string_auth' => true
            ]
        );
        
        $data = [
            "stock_quantity" => "0"
        ];
        
        $woocommerce->post('products/12345', $data);
        

        【讨论】:

          猜你喜欢
          • 2021-08-08
          • 1970-01-01
          • 2022-07-19
          • 2018-04-22
          • 2015-06-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-12-15
          相关资源
          最近更新 更多