FreedFelipe 0 Denunciar post Postado Setembro 6, 2010 Bom dia! Segue a função que fiz pra ler arquivos XML (Pelo PHP-GTK) ..... Espero que ajude! function busca() { $chave = $this->entry_chave_acesso->get_text(); if ( $diretorio = opendir ('NFe_entrada/xml_recebidos')) { //echo "\n Diretorio:\n$diretorio"; while ( false !== ( $file = readdir ( $diretorio))) { //echo "$file\n"; if($file!='.' and $file!='..') { //echo "\n Arquivo:\n$file"; $xml = file_get_contents("NFe_entrada/xml_recebidos".bar."$file"); //echo "\n$xml\n"; // coletando os dados necessários no arquivo XML $dom = new DomDocument; $dom->loadXML($xml); $infProt = NULL; $infProt = $dom->getElementsByTagName("infProt")->item(0); $infNFe = $dom->getElementsByTagName("infNFe")->item(0); if (!is_null($infProt)) { $num_chave = $infProt->getElementsByTagName("chNFe")->item(0)->nodeValue; if($chave===$num_chave) { $arquivo = $file; //echo "\n Nome Antigo:\n$arquivo"; $ide = $dom->getElementsByTagName("ide")->item(0); $emit = $dom->getElementsByTagName("emit")->item(0); $num_nfe = $ide->getElementsByTagName('nNF')->item(0)->nodeValue; $data_emis = $ide->getElementsByTagName('dEmi')->item(0)->nodeValue; $cnpj_emit = $emit->getElementsByTagName('CNPJ')->item(0)->nodeValue; //echo "\n$cnpj_emit"; $nome_emit = $emit->getElementsByTagName('xNome')->item(0)->nodeValue; $this->getCNPJ($cnpj_emit); $this->entry_emitente->set_text($nome_emit); $this->entry_num_nfe->set_text($num_nfe); //$this->entry_data_emissao->set_text($data_emis); $this->entry_data_emissao->set_text($this->corrigeNumero($data_emis,"data")); $this->entry_cnpj->set_text($this->cpf_cnpj); $nome_inicio = substr($nome_emit, 0, 15); $nome_inicio = str_replace(' ', '', $nome_inicio); $this->arquivo_renomeado = $nome_inicio."_".$num_nfe."_".$data_emis.".xml"; //echo "\n$this->arquivo_renomeado"; if(rename("NFe_entrada/xml_recebidos".bar.$arquivo, "NFe_entrada/xml_validados".bar.$this->arquivo_renomeado)) echo "\nRenomeado"; else echo "\nNao renomeado"; ///////////////////////////////////////////// $txt = 'Nota fiscal encontrada'; $this->label_consulta->set_markup('<span weight="bold" foreground="red" size="11000">'.utf8_decode($txt).'</span>'); Gtk::timeout_add(6000,array(&$this,'limpa_status')); $this->entry_chave_acesso->grab_focus; //return; $this->func_gravar(); break; } } else { $txt = "Arquivo ".$file." Invalido!"; $this->label_consulta->set_markup('<span weight="bold" foreground="red" size="11000">'.utf8_decode($txt).'</span>'); //Gtk::timeout_add(6000,array(&$this,'limpa_status')); } } } } else { // RESPOSTA CASO A CONSULTA NÃO RETORNE O VALOR PROCURADO /* $txt = 'Erro abrindo diretorio'; $this->label_consulta->set_markup('<span weight="bold" foreground="red" size="11000">'.utf8_decode($txt).'</span>'); Gtk::timeout_add(6000,array(&$this,'limpa_status')); */ $txt = 'Nota fiscal não encontrada'; $this->label_consulta->set_markup('<span weight="bold" foreground="red" size="11000">'.utf8_decode($txt).'</span>'); Gtk::timeout_add(6000,array(&$this,'limpa_status')); $this->entry_chave_acesso->grab_focus; } Qualquer dúvida estou a disposição! Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Setembro 6, 2010 Desculpe FreedFelipe , nao compreendi seu codigo , poderia explicar ? Obrigado . Felipe Compartilhar este post Link para o post Compartilhar em outros sites
FreedFelipe 0 Denunciar post Postado Setembro 6, 2010 Bem vamos em partes ... ( vou retirar tudo o que meu sistema usa ) Lendo o arquivo XML: $xml = file_get_contents("diretorio/arquivo.xml"); $dom = new DomDocument; $dom->loadXML($xml); Depois de você der o Load no XML, você deve entrar TAG por TAG até onde o valor que você quer está. Exemplo: No caso de Nota fiscal eletronica (onde utilizo em meu sistema) tenho que entrar nas TAG's principais: $infProt = $dom->getElementsByTagName("infProt")->item(0); $infNFe = $dom->getElementsByTagName("infNFe")->item(0); Agora, entro numa TAG principal, e suas Sub-TAG's: Ide --> TAG Principal emit --> TAG com os dados do Cliente / Fornecedor nNF --> Numero da nota fiscal // Note o nodeValue (Utilizado para retornar valores da TAG) $ide = $dom->getElementsByTagName("ide")->item(0); $emit = $dom->getElementsByTagName("emit")->item(0); $num_nfe = $ide->getElementsByTagName('nNF')->item(0)->nodeValue; Espero ter sido claro.... mas caso contrário.... só dá um grito aew! Flws! Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Setembro 6, 2010 To com outro problema agora , fiz a <requsicao-tid/> e eu tenho agora o TID , só que quando vou fazer qualquer outra requisição , ele da o erro 001 , que é o erro de XML , mas eu nao to achando nenhum erro pois eu copiei exatamente igual ao do exemplo. AJUDA-ME ;) <?xml version="1.0" encoding="ISO-8859-1"?> <requisicao-autorizacao-portador id="7" versao="1.0.0" xmlns="http://ecommerce.cbmp.com.br"> <tid>%s</tid> <dados-ec> <numero>%d</numero> <chave>%s</chave> </dados-ec> <dados-cartao> <numero>4539515241529884</numero> <validade>201212</validade> <indicador>1</indicador> <codigo-seguranca>532</codigo-seguranca> <nome-portador>Felipe Umpierre</nome-portador> </dados-cartao> <dados-pedido> <numero>123</numero> <valor>100</valor> <moeda>986</moeda> <data-hora>2010-09-06T11:21:57</data-hora> <idioma>PT</idioma> </dados-pedido> <forma-pagamento> <produto>1</produto> <parcelas>1</parcelas> </forma-pagamento> <capturar-automaticamente>false</capturar-automaticamente> </requisicao-autorizacao-portador> Todos os dados são de teste . Felipe Compartilhar este post Link para o post Compartilhar em outros sites
FreedFelipe 0 Denunciar post Postado Setembro 6, 2010 não entendi... Você não está conseguindo pegar o dado que está na TAG? Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Setembro 6, 2010 assim , quando eu faço a consulta , ao inves dele me retornar a resposta da consulta ele me devolve o codigo '001' que na pagina de erros é : Erro Mensagem inválida Descrição A mensagem XML está fora do formato especificado pelo arquivo ecommerce.xsd Ação Revisar as informações enviadas no arquivo XML frente as especificações. No aguarde . Felipe Compartilhar este post Link para o post Compartilhar em outros sites
FreedFelipe 0 Denunciar post Postado Setembro 6, 2010 Sejamos mais claros... A partir do xml que você está fazendo a consulta? Onde é feita essa consulta, me explica melhor...que agora eu que to boiando na situação.... Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Setembro 6, 2010 vou te passar o codigo da minha pagina de retorno. <?php $requisicao = <<<XML <?xml version="1.0" encoding="UTF-8"?> <requisicao-tid id="5" versao="1.0.0" xmlns="http://ecommerce.cbmp.com.br"> <dados-ec> <numero>13224356</numero> <chave>jhjh43j2h4jh35h2j4h522</chave> </dados-ec> <forma-pagamento> <produto>1</produto> <parcelas>1</parcelas> </forma-pagamento> </requisicao-tid> XML; //FAÇO A REQUISIÇÃO DO TID /** * Iniciando CURL */ $curl = curl_init(); /** * Verificamos se o recurso CURL foi criado com êxito */ if ( is_resource( $curl ) ){ curl_setopt( $curl , CURLOPT_HEADER , 0 ); curl_setopt( $curl , CURLOPT_SSL_VERIFYPEER, 0); curl_setopt( $curl , CURLOPT_RETURNTRANSFER , 1 ); curl_setopt( $curl , CURLOPT_FOLLOWLOCATION , 0 ); curl_setopt( $curl , CURLOPT_URL , 'https://qasecommerce.cielo.com.br/servicos/ecommwsec.do' ); curl_setopt( $curl , CURLOPT_POST , 1 ); curl_setopt( $curl , CURLOPT_POSTFIELDS , http_build_query( array( 'mensagem' => $requisicao ) ) ); $xml = curl_exec( $curl ); $ern = curl_errno( $curl ); $err = curl_error( $curl ); curl_close( $curl ); if ( (bool) $ern ){ echo 'Ocorreu um erro[' , $ern , ']: ' , $err; } else { //var_dump( $xml , $ern , $err ); print_r($xml."<br><hr><br>"); print_r($ern."<br><hr><br>"); print_r($err."<br><hr><br>"); $DadosEnvio = simplexml_load_string($xml); } } else { echo 'erro'; } echo "<br /><br /><br />".$xml."<br /><br />"; $requisicao_captura = <<<XML <?xml version="1.0" encoding="ISO-8859-1"?> <requisicao-autorizacao-portador id="7" versao="1.0.0" xmlns="http://ecommerce.cbmp.com.br"> <tid>%s</tid> <dados-ec> <numero>%d</numero> <chave>%s</chave> </dados-ec> <dados-cartao> <numero>4539515241529884</numero> <validade>201212</validade> <indicador>1</indicador> <codigo-seguranca>532</codigo-seguranca> <nome-portador>Felipe Umpierre</nome-portador> </dados-cartao> <dados-pedido> <numero>123</numero> <valor>100</valor> <moeda>986</moeda> <data-hora>2010-09-06T11:21:57</data-hora> <idioma>PT</idioma> </dados-pedido> <forma-pagamento> <produto>1</produto> <parcelas>1</parcelas> </forma-pagamento> <capturar-automaticamente>false</capturar-automaticamente> </requisicao-autorizacao-portador> XML; //FAÇO A AUTORIZAÇÃO $tid = '$xml'; $afiliacao = 11111111111111; $chave = 'as23289asdf82348923sd3'; /** * Iniciando CURL */ $curl = curl_init(); /** * Verificamos se o recurso CURL foi criado com êxito */ if ( is_resource( $curl ) ){ curl_setopt( $curl , CURLOPT_HEADER , 0 ); curl_setopt( $curl , CURLOPT_SSL_VERIFYPEER, 0); curl_setopt( $curl , CURLOPT_RETURNTRANSFER , 1 ); curl_setopt( $curl , CURLOPT_FOLLOWLOCATION , 0 ); curl_setopt( $curl , CURLOPT_URL , 'https://qasecommerce.cielo.com.br/servicos/ecommwsec.do' ); curl_setopt( $curl , CURLOPT_POST , 1 ); curl_setopt( $curl , CURLOPT_POSTFIELDS , http_build_query( array( 'mensagem' => $requisicao_captura ) ) ); $xml_captura = curl_exec( $curl ); $ern = curl_errno( $curl ); $err = curl_error( $curl ); curl_close( $curl ); if ( (bool) $ern ){ echo 'Ocorreu um erro[' , $ern , ']: ' , $err; } else { var_dump( $xml_captura , $ern , $err ); print_r($xml."<br><hr><br>"); print_r($ern."<br><hr><br>"); print_r($err."<br><hr><br>"); $DadosEnvio = simplexml_load_string($xml_captura); //echo "<pre>".$DadosEnvio."</pre>"; var_dump($xml_captura); echo "<br />"; print_r($xml_captura); echo "<br />".$xml_captura; } } else { echo 'erro'; } ?> Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
FreedFelipe 0 Denunciar post Postado Setembro 6, 2010 Bem, pelo que você me passou, e pela mensagem de erro que você tinha dito antes, pode ser algum erro sobre o layout do XML, você verificou se esta faltando alguma tag? Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Setembro 6, 2010 Pior que eu verifiquei ,e ele so tem essas três tags. O manual nao fala mais nada sobre isso , por isso estou achando errado , por que já olhei a pagina do ecommerce.xsd mas nao entendi nada . Origado pela ajuda. Felipe Compartilhar este post Link para o post Compartilhar em outros sites
GBN 0 Denunciar post Postado Setembro 6, 2010 mas o XML nao é gravado em diretorio nenhum nao Felipe Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Setembro 6, 2010 eu sei disso , estou falando que quando monto o layout do xml , de uma consulta basica do manual , eu copio todos os campos dele , e ele me retorna o erro 001 , jah tentei usar outras consultas , mas em todas elas ele retorna o mesmo valor. Obrigado pela ajuda. Felipe Compartilhar este post Link para o post Compartilhar em outros sites
GBN 0 Denunciar post Postado Setembro 6, 2010 e na requisicao-auententicacao da certo digo a primeira ? Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Setembro 6, 2010 sim sim , jah consigo fazer essa requisição , pego o tid , vou para a rea segura , mas nao consigo fazer mais nenhuma colsulta com o TID , pq ele aparece aquele erro que eu informei. Felipe POr um acaso , eu devo guardar o TID em banco ? para que ele nao mude de valor ? Compartilhar este post Link para o post Compartilhar em outros sites
FreedFelipe 0 Denunciar post Postado Setembro 6, 2010 Seria uma opção! Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Setembro 8, 2010 por um acaso , você jah conseguiu fazer a homologação FreedFelipe ? AJUDA - faço a requisicao-captura , e ele me retorna um erro , ai fui no manul , vi qual era o erro 030 , só que não consegui entender ele , mais uma coisa , a requisicao-consulta eu consigo fazer , agora , como faço para pegar os valores de cada um individualmente ? consegui alinhaar eles com foreach , so que nao pegar dado por dado. Obrigado pela ajuda Felipe Compartilhar este post Link para o post Compartilhar em outros sites
Gregolin 0 Denunciar post Postado Setembro 9, 2010 POr um acaso , eu devo guardar o TID em banco ? para que ele nao mude de valor ? O TID SEMPRE deve ser guardado em banco... ele serve para autorização futura (caso tenha problemas no ato da compra), captura da venda e consulta. por um acaso , você jah conseguiu fazer a homologação FreedFelipe ? AJUDA - faço a requisicao-captura , e ele me retorna um erro , ai fui no manul , vi qual era o erro 030 , só que não consegui entender ele , mais uma coisa , a requisicao-consulta eu consigo fazer , agora , como faço para pegar os valores de cada um individualmente ? consegui alinhaar eles com foreach , so que nao pegar dado por dado. Obrigado pela ajuda Felipe Pelo oq entendi, você está em modo de testes e não foi homologado ainda, confere? Se sim, você não vai conseguir capturar uma venda de fato... o trabalho de desenvolvimento vai até a consolidação da venda "fake". A captura é somente para transações válidas, e por isso dá erro 30... status inválido para captura. Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Setembro 9, 2010 Exatamente isso Gregolin , estou em faze de testes , mas como saberei se está funcionando direitnho se nao posso capturar uma venda "fake" ? Isso me deixa sem escolhas, tenho que por ao ar e arriscar ? A unica requisição que consigo fazer é a de consulta e de cancelamento. nem a do portador eu consigo fazer. Ajude-me :lol: Compartilhar este post Link para o post Compartilhar em outros sites
Gregolin 0 Denunciar post Postado Setembro 9, 2010 Exatamente isso Gregolin , estou em faze de testes , mas como saberei se está funcionando direitnho se nao posso capturar uma venda "fake" ? Isso me deixa sem escolhas, tenho que por ao ar e arriscar ? A unica requisição que consigo fazer é a de consulta e de cancelamento. nem a do portador eu consigo fazer. Ajude-me :lol: Mas calma, vi algumas coisas confusas nas suas msgs... você quer fazer em qual formato? você vai passar os dados do cartão do cliente ou ele vai digitar na tela deles? Se oq você vende for muito específico faz sentido você mesmo colher os dados do cartão do cliente e passar no XML, mas recomendo q faça no outro formato, em q só solicita a transação (XML requisicao-transacao). Ela, além de tirar uam dor de cabeça do seu lado (de manipular os dados do cartão do cliente), permite transações autenticadas, q não tem chance de chargeback... Sobre a captura, é algo muito simples cara... a encrenca é realmente efetuar a venda (cobrança no cartão), em q há "idas e vindas" de dados... você pede a transação, ela volta com o TID, o cliente digita os dados do cartão e só depois volta pra sua loja com uma resposta... se isso tudo está funfando ok, a captura é algo muito simples em q você só precisa montar o XML (com o TID, e aí q disse para você armazenar isso em banco) executá-lo e recebe resposta de OK ou NÃO. Hj em dia estou na fase de desenvolvimento ainda do formato webservice, mas utilizo há mais de 6 anos o formato VBV (Verified by Visa) q é semelhante (vários XMLs trocados e tal, porém em servidor Windows). Não sei se você já está sabendo, mas foi lançado nessa segunda q passou o webservice 1.1.0, q permite a venda tbm de MASTERCARD (na versão 1.0.0 era só Visa). Não muda quase nada, mas é bom você pegar a nova documentação. Valeu! Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Setembro 9, 2010 Cara , tu me esclareceu muita coisa , muito obrigado So mais uma duvida , eu recebo deles um xml , que dpois transformo em array , nesse array eu consigo pegar todos os valores e mostrar na pagina , mas como faço para pegar um valor determinado e mostrar so o valor dele ? Obrigado Felipe Compartilhar este post Link para o post Compartilhar em outros sites