如何使用 Symfony 和 Guzzle 通过 api 更新 woocommerce 产品

How to update woocommerce product via api with Symfony and Guzzle

问题:如何使用 Guzzle 和 guzzle/oauth-subscriber

通过 API 更新 woocommerce 产品的价格

我使用 作为参考来让 oauth1 工作以请求数据,效果很好。只是无法锻炼发送 post 个变量。

大多数教程和 guzzle 文档使用 $client->request('GET', 'http://httpbin.org', [ 'query' => ['foo' => 'bar'] ]); 但这也不起作用:

        $response = $client->request('POST', $endpoint, [
            'auth' => 'oauth',
            'form_params' => [
                'price' => '21'
            ]
        ]);

这是我目前的代码,用get$client->get()注释掉什么成功returns一个产品。

        $endpoint = 'products/12';

        $handler = new \GuzzleHttp\Handler\CurlHandler();
        $stack = \GuzzleHttp\HandlerStack::create($handler);

        $middleware = new \GuzzleHttp\Subscriber\Oauth\Oauth1([
            'consumer_key'    => $this->consumer_key,
            'consumer_secret' => $this->consumer_secret,
            'token_secret'    => '',
            'token'           => '',
            'request_method' => Oauth1::REQUEST_METHOD_QUERY,
            'signature_method' => Oauth1::SIGNATURE_METHOD_HMAC
        ]);
        $stack->push($middleware);

        $client = new \GuzzleHttp\Client([
            'base_uri' => $this->url . $this->api,
            'handler' => $stack
        ]);

        $response = $client->post( $endpoint, [ 'auth' => 'oauth' ], ['price' => '21'] );

        var_dump($response);

        //$response = $client->get( $endpoint, [ 'auth' => 'oauth' ] );
        //return array(
        //  'status' => $response->getStatusCode(),
        //  'header' => $response->getHeaderLine('content-type'),
        //  'body' => json_decode($response->getBody())
        //);

我的代码存在三个问题:

  1. 使用 POST 更新,而不是 PUT。如前所述 POST 是创建,而不是更新。

  2. 正在阅读 Woocommerce docs 我发现 'price' 是只读的,所以我尝试的参数组合都不起作用。 regular_price 是此处使用的正确参数。

  3. None 我传递给 $client-> 的选项有效,它需要是一个查询字符串。我将其附加到 $endpoint 变量。

$endpoint .= "?stock_quantity=456";
$response = $client->put( $endpoint, [ 'auth' => 'oauth' ] );