WooCommerce Rest-API更新产品

时间:2018-06-03 03:01:51

标签: wordpress plugins woocommerce wordpress-rest-api woocommerce-rest-api

我试图更新远程woocommerce产品,但我被困了。我们如何完成此代码:

class myDemo {
    public function __construct() {
        $this->url = 'http://localhost/alfa/wp-json/wc/v2/products/2213';
        $this->meta_key = 'whatever';
        $this->consumer_key    = 'ck_5978846499ea9bb1554b420e59072e46b8dedb1d';
        $this->consumer_secret = 'cs_1009590c5443306f2082b2e508098be37fba2ee5'; 
        $this->access_token        = '';
        $this->access_token_secret = '';
        $this->method = 'PUT';
        $this->set_signature_key();
        $this->set_nonce();
        $this->set_headers();
        $this->set_base_string();
        $this->set_signature();
        $this->set_headers();
        $this->set_header_string();
    }
    function get_response() {

        $url = $this->url;
        if( ! empty( $this->meta_key ) ) {
            $url = add_query_arg( array( 'meta_key' => $this->meta_key ), $url );
        }
        $args = array(
            'method'  => $this->method,
            'headers' => array(

                'Authorization' => 'OAuth ' . $this->header_string,
            ),
        );
        $out = wp_remote_request( $url, $args );
        return $out;
    }

    function set_signature_key() {

        $this->signature_key = urlencode( $this->consumer_secret ) . '&' . urlencode( $this->access_token_secret );
    }

    function set_nonce() {
        $this->nonce = wp_create_nonce( rand() . $this->url . $this->method );

    }
    function set_headers() {
        if( ! isset( $this->headers ) ) {

            $this->headers = array(
                'oauth_consumer_key'     => $this->consumer_key,
                'oauth_nonce'            => $this->nonce,
                'oauth_signature_method' => 'HMAC-SHA1',
                'oauth_timestamp'        => time(),
                'oauth_token'            => $this->access_token,
                'oauth_version'          => '1.0',
            );
        } elseif( isset( $this->signature ) ) {

            $this->headers['oauth_signature'] = $this->signature;   

        }
    }
    function set_base_string() {
        $headers = $this->headers;
        $url_params = array(
            'meta_key' => $this->meta_key
        );
        $headers_and_params = array_merge( $headers, $url_params );

        ksort( $headers_and_params );
        $headers_and_params_string = '';
        foreach( $headers_and_params as $key => $value ) {
            $headers_and_params_string .= "$key=$value&";
        }
        $headers_and_params_string = rtrim( $headers_and_params_string, '&' );
        $out = $this->method . '&' . rawurlencode( $this->url ) . '&' . rawurlencode( $headers_and_params_string );
        $this->base_string = $out;
    }

    function set_signature() {
        $out = hash_hmac( 'sha1', $this->base_string, $this->signature_key, TRUE );
        $out = base64_encode( $out );
        $this->signature = $out;
    }
    function set_header_string() {
        // Will hold the combined string of headers.
        $out = '';     

        foreach( $this->headers as $key => $value ) {
            $value = rawurlencode( $value );
            $out .= $key . '=' . '"' . $value . '"' . ', ';

        }
        $out = rtrim( $out, ', ' );
        $this->header_string = $out;

    }

}
$demo = new myDemo();
die(json_encode($demo->get_response()));

我很有意思: https://woocommerce.github.io/woocommerce-rest-api-docs/?php#update-a-product

我看到了这段代码:

$data = [
    'regular_price' => '24.54'
];

我必须将此数据阵列发送到远程woocommerce。但我不知道如何。

感谢您的一切。

0 个答案:

没有答案