I am trying to add images to my new products or any product who doesn´t have one via API REST using PHP but I always received the error: Request does not match any route
Just after I create the product I call for this function... but the
private function crearImagenes($productos) { $url = API_REST_URL; $conImagen = $productos->imagen; $peticionNum = 0; $listaSKU = ''; if ($conImagen === '1') { $urlImagen = $this->obtieneURLImagen($productos->skuCCE); $respuesta = true; } else { $urlImagen = NULL; $respuesta = false; } $cont=1; foreach ($urlImagen->data AS $imagen) { $contentType = pathinfo($imagen, PATHINFO_EXTENSION); $content_Type = 'Content-Type: image/'.$contentType; $xmlImage = DIR_IMAGEN.$productos->skuCCE.'/'.$imagen; $xmlImage = $this->curl_get_contents($xmlImage); $xmlImage = base64_encode($xmlImage); $dataString = array( 'entry' => array( 'id' => $productos->idProducto, 'mediaType' => 'image', 'label' => $productos->skuCCE, 'position' => 0, 'disabled' => 'false', 'extension_attributes' => array( 'video_content' => array( ) ), 'types' => array( 'image', 'thumbnail', 'small_image' ), 'file' => $productos->skuCCE, 'content' => array( 'base64_encoded_data' => $xmlImage, 'type' => 'image/'.$content_Type, 'name' => $productos->skuCCE.$content_Type ) ) ); $dataDecode = json_encode($dataString); $url .= "/products/".$productos->skuCCE."/media"; $curl = curl_init(); $token = "Authorization: Bearer ".$this->firmarUsuario(); $headers = array( $token, "Accept: application/json", "Cache-Control: no-cache", $content_Type, "User-Agent: Mozilla/4.0 (compatible)" ); curl_setopt_array($curl, array( CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => $dataString, CURLOPT_HTTPHEADER => $headers, )); $response = curl_exec($curl); $responseDecode = json_decode($response); $err = curl_error($curl); curl_close($curl); if ($err) { echo "cURL Error #:" . $err; } else { echo $response; } $cont++; if ($cont >= 8) { break; } } $flagMagento=$productos->bandera; $flagMagento[4]='1'; $strConsulta="UPDATE tblProductos SET bandera='".$flagMagento."' WHERE tblProductos.codProd=".$productos->codProducto; $serSQL = new serverBD(); $serSQL->MySQL(); $serSQL->execute($strConsulta); return $respuesta; }
Any help wil be appreciated. THANKS!
Solved! Go to Solution.
okay , i understood !!
you have issue with your type parameter of your product image parameters.
Basically its only accepts , like type => 'image/jpeg'; or whatever the extension of image.
Right now its taking , like 'type' => 'image/'.$content_Type, and Where $content_Type = Content-Type: image/'.$contentType(extension of your image).
so currently full type parameter should be like this - type => image/image/png But we only needed like this type => 'image/jpeg'; And thats the actual issue.
So try below code to resolved this issue :
$contentType = pathinfo($imagen, PATHINFO_EXTENSION); //$content_Type = 'Content-Type: image/'.$contentType; // COMMENT this line its not needed $dataString = array( 'entry' => array( 'id' => $productos->idProducto, 'mediaType' => 'image', 'label' => $productos->skuCCE, 'position' => 0, 'disabled' => 'false', 'extension_attributes' => array( 'video_content' => array( ) ), 'types' => array( 'image', 'thumbnail', 'small_image' ), 'file' => $productos->skuCCE, 'content' => array( 'base64_encoded_data' => $xmlImage, 'type' => 'image/'.$contentType, // Here pass $contentType varriable. 'name' => $productos->skuCCE.$content_Type ) ) );
For More reference refer this link - https://magento.stackexchange.com/questions/180128/magento-2-how-to-upload-image-to-rest-api-post
You have issue with - API_REST_URL
Check your final url , it should be like this - http://yourwebsiteurl/index.php/rest/V1/products/{sku}/media
Print your final media url and check with this.
Hi Dave, thanks for your help
I already check the URL of the variable API_REST_URL and is like this:
define('API_REST_URL' , 'http://ccenet.mx/magento2/index.php/rest/V1');
and the moment I called it is here:
$url .= "/products/".$productos->skuCCE."/media";
and the result is this....
I really don´t know how to fix this.
okay , i understood !!
you have issue with your type parameter of your product image parameters.
Basically its only accepts , like type => 'image/jpeg'; or whatever the extension of image.
Right now its taking , like 'type' => 'image/'.$content_Type, and Where $content_Type = Content-Type: image/'.$contentType(extension of your image).
so currently full type parameter should be like this - type => image/image/png But we only needed like this type => 'image/jpeg'; And thats the actual issue.
So try below code to resolved this issue :
$contentType = pathinfo($imagen, PATHINFO_EXTENSION); //$content_Type = 'Content-Type: image/'.$contentType; // COMMENT this line its not needed $dataString = array( 'entry' => array( 'id' => $productos->idProducto, 'mediaType' => 'image', 'label' => $productos->skuCCE, 'position' => 0, 'disabled' => 'false', 'extension_attributes' => array( 'video_content' => array( ) ), 'types' => array( 'image', 'thumbnail', 'small_image' ), 'file' => $productos->skuCCE, 'content' => array( 'base64_encoded_data' => $xmlImage, 'type' => 'image/'.$contentType, // Here pass $contentType varriable. 'name' => $productos->skuCCE.$content_Type ) ) );
For More reference refer this link - https://magento.stackexchange.com/questions/180128/magento-2-how-to-upload-image-to-rest-api-post
Dave,
Thank you for your help!!!!
Glad that you have solved your issue , Happy to help and keep helping