No se puede PUBLICAR/COLOCAR/ELIMINAR ningún producto en WooCommerce mediante la API REST

3 minutos de lectura

avatar de usuario
sergey nikitin

estoy usando WordPress 4.7.1 con Woocommerce 2.6.13 complemento con API REST habilitada. Me crearon credenciales de usuario desde la interfaz de usuario del complemento de la consola con read_write permisos

Ahora estoy probando productos GET usando OAuth1:
ingrese la descripción de la imagen aquí

service return 200 OK, las credenciales son correctas.

entonces estoy tratando de ELIMINAR algún producto:
ingrese la descripción de la imagen aquí

o tratando de crear un nuevo producto:
ingrese la descripción de la imagen aquí

devolución de servicio 401 No autorizado.

¿Qué ocurre?

UPD1:
Archivo .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

  • Hola Sergey, te sugiero que pegues el texto del error en la pregunta en lugar de usar capturas de pantalla. Más fácil de encontrar en Google.

    –James Jones

    26 de enero de 2017 a las 1:29

  • ¡Hola @JamesJones! Gracias por tu respuesta. Por supuesto, traté de encontrarlo en Google. ¿Pueden ayudarme y darnos una solución de TRABAJO? De Google, por ejemplo.

    – Serguéi Nikitin

    27 de enero de 2017 a las 11:33


  • Eso no es lo que quiero decir exactamente. Quiero decir que no debes usar capturas de pantalla de errores. Debe pegar el texto del error en su pregunta. Esto hace que sea más fácil para las personas seguir su pregunta y más fácil para las personas con el mismo problema encontrar su pregunta usando Google. Lo que hace que sea más probable que alguien responda a tu pregunta.

    –James Jones

    27 de enero de 2017 a las 13:45

  • Posible duplicado de Android: no se puede crear un pedido con la API de Woocommerce

    – debo.stackoverflow

    14 de abril de 2017 a las 13:18

Este https://github.com/woocommerce/woocommerce/wiki/Getting-started-with-the-REST-API#server-does-not-support-postdeleteput hazme el truco.

Algunas veces, el servidor no admite POST/DELETE/PUT Idealmente, su servidor debe estar configurado para aceptar este tipo de solicitud de API, pero si no, puede usar la propiedad _method.

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

Hacer una solicitud POST y pasar _method=PUT como parámetro de consulta funciona para mí.

Está utilizando un método API de versión anterior. Use la última versión con el complemento de woocommerce actualizado. También puede seguir este enlace
https://woocommerce.github.io/woocommerce-rest-api-docs/?php#delete-a-product

¿Cuáles son los roles del usuario asociado con las claves API?

Tuve algunos errores de autorización con la API de Woocommerce, aunque las claves de la API tenían permisos de lectura/escritura. Después de verificar la configuración de las claves de la API de Woocommerce en WordPress, noté que el usuario asociado con las claves que usé no tenía ningún rol de Woocommerce, como Cliente, Gerente de tienda o Administrador.

Después de asociar un usuario administrador a algunas claves de API nuevas, resolví el problema y pude autorizar con todos los puntos finales de API.

Dado que está autorizado solo para algunos de los puntos finales, podría ser el mismo problema. El usuario que está asociado con las claves API probablemente no tenga un rol con permisos para eliminar.

avatar de usuario
Iván Velkov

Tuve el mismo problema con la API REST de WC y lo resolví usando v2 y en lugar de PUT usé POST, por ejemplo:

$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);

¿Ha sido útil esta solución?