- Fórum WMO
- → Viewing Profile: Posts: DuuuuDuuuu
Community Stats
- Group Usuários
- Active Posts 25
- Profile Views 1065
- Member Title Turista
- Age Age Unknown
- Birthday Birthday Unknown
-
Sexo
Male
-
Localidade
brasil
0
Neutral
User Tools
Friends
DuuuuDuuuu hasn't added any friends yet.
Posts I've Made
In Topic: Arrays Para Um Só Array
31/08/2011, 13:17
já tentou usar join pra concatenear os resultados?
In Topic: Validador De Nf-E
29/08/2011, 10:36
como assim acesso? vc diz a senha e o pass pra se conectar no web services, na verdade eu to procurando mais informações, pois fiquei sabendo q tem uma plataforma de teste pra isso.
olha a uns dias eu to mechendo naquele nfephp q pelo jeito as url dos webservices estão bem ultrapassada, segue o codigo q eu to editando faz uma semana e to com pouco resultado
olha a uns dias eu to mechendo naquele nfephp q pelo jeito as url dos webservices estão bem ultrapassada, segue o codigo q eu to editando faz uma semana e to com pouco resultado
<?php $file = 'nfe.xml'; $chave = '42110875384404000125550040000477231459594050'; function __sendSOAP($urlsefaz,$namespace,$cabecalho,$dados,$metodo,$ambiente,$UF=''){ use_soap_error_handler(true); //versão do SOAP $soapver = SOAP_1_2; //ini_set("soap.wsdl_cache_enabled", "0"); if($ambiente == 1){ $ambiente = 'producao'; } else { $ambiente = 'homologacao'; } //monta a terminação do URL switch ($metodo){ case 'nfeRecepcaoLote2': $usef = "_NFeRecepcao2.asmx"; break; case 'nfeRetRecepcao2': $usef = "_NFeRetRecepcao2.asmx"; break; case 'nfeCancelamentoNF2': $usef = "_NFeCancelamento2.asmx"; break; case 'nfeInutilizacaoNF2': $usef = "_NFeInutilizacao2.asmx"; break; case 'nfeConsultaNF2': $usef = "_NFeConsulta2.asmx"; break; case 'nfeStatusServicoNF2': $usef = "_NFeStatusServico2.asmx"; break; case 'consultaCadastro': $usef = ""; break; } //para os estados de AM, MT e PR é necessário usar wsdl baixado para acesso ao webservice if ($UF=='AM' || $UF=='MT' || $UF=='PR'){ $urlsefaz = "https://homologacao.nfe.fazenda.sp.gov.br/nfeweb/services/NfeRecepcao2.asmx"; } if ($this->enableSVAN){ //se for SVAN montar o URL baseado no metodo e ambiente $urlsefaz = "https://homologacao.nfe.fazenda.sp.gov.br/nfeweb/services/NfeRecepcao2.asmx"; } //verificar se SCAN ou SVAN if ($this->enableSCAN){ //se for SCAN montar o URL baseado no metodo e ambiente $urlsefaz = "https://homologacao.nfe.fazenda.sp.gov.br/nfeweb/services/NfeRecepcao2.asmx"; } //completa a url do serviço para baixar o arquivo WSDL $URL = $urlsefaz.'?WSDL'; $options = array( 'encoding' => 'UTF-8', 'verifypeer' => false, 'verifyhost' => false, 'soap_version' => $soapver, 'style' => SOAP_DOCUMENT, 'use' => SOAP_LITERAL, 'local_cert' => $this->certKEY, 'trace' => true, 'compression' => 0, 'exceptions' => true, 'cache_wsdl' => WSDL_CACHE_NONE ); //instancia a classe soap $oSoapClient = new NFeSOAP2Client($URL,$options); //monta o cabeçalho da mensagem $varCabec = new SoapVar($cabecalho,XSD_ANYXML); $header = new SoapHeader($namespace,'nfeCabecMsg',$varCabec); //instancia o cabeçalho $oSoapClient->__setSoapHeaders($header); //monta o corpo da mensagem soap $varBody = new SoapVar($dados,XSD_ANYXML); //faz a chamada ao metodo do webservices $resp = $oSoapClient->__soapCall($metodo, array($varBody) ); if (is_soap_fault($resp)) { $soapFault = "SOAP Fault: (faultcode: {$resp->faultcode}, faultstring: {$resp->faultstring})"; } $resposta = $oSoapClient->__getLastResponse(); return $resposta; } //fim __sendSOAP function getProtocol($recibo='',$chave='',$tpAmb='',$modSOAP='1'){ //carrega defaults $i = 0; $aRetorno = array('bStat'=>false,'cStat'=>'','xMotivo'=>'','aProt'=>''); $cUF = 'SC'; $UF = 'teste.jpg'; if ($tpAmb != '1' && $tpAmb != '2' ){ $tpAmb = '2'; } //verifica se a chave foi passada if($chave != ''){ //se sim extrair o cUF da chave $cUF = substr($chave,0,2); //testar para ver se é o mesmo do emitente colocar } if ($recibo == '' && $chave == '') { echo 'ERRO. Favor indicar o numero do recibo ou a chave de acesso da NFe!!'; return false; } if ($recibo != '' && $chave != '') { echo 'ERRO. Favor indicar somente um dos dois dados ou o numero do recibo ou a chave de acesso da NFe!!'; return false; } //consulta pelo recibo if ($recibo != '' && $chave == '') { //buscar os protocolos pelo numero do recibo do lote //identificação do serviço $servico = 'NfeRetRecepcao'; //recuperação da versão $namespace = 'http://www.w3.org/2000/09/xmldsig#sha1/wsdl/'.$servico.'2'; //montagem do cabeçalho da comunicação SOAP $cabec = '<nfeCabecMsg xmlns="'.$namespace.'"><cUF>'.$cUF.'</cUF><versaoDados>'.$versao.'</versaoDados></nfeCabecMsg>'; //montagem dos dados da mensagem SOAP $dados = '<nfeDadosMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2"> <consReciNFe xmlns="http://www.portalfiscal.inf.br/nfe" versao="2.00"> <tpAmb>'. $tpAmb.'</tpAmb> <nRec>'.$recibo .'</nRec> </consReciNFe> </nfeDadosMsg>'; //nome do arquivo $nomeArq = $recibo.'-protrec.xml'; } //consulta pela chave if ($recibo == '' && $chave != ''){ //buscar o protocolo pelo numero da chave de acesso //identificação do serviço $servico = 'NfeRetRecepcao'; //recuperação da versão $versao = '2.00'; //recuperação da url do serviço $urlservico = 'https://homologacao.nfe.ms.gov.br/homologacao/services2/NfeRetRecepcao2'; //recuperação do método $metodo = 2; //montagem do namespace do serviço $namespace = 'http://www.portalfiscal.inf.br/nfe/wsdl/NfeConsulta2'; //montagem do cabeçalho da comunicação SOAP $cabec = '<nfeCabecMsg xmlns="'. $namespace . '"><cUF>'.$cUF.'</cUF><versaoDados>'.$versao.'</versaoDados></nfeCabecMsg>'; //montagem dos dados da mensagem SOAP $dados = '<nfeDadosMsg xmlns="'.$namespace.'"> <consSitNFe xmlns="http://www.portalfiscal.inf.br/nfe" versao="2.0"> <tpAmb>'.$tpAmb.'</tpAmb> <xServ>CONSULTAR</xServ> <chNFe>'.$chave .'</chNFe> </consSitNFe> </nfeDadosMsg>'; } //envia a solicitação via SOAP $retorno = __sendSOAP($urlservico, $namespace, $cabec, $dados, $metodo, $tpAmb,$UF); //verifica o retorno if ($retorno){ //tratar dados de retorno $doc = new DOMDocument(); //cria objeto DOM $doc->formatOutput = false; $doc->preserveWhiteSpace = false; $doc->loadXML($retorno,LIBXML_NOBLANKS | LIBXML_NOEMPTYTAG); $cStat = !empty($doc->getElementsByTagName('cStat')->item(0)->nodeValue) ? $doc->getElementsByTagName('cStat')->item(0)->nodeValue : ''; if ($cStat == ''){ //houve erro return false; } //o retorno vai variar se for buscado o protocolo ou recibo //Retorno nda consulta pela Chave da NFe //retConsSitNFe 100 aceita 110 denegada 101 cancelada ou outro recusada // cStat xMotivo cUF chNFe protNFe retCancNFe if ($chave != '') { $aRetorno['bStat'] = true; $aRetorno['cStat'] = $doc->getElementsByTagName('cStat')->item(0)->nodeValue; $aRetorno['xMotivo'] = !empty($doc->getElementsByTagName('xMotivo')->item(0)->nodeValue) ? $doc->getElementsByTagName('xMotivo')->item(0)->nodeValue : ''; $infProt = $doc->getElementsByTagName('infProt')->item($i); if(isset($infProt)){ foreach($infProt->childNodes as $t) { $aProt[$i][$t->nodeName] = $t->nodeValue; } } else { $aProt = ''; } $aRetorno['aProt'] = $aProt; //gravar o retorno na pasta temp apenas se a nota foi aprovada ou denegada if ( $aRetorno['cStat'] == 100 || $aRetorno['cStat'] == 110 ){ //nome do arquivo $nomeArq = $chave.'-prot.xml'; $nome = 'teste/'.$nomeArq; $nome = $doc->save($nome); } } //Retorno da consulta pelo recibo //NFeRetRecepcao 104 tem retornos //nRec cStat xMotivo cUF cMsg xMsg protNfe* infProt chNFe dhRecbto nProt cStat xMotivo if ($recibo != ''){ $aRetorno['bStat'] = true; // status do serviço $aRetorno['cStat'] = $doc->getElementsByTagName('cStat')->item(0)->nodeValue; // motivo da resposta (opcional) $aRetorno['xMotivo'] = !empty($doc->getElementsByTagName('xMotivo')->item(0)->nodeValue) ? $doc->getElementsByTagName('xMotivo')->item(0)->nodeValue : ''; if ($cStat == '104'){ //aqui podem ter varios retornos dependendo do numero de NFe enviadas no Lote e já processadas $protNfe = $doc->getElementsByTagName('protNFe'); foreach ($protNfe as $d){ $infProt = $d->getElementsByTagName('infProt')->item($i); $protcStat = $infProt->getElementsByTagName('cStat')->item(0)->nodeValue;//cStat //pegar os dados do protolo para retornar foreach($infProt->childNodes as $t) { $aProt[$i][$t->nodeName] = $t->nodeValue; } $i++; //incluido increment para controlador de indice do array //salvar o protocolo somente se a nota estiver approvada ou denegada if ( $protcStat == 100 || $protcStat == 110 ){ $nomeprot = 'teste/'.$infProt->getElementsByTagName('chNFe')->item(0)->nodeValue.'-prot.xml';//id da nfe //salvar o protocolo em arquivo $novoprot = new DOMDocument('1.0', 'UTF-8'); $novoprot->formatOutput = true; $novoprot->preserveWhiteSpace = false; $pNFe = $novoprot->createElement("protNFe"); $pNFe->setAttribute("versao", "2.00"); // Importa o node e todo o seu conteudo $node = $novoprot->importNode($infProt, true); // acrescenta ao node principal $pNFe->appendChild($node); $novoprot->appendChild($pNFe); $xml = $novoprot->saveXML(); $xml = str_replace('<?xml version="1.0" encoding="UTF-8 standalone="no"?>','<?xml version="1.0" encoding="UTF-8"?>',$xml); $xml = str_replace(array("default:",":default"),"",$xml); $xml = str_replace("\n","",$xml); $xml = str_replace(" "," ",$xml); $xml = str_replace(" "," ",$xml); $xml = str_replace(" "," ",$xml); $xml = str_replace(" "," ",$xml); $xml = str_replace(" "," ",$xml); $xml = str_replace("> <","><",$xml); file_put_contents($nomeprot, $xml); } } } $aRetorno['aProt'] = $aProt; //passa o valor de $aProt para o array de retorno $nomeArq = $recibo.'-recprot.xml'; $nome = 'teste/'.$nomeArq; $nome = $doc->save($nome); } } else { echo 'Nao houve retorno Soap verifique a mensagem de erro e o debug!!'; $aRetorno = false; } return $aRetorno; } //fim getProtocol function verifySignatureXML($conteudoXML, $tag){ $dom = new DOMDocument(); $dom->preserveWhiteSpace = false; $dom->formatOutput = false; $dom->loadXML($conteudoXML); $tagBase = $dom->getElementsByTagName($tag)->item(0); // validar digest value $tagInf = $tagBase->C14N(false, false, null, null); $tagInf = str_replace(' xmlns:ds="http://www.w3.org/2000/09/xmldsig#"', '', $tagInf); $digestCalculado = base64_encode(sha1($tagInf, true)); $digestInformado = $dom->getElementsByTagName('DigestValue')->item(0)->nodeValue; if ($digestCalculado != $digestInformado){ echo "O conteúdo do XML não confere com o Digest Value.\nDigest calculado [{$digestCalculado}], informado no XML [{$digestInformado}].\nO arquivo pode estar corrompido ou ter sido adulterado."; return false; } return true; } //verifica se o arquivo existe if ( file_exists($file) ){ //carrega a NFe $xml = file_get_contents($file); //testa a assinatura if (verifySignatureXML($xml,'infNFe')){ //como a ssinatura confere, consultar o SEFAZ para verificar se a NF não foi cancelada ou é FALSA //carrega o documento no DOM $xmldoc = new DOMDocument(); $xmldoc->preservWhiteSpace = false; //elimina espaços em branco $xmldoc->formatOutput = false; $xmldoc->loadXML($xml,LIBXML_NOBLANKS | LIBXML_NOEMPTYTAG); $root = $xmldoc->documentElement; $infNFe = $xmldoc->getElementsByTagName('infNFe')->item(0); //extrair a tag com os dados a serem assinados $id = trim($infNFe->getAttribute("Id")); $chave = preg_replace('/[^0-9]/','', $id); $digest = $xmldoc->getElementsByTagName('DigestValue')->item(0)->nodeValue; //ambiente da NFe sendo consultada $tpAmb = $infNFe->getElementsByTagName('tpAmb')->item(0)->nodeValue; //verifica se existe o protocolo $protNFe = $xmldoc->getElementsByTagName('protNFe')->item(0); if (isset($protNFe)){ $nProt = $xmldoc->getElementsByTagName('nProt')->item(0)->nodeValue; } else { $nProt = ''; } //busca o status da NFe na SEFAZ do estado do emitente $resp = getProtocol('',$chave,$tpAmb,'2'); if ($resp['cStat']!='100'){ //ERRO! nf não aprovada echo "NF não aprovada no SEFAZ!! cStat =" . $resp['cStat'] .' - '.$resp['xMotivo'] ; return false; } else { if ( is_array($resp['aProt'][0])){ $nProtSefaz = $resp['aProt'][0]['nProt']; $digestSefaz = $resp['aProt'][0]['digVal']; //verificar numero do protocolo if ($nProt != '') { if ($nProtSefaz != $nProt){ //ERRO !!!os numeros de protocolo não combinam echo "Os numeros dos protocolos não combinam!! nProtNF = " . $nProt . " <> nProtSefaz = " . $nProtSefaz; return false; } //fim teste do protocolo } else { echo "A NFe enviada não comtêm o protocolo de aceitação !!"; } //verifica o digest if ($digestSefaz != $digest){ //ERRO !!!os numeros digest não combinam echo "Os numeros digest não combinam!! digValSEFAZ = " . $digestSefaz . " <> DigestValue = " . $digest; return false; } //fim teste do digest value } else { //o retorno veio como 100 mas por algum motivo sem o protocolo echo "Falha no retorno dos dados, retornado sem o protocolo !! "; return false; } } } else { echo " Assinatura não confere!!"; return false; } //fim verificação da assinatura } else { echo "Arquivo não localizado!!"; return false; } //fim file_exists ?>
In Topic: Login Invalido, Problemas No Select
08/08/2011, 09:44
o rsantos ta certo
o LIKE é útil para efetuar buscas no BD
no caso de senhas, o correto é usar um pouco mais de sensibilidade
pra q no BD puxe exatamente oq vc quer, da uma olhada nesse link
http://dev.mysql.com...ensitivity.html
e tbm é bom diferenciar maiusculas de minusculas.
Só um complemento.
o LIKE é útil para efetuar buscas no BD
no caso de senhas, o correto é usar um pouco mais de sensibilidade
pra q no BD puxe exatamente oq vc quer, da uma olhada nesse link
http://dev.mysql.com...ensitivity.html
e tbm é bom diferenciar maiusculas de minusculas.
Só um complemento.
In Topic: Não Mostrar Linha Da Tabela Em Consulta Ao Bd
07/04/2011, 16:55
simples
mto simples
mostras todos os dados de uma tabela menos a linha que a coluna id é 5
olha como é simples e vcs se complicaram tudo
era só um operador que tinha esquecido
e que tbm pode ser suprimido por uma função
nativa do mysql
olha que simples:
mostrando todos APENAS deixando de fora a linha que a coluna id é 5
mostrando todos e citando os dados que não quero mostrar, no exemplo as linha que possuem a coluna id igual a 5, 7 ou 9
simples, em um, é o perador !=, no primeiro no caso,
e no segundo foi usado a função nativa do mysql q é a NOT IN
aonde posso atribuir os dados que não quero q apareça, q é as id 5,7 e 9
separado por virgula e dentro do parenteses, querem mais alguma explicação?
espero que tenha sido claro dessa vez.
se fosse pra dar um select e SOMENTE mostrar a id que eu quero
ou receber noções basicas de mysql, eu leria o manual
coisas simples assim são perguntas rapidas
que costume o pessoal tem de complicar tudo ¬¬'
se fosse algo mais complexo eu iria estudar
antis de fazer qualquer pergunta, forum
é pra debater assuntos e ideias sobre um determinado
tema, fazer perguntas rápidas, como aquelas q fizemos
para os colegas de trabalho do tipo "aonde está mesmo aquela imagem?", "qual operador eu uso para diferenciar dados?", "qual é aquela função nativa para exclui cookies?"
coisas assim, complicar a vida do pessoal que ta começando, e q tbm são uns folgado e querem tudo pronto, nem o básico tem, como sabem oq tem pra fazer se nem mesmo sabem oq podem fazer, e é oq mais vejo nos forum pela internet, é fato.
mto simples
mostras todos os dados de uma tabela menos a linha que a coluna id é 5
olha como é simples e vcs se complicaram tudo
era só um operador que tinha esquecido
e que tbm pode ser suprimido por uma função
nativa do mysql
olha que simples:
mostrando todos APENAS deixando de fora a linha que a coluna id é 5
$db->query("SELECT id FROM tabela WHERE id != 5 ORDEM BY id");
mostrando todos e citando os dados que não quero mostrar, no exemplo as linha que possuem a coluna id igual a 5, 7 ou 9
$db->query("SELECT id FROM tabela WHERE id NOT IN (5,7,9) ORDEM BY id");
simples, em um, é o perador !=, no primeiro no caso,
e no segundo foi usado a função nativa do mysql q é a NOT IN
aonde posso atribuir os dados que não quero q apareça, q é as id 5,7 e 9
separado por virgula e dentro do parenteses, querem mais alguma explicação?
espero que tenha sido claro dessa vez.
se fosse pra dar um select e SOMENTE mostrar a id que eu quero
ou receber noções basicas de mysql, eu leria o manual
coisas simples assim são perguntas rapidas
que costume o pessoal tem de complicar tudo ¬¬'
se fosse algo mais complexo eu iria estudar
antis de fazer qualquer pergunta, forum
é pra debater assuntos e ideias sobre um determinado
tema, fazer perguntas rápidas, como aquelas q fizemos
para os colegas de trabalho do tipo "aonde está mesmo aquela imagem?", "qual operador eu uso para diferenciar dados?", "qual é aquela função nativa para exclui cookies?"
coisas assim, complicar a vida do pessoal que ta começando, e q tbm são uns folgado e querem tudo pronto, nem o básico tem, como sabem oq tem pra fazer se nem mesmo sabem oq podem fazer, e é oq mais vejo nos forum pela internet, é fato.
- Fórum WMO
- → Viewing Profile: Posts: DuuuuDuuuu
- Privacy Policy
- Regras ·