• 0
Sign in to follow this  
tarcisio_tr

Enviando descrição retornao erro 400

Question

Olá,

Eu estou enviando um pedido para o mercado livre Alterar a descrição de um produto. 

ele me retorna...

Array ( [statusCode] => 400 [body] => {"message":"Any description id was given.","error":"uri.invalid","status":400,"cause":[]} [headers] => Array ( [status-Code] => 400 [Date] => Thu, 14 May 2015 19 [Content-Type] => application/json;charset=UTF-8 [Transfer-Encoding] => chunked [Connection] => keep-alive [X-API-Name] => syi-api [X-API-Version] => 1.00 [Vary] => Accept,Accept-Encoding [Cache-Control] => max-age=0 [X-Libra-UpstreamHost] => 172.16.153.158 [X-GAV] => master [X-Nginx-Host] => e-00007558 [X-Nginx-Pool] => items-api-webserver-write-master [X-Nginx-UpstreamHost] => 172.16.38.89 [X-Request-Id] => f374df86-7834-4215-9b67-eb7baef43b88 [Access-Control-Allow-Origin] => * [Access-Control-Allow-Headers] => Content-Type [Access-Control-Allow-Methods] => PUT, GET, POST, DELETE, OPTIONS [Access-Control-Max-Age] => 86400 ) [json] => Array ( [message] => Any description id was given. [error] => uri.invalid [status] => 400 [cause] => Array ( ) ) )

 

e o meu código é 
 

 $params = array('access_token' => 'Aqui fica o meu Token');
 
$body = array('text' => 'Adding new description');
 
  $response = $meli->put('/items/MLBXXXXXX/descriptions', $body, $params);

O que pode ser?
Obrigado,

 

Share this post


Link to post
Share on other sites

15 answers to this question

Recommended Posts

  • 0

certo, fiz alguma alterações... 

veja o retorno! detalhe, tentei fazer o mesmo para excluir pergunta ele retorna esse erro.

 

Array ( [statusCode] => 403 [body] => {"message":"User must be logged to perform this operation.","error":"forbidden","status":403,"cause":[]} [headers] => Array ( [Status-Code] => 403 [Date] => Fri, 15 May 2015 15 [Content-Type] => application/json;charset=UTF-8 [Transfer-Encoding] => chunked [Connection] => keep-alive [X-API-Name] => syi-api [X-API-Version] => 1.00 [Vary] => Accept,Accept-Encoding [Cache-Control] => max-age=0 [X-Libra-UpstreamHost] => 172.16.150.151 [X-GAV] => master [X-Nginx-Host] => e-00001ceb [X-Nginx-Pool] => items-api-webserver-write-master [X-Nginx-UpstreamHost] => 172.16.38.89 [X-Request-Id] => 36d08c89-0a0f-4ed5-9a24-012909245ece [Access-Control-Allow-Origin] => * [Access-Control-Allow-Headers] => Content-Type [Access-Control-Allow-Methods] => PUT, GET, POST, DELETE, OPTIONS [Access-Control-Max-Age] => 86400 ) [json] => Array ( [message] => User must be logged to perform this operation. [error] => forbidden [status] => 403 [cause] => Array ( ) ) )

Share this post


Link to post
Share on other sites
  • 0

obs.: aparentemente é algum problema em seu login, veja a sua mensagem de erro: "message":"User must be logged to perform this operation."

Share this post


Link to post
Share on other sites
  • 0

Sim claro  Padawan,

A grande questão é que eu utilizo meu Token no RESTclient no mozila e funcionou perfeitamente os comandos enviados.
 

while($row = mysql_fetch_assoc($buscarinfoml)){
 $id = $row['id'];

//Acess_token
 $valor = $row['valor'];

// expiracao
 $expiracao = $row['expiracao'];

// refresh_token
 $tokens = $row['token'];

  $userId = $row['codigoml'];

};

$description = array(
  "text"         => "teste",
  "access_token" => $valor
);

$item = $meli->put("/items/MLBXXXXXX/description", $description);

print_r($item);

Share this post


Link to post
Share on other sites
  • 0

Jedi Master, uma das coisas que eu gostaria de entender, é por qual motivo todas as funções de  (PUT, POST, DELETE) Pararam de funcionar no meu sisteminha, e a GET funciona normalmente, Mesmo utilizando os arquivos da pastas Examples da API não funcionam, e se eu utilizo qualquer uma dessas funções (PUT, POST, DELETE) em um restclient da mozila ele funciona tudo certinho e de forma extremamente fácil. 

Share this post


Link to post
Share on other sites
  • 0

Olá Tarcisio,

 

Não sou Jedi, sou o rodrigojob.  :)

 

Sempre envie o parâmetro seller, que parece que você chama de codigoml, isto não consta nem na documentação nem nos exemplos, mas o sistema pede, e se não pedir um dia pedirá, então mande.

Logo, array("seller" => $row["codigoml"], "access_token" => $row["valor"], ....);

 

O erro lá de cima era por causa do endereço, você usou /descriptions, quando o correto é /description . Eu não tinha percebido porque não uso esta função, mas vi pela explicação da fsolari. Foi um malescrito "s".

 

Até mais,

Rodrigo

Share this post


Link to post
Share on other sites
  • 0

Olá Rodrigo,

Ajustei como voce sugeriu,

Como mostra o codigo abaixo ele altera o status do anuncio, segue o mesmo principio de alteração descrição de anuncio.

 

$body = array(
    'seller' => 'XXXXX',
    'text' => 'Adding new description',
    'access_token' => 'XXXXXX'
    );

  $response = $meli->put('/items/MLBXXXXX/description', $body);


print_r($response);

{"message":"User must be logged to perform this operation.","error":"forbidden","status":403,"cause":[]}

Erro alteração do Status abaixo: 

{"message":"User must be logged to perform this operation.","error":"forbidden","status":403,"cause":[]}

Obrigadão Rodrigo
 

Share this post


Link to post
Share on other sites
  • 0

não!!!!. fiz o teste e descobri.

É um problema de padronização da API, já reclamei disto, não corrigiram e eu não lembrava.

Quando for PUT o access_token deve ir na URL. Então fica assim:

$body = array(
    'seller' => 'XXXXX',
    'text' => 'O jobe consegue!!!!'
    );

  $response = $meli->put('/items/MLBXXXXX/description/?access_token=' . XXXXXX, $body);
 
Para você ver como é errada esta diferença: nem a fsolari percebeu.
Acho que vou mudar isto no meu sdk PHP :)
 
[]'s !!

Share this post


Link to post
Share on other sites
  • 0

tó! A função alterada em meli.php

 

 

public function put($path, $body = null, $params = array()) {
if (isset($body['access_token'])==true){
$path .= '?access_token=' . $body['access_token'];
unset($body['access_token']);
}
        $body = json_encode($body);
        $opts = array(
            CURLOPT_HTTPHEADER => array('Content-Type: application/json'),
            CURLOPT_CUSTOMREQUEST => "PUT",
            CURLOPT_POSTFIELDS => $body
        );
        
        $exec = $this->execute($path, $opts, $params);
 
        return $exec;
    }
 
 
kkkkkkkkkkkkkkkkkk

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this