mendoca

Members
  • Content Count

    17
  • Joined

  • Last visited

About mendoca

  • Rank
    Newbie

Recent Profile Visitors

285 profile views
  1. Estou tentando integrar com a parte do pacote também mas ao enviar o post esta retornando essa mensagem: {"message":"The originalResourceId cannot be null","error":"bad_request","status":400,"cause":[]} alguém teve esse problema?
  2. tenho um anúncio que esta com a opção de shipping como not_especified e quero alterar para me2 mas ele não esta alterando o json que estou enviando esta abaixo eu fiz a verificação se o usuario e a categoria podem trabalhar com o me2 e esta tudo habilitado. { "title":"CASINHA DE ATIVIDADES ACTIVITY HOUSE 714 - CALESITA", "video_id":"", "price":"67.00", "category_id":"MLB53540", "pictures":[ { "id":"917503-MLB29982926271_042019" }, { "id":"943121-MLB29982930107_042019" } ], "attributes":[ { "id":"MANUFACTURER", "value_id":"", "value_name":"Calesita " }, { "id":"LINE", "value_id":"", "value_name":"ACTIVITY HOUSE " }, { "id":"MODEL", "value_id":"", "value_name":"714 " }, { "id":"ALPHANUMERIC_MODEL", "value_id":"-1", "value_name":null }, { "id":"INCLUDES_FURNITURE", "value_id":"242084", "value_name":"N\u00e3o " }, { "id":"IS_FLAMMABLE", "value_id":"242084", "value_name":"N\u00e3o " }, { "id":"IS_KIT", "value_id":"242084", "value_name":"N\u00e3o " }, { "id":"BRAND", "value_id":"", "value_name":"CALESITA" } ], "shipping":{ "mode":"me2", "local_pick_up":false, "free_shipping":false, "free_methods":[ ] } }
  3. eu envio as informação via curl então para mandar um arquivo estou criando um curlfile usando essa função: public function makeCurlFile($file){ $mime = mime_content_type($file); $info = pathinfo($file); $name = $info['basename']; $output = new CURLFile($file, $mime, $name); return $output; } o retorno dela eu passo para a função de upload public function uploadPictures($file){ $this->getAccess(); $url = parent::$API_DOMAIN.'/pictures?access_token='.$this->accessToken; $param = array( 'source' => $file ); $data = $this->callAPI($url,'POST', json_encode($param), false, true); return $data; } a função do curl é esta abaixo: public function callAPI($url, $method='GET', $data = false, $header=array(), $file=false){ $curl = curl_init(); $body = $data; switch ($method){ case "POST": if (is_array($data)) { curl_setopt($curl, CURLOPT_POST, 1); if($file){ curl_setopt($curl, CURLOPT_POSTFIELDS, $data); }else{ curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data)); } }else{ curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST'); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); } break; case "PUT": curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PUT'); if (is_array($data)) { curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data)); }else{ curl_setopt($curl, CURLOPT_POSTFIELDS, $data); } break; case "DELETE": curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'DELETE'); break; default: if ($data) $url = sprintf("%s?%s", $url, http_build_query($data)); } curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($curl, CURLOPT_SSLVERSION, 4); if(is_array($header) && !empty($header)){ curl_setopt($curl, CURLOPT_HTTPHEADER, $header); } $this->error=''; $content= curl_exec($curl); $information = curl_getinfo($curl); $data = json_decode($content); curl_setopt($curl, CURLOPT_HEADER, true); $httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE); if($httpcode == 0){ $this->setErrorML($this->error, $url, $method, $data, $body); $this->error=' Connection Error: - '.curl_error($curl); }elseif($httpcode == 400 || $httpcode == 401 || $httpcode == 403 || $httpcode == 404 || $httpcode == 405 || $httpcode == 406 || $httpcode == 407 || $httpcode == 409 || $httpcode == 410 || $httpcode == 500 || $httpcode == 501 || $httpcode == 502){ $this->error=(property_exists($data,'error'))?$data->error:''; if(property_exists($data,'cause') && isset($data->cause[0]) && property_exists($data->cause[0],'code')) { $this->error=$data->cause[0]->code.' - '.$data->cause[0]->message; }elseif(property_exists($data,'cause') && isset($data->cause[0])){ $this->error.=' - '.$data->cause[0]; }elseif(property_exists($data,'message')){ $this->error.=' - '.$data->message; }else{ if(strpos($url,'items/validate')!==false){ $this->error.=' - Validation failed.'; } } $this->setErrorML($this->error, $url, $method, $data, $body); return false; }else{ return $data; } } é assim que estou subindo as imagens mas erro ele esta trocando o surce da imagem pelo name isso que esta me deixando confuso e ate onde vi os parametros para criar o curlfile estão corretos
  4. ao enviar imagem no padrão novo do mercado livre, no anuncio não esta aparecendo a imagem do produto consultando o log da imagem ele retorna o json abaixo: { "id": "612004-MLB29160583592_012019", "source": "http://"111052655SZ.jpg","name":"/mnt/sdb1/futuraonlineloja/public_html/image/data/livros/informatica/111052655SZ.jpg","mime":"image/jpeg"}", "error": "For input string: """" }
  5. Bom dia estou tentando enviar um xml de uma nfe para o mercado livre utilizando a função: $param = array( 'data' => $data['pathnfe'] ); $url = parent::$API_DOMAIN.'/shipments/'.$data['shipment_id'].'/invoices?access_token='.$this->accessToken; $nfe = $this->callAPI($url,'PUT', json_encode($param)); mas o que me retorna é o seguinte erro: object(stdClass)#58 (4) { ["message"]=> string(21) "Invalid invoices type" ["error"]=> string(21) "invalid_invoices_type" ["status"]=> int(400) ["cause"]=> object(stdClass)#1524 (8) { ["cause"]=> NULL ["error"]=> string(21) "invalid_invoices_type" ["internal_cause"]=> array(0) { } ["localized_message"]=> string(21) "Invalid invoices type" ["message"]=> string(21) "Invalid invoices type" ["stack_trace"]=> array(12) { [0]=> object(stdClass)#70 (5) { ["className"]=> string(37) "com.mercadolibre.fbm.utils.CheckUtils" ["fileName"]=> string(17) "CheckUtils.groovy" ["lineNumber"]=> int(44) ["methodName"]=> string(14) "checkParameter" ["nativeMethod"]=> bool(false) } [1]=> object(stdClass)#1397 (5) { ["className"]=> string(36) "com.mercadolibre.fbm.utils.BodyUtils" ["fileName"]=> string(16) "BodyUtils.groovy" ["lineNumber"]=> int(26) ["methodName"]=> string(8) "readBody" ["nativeMethod"]=> bool(false) } [2]=> object(stdClass)#1396 (5) { ["className"]=> string(36) "com.mercadolibre.fbm.utils.BodyUtils" ["fileName"]=> string(16) "BodyUtils.groovy" ["lineNumber"]=> int(19) ["methodName"]=> string(8) "readBody" ["nativeMethod"]=> bool(false) } [3]=> object(stdClass)#1409 (5) { ["className"]=> string(55) "com.mercadolibre.fbm.invoices.ShipmentInvoiceController" ["fileName"]=> string(32) "ShipmentInvoiceController.groovy" ["lineNumber"]=> int(34) ["methodName"]=> string(11) "putInvoices" ["nativeMethod"]=> bool(false) } [4]=> object(stdClass)#1408 (5) { ["className"]=> string(56) "grails.plugin.cache.web.filter.PageFragmentCachingFilter" ["fileName"]=> string(30) "PageFragmentCachingFilter.java" ["lineNumber"]=> int(198) ["methodName"]=> string(8) "doFilter" ["nativeMethod"]=> bool(false) } [5]=> object(stdClass)#1410 (5) { ["className"]=> string(45) "grails.plugin.cache.web.filter.AbstractFilter" ["fileName"]=> string(19) "AbstractFilter.java" ["lineNumber"]=> int(63) ["methodName"]=> string(8) "doFilter" ["nativeMethod"]=> bool(false) } [6]=> object(stdClass)#1411 (5) { ["className"]=> string(50) "com.ml.public2private.filters.Public2PrivateFilter" ["fileName"]=> string(25) "Public2PrivateFilter.java" ["lineNumber"]=> int(65) ["methodName"]=> string(8) "doFilter" ["nativeMethod"]=> bool(false) } [7]=> object(stdClass)#1412 (5) { ["className"]=> string(29) "com.jsonp.filters.JsonpFilter" ["fileName"]=> string(16) "JsonpFilter.java" ["lineNumber"]=> int(58) ["methodName"]=> string(8) "doFilter" ["nativeMethod"]=> bool(false) } [8]=> object(stdClass)#1413 (5) { ["className"]=> string(29) "com.brandseye.cors.CorsFilter" ["fileName"]=> string(15) "CorsFilter.java" ["lineNumber"]=> int(82) ["methodName"]=> string(8) "doFilter" ["nativeMethod"]=> bool(false) } [9]=> object(stdClass)#1415 (5) { ["className"]=> string(39) "java.util.concurrent.ThreadPoolExecutor" ["fileName"]=> string(23) "ThreadPoolExecutor.java" ["lineNumber"]=> int(1142) ["methodName"]=> string(9) "runWorker" ["nativeMethod"]=> bool(false) } [10]=> object(stdClass)#1414 (5) { ["className"]=> string(46) "java.util.concurrent.ThreadPoolExecutor$Worker" ["fileName"]=> string(23) "ThreadPoolExecutor.java" ["lineNumber"]=> int(617) ["methodName"]=> string(3) "run" ["nativeMethod"]=> bool(false) } [11]=> object(stdClass)#1416 (5) { ["className"]=> string(16) "java.lang.Thread" ["fileName"]=> string(11) "Thread.java" ["lineNumber"]=> int(748) ["methodName"]=> string(3) "run" ["nativeMethod"]=> bool(false) } } ["status"]=> int(400) ["suppressed"]=> array(0) { } } } lembrando que estou enviando o conteúdo da nfe e não o arquivo em si, seguindo os passos dessa explicação que encontrei na documentação no seguinte link:https://developers.mercadolibre.com/pt_br/fulfillment-como-gerar-nota-fiscal-de-venda#Enviar-nota-fiscal-eletrônica Enviar nota fiscal eletrônica Com todas informações disponíveis, você deverá gerar a NFe (Nota Fiscal eletrônica). Depois de gerada, você deverá enviá-las para o Mercado Livre realizando um PUT conforme o exemplo a seguir: curl -X PUT -H "Content-Type: application/json" -H "Accept: application/json" -d '[{"data":"(inserte aquí el XML de la NFE)"}]' https://api.mercadolibre.com/shipments/{shipment_id}/invoices?access_token=YOUR_ACCESS_TOKEN No caso que o PUT seja correto você obterá 201 OK. Possiveis erros: XML sin cuerpo Result: {"message":"No invoices present","error":"no_invoices_present","status":400,"cause":null} XML mal formado Result: {"message":"Malformed XML","error":"malformed_xml","status":400,"cause":null} Con errores en los campos del XML: Result: {"message":"Invalid Invoice File","error":"invalid_invoice","status":400,"cause":null}
  6. obrigado era isso mesmo, quanto ao access token era de um usuário de teste por isso deixei ali, mas ja removi
  7. Ao tentar enviar uma resposta de uma question pela função abaixo: public function answerQuestion($data = array()){ $param = array( 'access_token' => $this->accessToken, 'question_id' => $data['question_id'], 'text' => $data['text'] ); $header = array( 'Content-Type: application/json', 'Content-Length: ' . strlen($param) ); $url = parent::$API_DOMAIN.'/answers'; $answer = $this->callAPI($url,'POST', json_encode($param), $header); return $answer; } esta gerando o seguinte erro: 2018-09-10 14:03:04 - Error =>forbidden - The caller is not authorizer to access the resource Url => https://api.mercadolibre.com/answers Metodo => POST Data => stdClass Object ( [message] => The caller is not authorizer to access the resource [error] => forbidden [status] => 403 [cause] => Array ( ) ) Body => {"access_token":"blablablabla","question_id":"5778088684","text":"teste resposta"} ja verifiquei se poderia ser algo relacionado com o token mais usando o mesmo token eu consigo pesquisar itens pela api e também verifiquei se ao criar a api foi dada a permissão e estava tudo ok. Alguem pode me ajudar?
  8. eu pesquisei mais como n achei nd referente ao que esta com duvida resolvi postar aqui, porque so no mercado livre existe essa logica porca de não exibir as coisas tudo em um lugar obrigando fica fazendo N requisições para conseguir obter ver uma informação. O recurso de order/search para trabalhar com pedidos que forem carrinho de compra fica simplesmente ridículo de se trabalhar. mas mercado livre sendo mercado livre
  9. não amigo eu quero algo como o recurso orders/search onde ele me lista todos os pedidos, mas quando se usa carrinho ele n faz um unico pedido para o carrinho ele cria pedidos de acordo com a quantidade de itens que eu adicionei no carrinho ai quando eu uso o recurso orders/search ele me lista todos os id dos pedidos mas n tem como eu saber se algum deles é do mesmo carrinho.
  10. não esse recurso que você me mostrou eu ja utilizo para outras coisas mais no ml ao fazer um pedido de carrinho ele n me gera um único pedido com todos os itens, ele gera um pedido para cada item e junta tudo isso em um pacote, mas ao fazer a busca dos pedidos que foram feitos esses itens que estão no pacote aparecem separados ai tenho que fazer uma gambiarra surreal para saber se os itens são do mesmo pacote para descer eles como um único pedido. Seria isso que estou procurando algo onde eu conseguisse buscar os pacotes e listar os itens desses pacote
  11. Atualmente temos na api o recurso /orders/search onde ele me retorna uma lista com os pedidos, mas com a implementação do carrinho de compra existe algum lugar que eu consiga consultar todos os pedidos que foram feitos como carrinho de compra?
  12. tem que colocar no cabeçalho de envio da função
  13. Eu abri e a resposta deles foi "caso o valor do produto seja maior que 120 passe a tag" tem coisas que nunca vou entender no mercado livre.
  14. estou percebendo isso mesmo porque estava utilizando da forma que descrevi acima já faz algum tempo passando pela função de validar e depois enviando e não estava dando nenhum problema e ontem começou isso do nada. Agradeço a ajuda. Você saberia informar se eles fazem alterações nessa parte da validação? Por que seria uma forma bacana de validar as informações antes de subir mas parece que funciona diferente.
  15. Estou ciente disso mas porque ele esta pedindo para eu passar o mandatory_free_shipping dentro do meu post? ate onde eu entendo isso deveria ser adicionado automaticamente. E somente da o problema caso eu passe ele pela função de validação do mercado livre se eu enviar sem validar o anuncio sobre normalmente.