Jump to content
Notícias do ACBr

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

consultoria_sticker.png

Conteúdo para desenvolvedores
 ao vivo de terça a quinta!
Saiba mais

dev.png

logo_acbr_paygo.png

TEF ACBr PayGo
Seja um revendedor e ofereça uma solução completa para seu cliente.


botao.png

beneficios.png

NFe.CriarEnviarNFe - Retorno JSON


Go to solution Solved by José M. S. Junior,

Recommended Posts

Pessoal boa tarde!

Estou tentando ainda integração do PHP com NFCe, e notei, o que acho que pode ser um problema no retorno da função NFe.CriarEnviarNFe (pois é um retorno diferente da SAT.CriarEnviarCFe)

O retorno não é um JSON válido como no JSON da SAT.CriarEnviarCFe, pois vem algumas informações no meio que deixa a "string" malformada, se for fazer o parser direto do retorno (no meu caso usando a json_decode)

Existe alguma configuração a ser feita no ACBr ou você poderiam dar alguma idéia de como eu trabalharia com esse retorno para facilitar sua leitura ?
Lembrando que trabalho com o JSON por achar mais fácil a integração por TCP/IP que atualmente já funciona no meu projeto com o SAT, ok ?
 

Estou encaminhando em anexo os 2 retornos para comparação, e melhor entendimento do que tentei descrever.

 

Obs: uso como base também a classe de exemplo ClientSocket, que tem a função trataretorno que ajudou muito em todo o processo.

 

Desde já agradeço a todos.

 

SAT_CriarEnviarCFe_retorno.txt NFE_CriarEnviarNFe_retorno.txt

Link to post
Share on other sites

Boa tarde,

Lendo o Json utilizando o NotePad++ o mesmo parece valido... O que precisa fazer nesse caso é realizar parser apenas o conteúdo do Json ( entre chaves {} ). Diversos métodos do Monitor pode retornar mensagens informativas como por exemplo o Path onde o Monitor Gravou o XML, isso é mantido devido a compatibilidade para quem já utiliza essas informações, mas não entra no Scopo do Json pois não faz parte da Resposta com as tags do WebService em si...

Talvez possamos tratar isso no Monitor quando estiver trabalhando com retorno JSon, mas teria que ser revisado todos os métodos...

image.png

Consultor SAC ACBr

José Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link to post
Share on other sites
32 minutos atrás, José M. S. Junior disse:

Boa tarde,

Lendo o Json utilizando o NotePad++ o mesmo parece valido... O que precisa fazer nesse caso é realizar parser apenas o conteúdo do Json ( entre chaves {} ). Diversos métodos do Monitor pode retornar mensagens informativas como por exemplo o Path onde o Monitor Gravou o XML, isso é mantido devido a compatibilidade para quem já utiliza essas informações, mas não entra no Scopo do Json pois não faz parte da Resposta com as tags do WebService em si...

Talvez possamos tratar isso no Monitor quando estiver trabalhando com retorno JSon, mas teria que ser revisado todos os métodos...

image.png

José boa tarde!

Primeiramente obrigado pelo rápido retorno.

Eu imaginei mesmo que não seria algo fácil de se resolver, mas acho que seria algo válido a ser analisado, talvez em futuras versões, quando se tratar de JSON, dos retornos serem apenas json validos, sem necessidade de algum tratamento por parte da aplicação que estiver consumindo.

De qualquer forma vou tentar verificar como fazer um tratamento por aqui na minha aplicação, e qualquer coisa posto para ajudar quem precisar ou passar pelo mesmo problema.

 

Obrigado.

Link to post
Share on other sites

Sim, elimino sim.

Na verdade a função trataretorno da ClienteSocket, ela "transforma" o OK e ERRO em chaves do array, em tese eu só precisaria fazer um json_decode no $retorno['OK']. Algo como:

$sc = new Acbr\ClientSocket();

$sc->open($host, $porta);

$resposta = $sc->recv();

$resposta = $sc->send("NFe.CriarEnviarNFe(\"".$ini_string.",1,1,,,0\")".$crlf);

$info = $sc->trataRetorno($resposta); 



if($info['OK'] != ''){
	$json = json_decode($info['OK']); // aqui é que dá erro pois não é um json válido

}else{

}

 

Já com o retorno que o SAT.CriarEnviarCFe funciona perfeitamente.

$sc = new Acbr\ClientSocket();
$sc->open($host, $porta);
$resposta = $sc->recv();

$sc->send('SAT.Inicializar()'.$crlf);
$resposta = $sc->recv();
$resposta = $sc->send("SAT.CriarEnviarCFe(\"".$ini_string."\")".$crlf);

