• 0
ronaldoguedess

Erro ao incluir XML para liberar etiqueta do ME

Question

Ola tudo bem? estou a várias horas tentando adequar meu sistema as novas regras mas não estou coneguindo obter sucesso.
Antes era simples, bastava enviar a chave da NF-e e o CFOP e pronto... eu já conseguia a etiqueta. ()

Agora pela lógica também seria facil, apenas enviar a "STRING COM O XML" ou um "ARRAY DA XML". 
Mas não consigo de forma alguma.

Estou tentando dessa forma para enviar o XML.

$xml = simplexml_load_file('url.xml');
$data = $xml->asXML();

//POST
$send = $meli->post("/shipments/xxxxxx/invoice_data?access_token=xxxxxxxx&siteId=MLB", $data);

 

Esse é o erro que recebo. (removi parte do xml aqui pra não ficar muito grande o erro)

Array
(
    [body] => stdClass Object
        (
            [status] => 400
            [message] => "\n35<\/cUF>14650810<\/cNF>Venda de mercadorias<\/natOp>55<\/mod>1<\/serie>5236<\/nNF>2018-12-12T13:23:48-02:00<\/dhEmi>2018-12-12<\/dhSaiEnt>1<\/tpNF>2<\/idDest>3550308<\/cMunFG>1<\/tpImp>1<\/tpEmis>9<\/cDV>1<\/protNFe><\/nfeProc>\n"
            [error] => error_parse_invoice_data
        )

    [httpCode] => 400
)

 

A documentação ficou muito fraca onde explica isso. não da pra entender o que fazem... apenas mostra que tem o conteudo de um XML sendo enviado, mas nao diz mais nada.. nem se tem que colocar ele em um array, se tem que ter um nome exato esse array.

Explicação de como deve ser feito isso la na documentação:

curl -s -X POST -H 'Content-Type: application/xml' -d '<?xml version="1.0" encoding="UTF-8"?>
<nfeProc versao="4.00" xmlns="http://www.portalfiscal.inf.br/nfe">
...
</nfeProc>' "https://api.mercadolibre.com/shipments/{id}/invoice_data/?access_token={accessToken}&siteId={siteId}"

 

Aguém já fez isso ou tem alguma dica pra me ajudar?
Link da documentação:
https://developers.mercadolivre.com.br/pt_br/mercado-envios-como-enviar-a-nota-fiscal-de-venda

Share this post


Link to post
Share on other sites

9 answers to this question

Recommended Posts

  • 0

Se estiver usando a SDK php você nunca vai conseguir, pois la não tem como enviar o HEADER.

Você deve fazer com CURL e enviar seu pedido para essa URL:

$urll = "https://api.mercadolibre.com/shipments/".$shipp_id."/invoice_data?access_token=".$_SESSION['access_token']."&siteId=MLB";

Lembre-se de enviar o HEADER "Content-Type: application/xml" no seu CURL.

 

Espero que consiga resolver!

Share this post


Link to post
Share on other sites
  • 1

Bem, um outro palpite:

 

Verifique se o seu XML contém o caractere "%". Parece que o ML não gosta do caractere de porcentagem nas strings que recebe... precisei utilizar algo como abaixo para conseguir enviar o XML.

$xml = str_replace('%', '', $xml);

Share this post


Link to post
Share on other sites
  • 0
On 1/14/2019 at 11:36 AM, Amauri Gabriel - said:

Olá, conseguiu resolver esse problema? Estou passando exatamente pela mesma situaçao...

Olá, conseguiu mandar o XML? Tentei ontem e aqui não deu certo.

Share this post


Link to post
Share on other sites
  • 0

 

22 minutes ago, GuilhermeJ said:

Olá, conseguiu mandar o XML? Tentei ontem e aqui não deu certo.

Olá.

Enviei uma NF de testes com um usuário de testes, e recebi um erro informando que a "chave" da nota já havia sido utilizada, então acredito que tudo deu certo. Em breve testaremos com um usuário em produção para confirmar. A dica do ronaldoguedes ajudou bem; não adianta usar a SDK para PHP nesse caso. É melhor criar a requisição CURL manualmente.

 

Share this post


Link to post
Share on other sites
  • 0
curl_setopt_array($ch, [
    CURLOPT_USERAGENT => "MELI-PHP-SDK-2.0.0",
    CURLOPT_SSL_VERIFYPEER => true,
    CURLOPT_CONNECTTIMEOUT => 10,
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_TIMEOUT => 60,
    CURLOPT_HTTPHEADER => ['Content-Type: application/xml'],
    CURLOPT_POST => true, 
    CURLOPT_POSTFIELDS => $xml,
]);

Utilizei os parâmetros acima, veja se está fazendo algo diferente.

Share this post


Link to post
Share on other sites
  • 0
1 hour ago, Amauri Gabriel - said:

curl_setopt_array($ch, [
    CURLOPT_USERAGENT => "MELI-PHP-SDK-2.0.0",
    CURLOPT_SSL_VERIFYPEER => true,
    CURLOPT_CONNECTTIMEOUT => 10,
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_TIMEOUT => 60,
    CURLOPT_HTTPHEADER => ['Content-Type: application/xml'],
    CURLOPT_POST => true, 
    CURLOPT_POSTFIELDS => $xml,
]);

Utilizei os parâmetros acima, veja se está fazendo algo diferente.

Fiz uma requisição curl colocando o header conforme a documentação, mas ainda assim recebo o retorno "error_parse_invoice_data", como se tivesse um problema com o XML que estou passando. Tentei passar o XML com e sem a autorização de uso. Passei diretamente o arquivo para evitar qualquer erro nesse processo. Ainda assim dá esse erro. O pedido em questão que usei para fazer o teste já teve a chave da nfe informada pelo modelo antigo para liberar a etiqueta já que somos do coletas, mas isso não deve ser o problema. 

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