Boa tarde, a prefeitura de Ituiutaba-MG acabou de mudar pra SMARAPD e não temos informações de nada, gostaria de saber se algum ja fez e pode ajudar com alguns modelos de utilização,
envelope, crul, cabeçalho, no aguardo.
A SMARAPD é uma empresa de São José do Rio Preto.
Ela atende com mais frequência no Espirito Santo:
Cariacica, Guarapari e Serra.
Um manual que tem é esse:
http://servicos-pmg.guarapari.es.gov.br:9999/tbw/docs/MANUAL_INTEGRACAO_WS.pdf
Outro lugar onde você pode achar todos esses dados é no ACBR:
Dentro da pasta ArqINI tem as configurações
Smarapd.ini
SmarAPDABRASF.ini
E dentro de :
Está a lógica do envio.
muito obrigado, vou dar uma lida no material, existe algo em php que vc tinha conhecimento.??
Grato,
Não vi nada em PHP.
Mas se o ACBR conseguiu, qualquer um pode.
Eu desenvolvi um webservice inspirado no enotasgw.com.br.
Onde você envia os dados via JSON e o webservice conversa com a solução da prefeitura e gera a nota.
Vou implementar para um cliente em Guarapari.
Assim que estiver pronto, dou notícias.
Com a ajuda postada anteriormente, consegui progredir um pouco.
Após alguns dias afastado do projeto, voltei e estou testando, mas sempre me retorna “Resource id #106” e o status sempre esta 0.
segue o código pra possível analise.
$XmlAssinado = htmlentities(file_get_contents($arquivoRPSAssinado));
$cabecalho = htmlentities('<![CDATA[<?xml version="1.0" encoding="UTF-8"?><cabecalho xmlns="http://www.abrasf.org.br/nfse.xsd" versao="2.04"><versaoDados>2.04</versaoDados></cabecalho>]]>');
$envelope = '<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:nfse="http://nfse.abrasf.org.br">
<soapenv:Header/>
<soapenv:Body>
<nfse:RecepcionarLoteRpsRequest>
<nfseCabecMsg>'.$cabecalho.'</nfseCabecMsg>
<nfseDadosMsg>'.$XmlAssinado.'</nfseDadosMsg>
</nfse:RecepcionarLoteRpsRequest>
</soapenv:Body>
</soapenv:Envelope>
';
$url = 'https://201.72.16.150/tbwhomolog/services/nfseSOAP?wsdl'; // prefeitura ituiutaba smarapd
$headers = array(
"Content-type: text/xml; charset=utf-8",
"SOAPAction: RecepcionarLoteRps",
"Content-length: ".strlen($envelope),
);
$certFile = 'nfse_homolog.cer';
$ch = curl_init();
$ur1 = curl_setopt($ch, CURLOPT_URL, $url);
if (FALSE == $ur1) {
echo "Erro 1<br>";
}
$ur2 = curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
if (FALSE == $ur2) {
echo "Erro 2<br>";
}
$ur3 = curl_setopt($ch, CURLOPT_TIMEOUT, 300);
if (FALSE == $ur3) {
echo "Erro 3<br>";
}
$ur4 = curl_setopt($ch, CURLOPT_SSLCERT, $certFile);
if (FALSE == $ur4) {
echo "Erro 4<br>";
}
$ur5 = curl_setopt($ch, CURLOPT_POST, true);
if (FALSE == $ur5) {
echo "Erro 5<br>";
}
$ur6 = curl_setopt($ch, CURLOPT_POSTFIELDS, $envelope);
if (FALSE == $ur6) {
echo "Erro 6<br>";
}
$ur7 = curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
if (FALSE == $ur7) {
echo "Erro 7<br>";
}
$status_code=curl_getinfo($ch, CURLINFO_HTTP_CODE);
echo "status code --> $status_code" . "<br>";
echo $ch.'<br>';
//echo var_dump($ch);
$html = utf8_decode(curl_exec($ch));
//echo $ch.'<br>t<br>';
//echo $html.'<br>t<br>';
$retorno = substr($arquivoRPSAssinado,0,-4);
file_put_contents($retorno."_ret.xml", $html);
curl_close($ch);
preg_match_all('/<outputXML>(.*?)<\/outputXML>/s', $html, $matches);
$response = html_entity_decode(count($matches)&&count($matches[1])?$matches[1][0]:$html);
echo "<pre>$response</pre>";
exit;
Grato,
Esse bloco deve vir depois do curl_exec($ch) e antes do curl_close($ch).
Você ainda não executou a chamada.
Verificando aqui, o certificado do site não é válido.
Pois não tem um domínio, apenas o IP.
Você precisa nesse caso informar ao cURL que é para ignorar.
Segue exemplo abaixo:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 300);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $envelope);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_SSLCERT, $certFile);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
// Converte
//$html = utf8_decode(curl_exec($ch)); --converte de UTF-8 para ISO-8859
$html = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$return->status = $httpcode;
file_put_contents("$fname.ret", $html);
if ($httpcode!=200){
preg_match_all('/<faultstring>(.*?)<\/faultstring>/s', html_entity_decode($html), $matches);
$response = (count($matches)&&count($matches[1])?$matches[1][0]:$html);
$return->data['errors'][] = [
"codigo" => $httpcode,
"mensagem" => $response,
"correcao" => ""
];
return $return;
}