- Fórum WMO
- → Viewing Profile: Posts: DuuuuDuuuu
Community Stats
- Group Usuários
- Active Posts 25
- Profile Views 1138
- 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 ·



Postagens