$info = $sc->trataRetorno($resposta);	

if($info['OK'] != ''){
	$json = json_decode($info['OK']);
}else{
	//pode ser erro
}
// aqui já tenho um "objeto" como:
$json->ENVIO->NumeroSessao
$json->ENVIO->Resultado
$json->ENVIO->Arquivo
$json->ENVIO->XML

 

 

 

Link to post
Share on other sites
3 horas atrás, José M. S. Junior disse:

Favor testar com essa versão: 

 

Pelo teste que fiz não mudou o retorno.

De qualquer forma vou reinstalar a outra versão e fazer a comparação e retorno novamente, assim que retornar de um cliente.

Link to post
Share on other sites
15 horas atrás, Eder J. Silva disse:

Pelo teste que fiz não mudou o retorno.

De qualquer forma vou reinstalar a outra versão e fazer a comparação e retorno novamente, assim que retornar de um cliente.

@José M. S. Junior

Bom dia!

Realizei os testes conforme combinado, e realmente não notei mudanças no retorno.

Em anexo o LOG para análise da equipe.

Qualquer dúvida me avise.

log_testes_ACBR.txt

Link to post
Share on other sites

Sim, exatamente isso.

Creio que se conseguíssemos que a mensagem ficasse algo como:
 

OK: {
	"Arquivo": "D:\\ACBrMonitorPLUS32\\Logs\\31210238418823000104650010000000011886376580-nfe.xml",
	"Informacoes": {
		"Envio": [{
				"CStat": 103,
				"CUF": 31,
				"DhRecbto": "2021-02-19T08:02:58.000Z",
				"Msg": "Lote recebido com sucesso",
				"NProt": "",
				"NRec": "310000034744221",
				"TMed": 1,
				"VerAplic": "J-1.4.45",
				"Versao": "4.00",
				"XMotivo": "Lote recebido com sucesso",
				"tpAmb": "2"
			},
			{
				"Retorno": {
					"CStat": 104,
					"CUF": 31,
					"ChaveDFe": "31210238418823000104650010000000011886376580",
					"DhRecbto": "1899-12-30T00:00:00.000Z",
					"Items001": {
						"Id": "",
						"XML": "<protNFe versao=\\\"4.00\\\"><infProt><tpAmb>2</tpAmb><verAplic>J-1.4.45</verAplic><chNFe>31210238418823000104650010000000011886376580</chNFe><dhRecbto>2021-02-19T08:02:58-03:00</dhRecbto><cStat>479</cStat><xMotivo>Rejeicao: Data de Emissao anterior a data de credenciamento ou anterior a Data de Abertura do estabelecimento</xMotivo></infProt></protNFe>",
						"cStat": 479,
						"chDFe": "31210238418823000104650010000000011886376580",
						"dhRecbto": "2021-02-19T08:02:58.000Z",
						"digVal": "",
						"nProt": "",
						"tpAmb": "2",
						"verAplic": "J-1.4.45",
						"xMotivo": "Rejeicao: Data de Emissao anterior a data de credenciamento ou anterior a Data de Abertura do estabelecimento"
					},
					"Msg": "Nota(s) nao confirmadas:\\r\\n1->479-Rejeicao: Data de Emissao anterior a data de credenciamento ou anterior a Data de Abertura do estabelecimento",
					"Protocolo": "",
					"VerAplic": "W-1.4.45",
					"Versao": "4.00",
					"XMotivo": "Lote processado",
					"cMsg": 0,
					"nRec": "310000034744221",
					"tpAmb": "2",
					"xMsg": ""
				}
			}
		],
		"NFe_Arq1": {
			"Arquivo": "D:\\ACBrMonitorPLUS32\\Logs\\31210238418823000104650010000000011886376580-nfe.xml"
		}
	}
}

Já daria para trabalhar sem problemas.

 

Apenas uma sugestão, ok ?

 

 

 

 

Link to post
Share on other sites

Como eu disse a ultima chave e as mensagens iniciais não fazem parte da Classe de retornos do WebService, é algo específico do Monitor acrescentado na Resposta para manter a compatibilidade e não alterar as tags que já existiam. Mas vamos verificar para retornar apenas o Json válido...

Consultor SAC ACBr

José Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link to post
Share on other sites
  • 2 weeks later...

Bom dia, para solucionar a questão especifica do método de Envio da NFe foi realizado uma validação para considerar apenas as classes que geram o Json na resposta, favor realizar um teste com a versão abaixo e reportar aqui...

 

Consultor SAC ACBr

José Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link to post
Share on other sites
×
×
  • Create New...