PHP NFSe com SOAP envio de XML RPS para Betha Fly-enota
Boa noite, estou tentando enviar com PHP SOAP o XML de um lote RPS assinado para o Web Service da Betha também conhecido como Fly e-nota.
No entanto, não tenho tido nenhum retorno quanto a se deu algum erro ou algo do tipo.
Documentação https://e-gov.betha.com.br/e-nota-test/ambienteteste.faces
Ambiente Teste Webservice
https://e-gov.betha.com.br/e-nota-contribuinte-test-ws/recepcionarLoteRps?wsdl
https://e-gov.betha.com.br/e-nota-contribuinte-test-ws/consultarLoteRps?wsdl
Layout https://e-gov.betha.com.br/e-nota/manuais/layout.pdf
Modelo Conceitual http://www.abrasf.org.br/arquivos/files/NFSE-NACIONAL_Modelo_Conceitual versao 2-02.pdf
Manual de Integração ABRASF http://www.abrasf.org.br/arquivos/files/NFSE-NACIONAL_Manual_De_Integracao versao 2-02.pdf
Tem uma opção na área administrativa Fly e-nota para solicitar a prefeitura autorização para impressão de RPS tanto manual como eletrônica.
Não sei se isso é obrigatório ou se é necessário para o meu objetivo.
Parte do código para o envio:
------------------------------
function transmiteRps($xmlAssinado,$certificadoPem,$senha){
$wsdl = 'https://e-gov.betha.com.br/e-nota-contribuinte-test-ws/recepcionarLoteRps?wsdl';
$endpoint = 'https://e-gov.betha.com.br/e-nota-contribuinte-test-ws/recepcionarLoteRps';
$certificate = $certificadoPem;
$password = $senha;
$options = array(
'location' => $endpoint,
'keep_alive' => true,
'trace' => true,
'local_cert' => $certificate,
'passphrase' => $password,
'cache_wsdl' => WSDL_CACHE_NONE
);
try {
$client = new SoapClient($wsdl, $options);
$function = 'EnviarLoteRpsEnvio';
$arguments = ['EnviarLoteRpsEnvio' => ['xml'=>$xmlAssinado]];
$options = [];
$result = $client -> __soapCall($function, $arguments, $options);
} catch(Exception $e){
$result = false;
}
if($result!==false){
return xml2array($result->return);
}else{
return false;
}
}//transmiteRps
----------------------------------------------------------
function xml2array($xmlstring){
$xml = simplexml_load_string($xmlstring);
$json = json_encode($xml);
$array = json_decode($json, TRUE);
return $array;
}
-----------------------------------------------
function consultaRps($cnpj, $inscricao, $protocolo, $certificadoPem, $senha){
$wsdl = 'https://e-gov.betha.com.br/e-nota-contribuinte-test-ws/consultarLoteRps?wsdl';
$endpoint = 'https://e-gov.betha.com.br/e-nota-contribuinte-test-ws/consultarLoteRps';
$certificate = $certificadoPem;
$password = $senha;
$xml = '<?xml version="1.0" encoding="utf-8"?>
<ConsultarLoteRpsEnvio xmlns="http://www.betha.com.br/e-nota-contribuinte-test-ws">
<Prestador>
<CpfCnpj>
<Cnpj>'.$cnpj.'</Cnpj>
</CpfCnpj>
<InscricaoMunicipal>'.$inscricao.'</InscricaoMunicipal>
</Prestador>
<Protocolo>'.$protocolo.'</Protocolo>
</ConsultarLoteRpsEnvio>';
$options = array(
'location' => $endpoint,
'keep_alive' => true,
'trace' => true,
'local_cert' => $certificate,
'passphrase' => $password,
'cache_wsdl' => WSDL_CACHE_NONE
);
try {
$client = new SoapClient($wsdl, $options);
$function = 'consultarLoteRps';
$arguments = ['consultarLoteRps' => ['xml'=>$xml]];
$options = [];
$result = $client -> __soapCall($function, $arguments, $options);
} catch(Exception $e){
$result = false;
}
if($result!==false){
return $result->return;
}else{
return false;
}
} //consultaRps
--------------------------------
$certificadoPem=dirname(__FILE__).'/certificado.pem';
$senha='xxxxx'; //senha do certificado
----------------------------------
//assina RPS
$xmlAssinado=assinaRps(dirname(__FILE__).'/only_rps.xml'); //usei para assinar só a RPS
file_put_contents(dirname(__FILE__).'/rps_temp/rps1.xml','<?xml version="1.0" encoding="utf-8"?>
<EnviarLoteRpsEnvio xmlns="https://e-gov.betha.com.br/e-nota-contribuinte-test-ws"><LoteRps Id="LOTE1"><NumeroLote>1</NumeroLote><Cnpj>xxxxxxxxxxxxxx</Cnpj><InscricaoMunicipal>xxxx</InscricaoMunicipal><QuantidadeRps>1</QuantidadeRps>
<ListaRps>'.str_replace('<?xml version="1.0" encoding="utf-8"?>','',$xmlAssinado).'</ListaRps></LoteRps></EnviarLoteRpsEnvio>');
$_SESSION['nome_uri']='LOTE1';
$xmlAssinado=assinaRps(dirname(__FILE__).'/rps_temp/rps1.xml'); //usei para assinar o Lote RPS
$resultado=transmiteRps($xmlAssinado,
$certificadoPem,
$senha);
if(!empty($resultado["Protocolo"])){//se tem protocolo e sucesso
//$resultado["NumeroLote"]
//$resultado["Protocolo"]
//consulta lote e pega nfse
$nfseResposta = consultaRps('xxxxxxxxxxxxx', //cnpj
'xxxx', //inscrição municipal
$resultado["Protocolo"],
$certificadoPem,
$senha);
if($nfseResposta!==false){
echo '<textarea cols="120" rows="70">';
echo $nfseResposta;
echo '</textarea>';
}else{
echo 'Erro ao consultar RPS';
}}else{
echo "erro no envio";
}
**Vídeo Tutorial** do código NFSe acima porém para outro webservice que não é da Betha.
[https://www.youtube.com/watch?v=v1rByVX1_FY](https://www.youtube.com/watch?v=v1rByVX1_FY)
Desde já agradeço a atenção e colaboração dos colegas.
Funcionando postarei aqui a solução com o código completo para quem precisar.Discussão (18)
Carregando comentários...