Viamão/RS - 4323002

Bom dia, estou tendo dificuldades em consumir o webservice da cidade de Viamão(Prefeitura Municipal Viamão-RS - Nota Fiscal de Serviço Eletrônica). Já tentei vários modelos para conexão mas sempre algum erro. Dessa vez não estou tendo retorno nenhum. Abaixo minha última tentativa, que tirei aqui da comunidade. Ela não retorna absolutamente nada.

<?php
                             
$arquivoRPSAssinado = 'XML/assinados/teste.xml';
$XmlAssinado = htmlentities(file_get_contents($arquivoRPSAssinado));
$cabecalho = htmlentities('<cabecalho versao="2.02" xmlns="http://www.abrasf.org.br/nfse.xsd"><versaoDados>2.02</versaoDados></cabecalho>');
    
$envelope = 
'<?xml version="1.0" encoding="UTF-8"?>
 <x:Envelope xmlns:x="http://schemas.xmlsoap.org/soap/envelope/" xmln s:ser="http://services.nfse">
 <x:Header/>
 <x:Body>
 <ser:RecepcionarLoteRpsRequest>
    <nfseCabecMsg>'.$cabecalho.'</nfseCabecMsg>
    <nfseDadosMsg>'.$XmlAssinado.'</nfseDadosMsg>
 </ser:RecepcionarLoteRpsRequest>
 </x:Body>
 </x:Envelope>';

$url = 'http://acesso.viamao.rs.gov.br:8085/NFSe.portal.integracao/services.svc';
    
$headers = array(
        "Content-type: text/xml; charset=utf-8",
        "SOAPAction: http://services.nfse/RecepcionarLoteRps", 
        "Content-length: ".strlen($envelope),
);

$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);

// converting
$html = utf8_decode(curl_exec($ch));
file_put_contents("$arquivoRPSAssinado.ret", $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>";  
echo "<br>Fim";

Se alguém puder dar uma luz, agradeceria imensamente.

Olá,

Desculpa mas estou com probleminha.
Minhas duas máquinas deram problema essa semana e estou reinstalando e voltando backup.

Para você saber o que está acontecendo, use uma IDE de desenvolvimento.
Use o PHPSTORM, pode ser a gratuita mesmo.
Use em conjunto com o Wamp64

Assim que eu terminar de voltar meu ambiente eu dou uma olhada.

Mas a princípio parece que seu ambiente está faltando algo.

Vissshh… Deve ser dureza perder as duas máquinas ao mesmo tempo.
Valeu pelo retorno, vou tentar com o PHPSTORM e te aviso o retorno que tiver.

Eu cheguei a conseguir consumir o webservice usando SoapClient, mas mesmo enviando o XML formatado na versão 2.02, o WebServices recusa. Ele valida o XML de envio como se fosse um XML da 1.0.
O arquivo é processado no servidor da prefeitura porque o retorno que tenho é o “RecepcionarLoteRpsResult”, mas é sempre a mesma resposta: "Atributo ‘versao’ não foi declarado. O elemento ‘LoteRps’ apresenta elemento filho ‘CpfCnpj’ inválido. Lista de possíveis elementos esperados: ‘Cnpj’. "

Muito obrigado por enquanto, Luiz.

Poste por favor o XML que você está enviando.
Está com erro de SINTAXE.

RPS1789456.xml (6,4,KB)

Segue ele …

O seu XML está com erro, a Tag Servico está faltando itens obrigatórios (CodigoPais e ExigibilidadeISS).

image

Eu criei um Script Visual Basic para fazer a validação com o Schema.

image

Basta clicar 2 vezes nele, que vai validar o seu XML.

Caso precise mudar o nome do arquivo, ou os schemas é só editar ele nesses 2 lugares:

xmlDoc.load "RPS1789456.xml"
Set schemaCache = CreateObject("Msxml2.XMLSchemaCache.6.0")

e

schemaCache.add "http://www.abrasf.org.br/nfse.xsd", "nfse v2 02.xsd"
schemaCache.add "http://www.w3.org/2000/09/xmldsig#", "xmldsig-core-schema20020212.xsd"

Set xmlDoc.schemas = schemaCache

Arquivo Exemplo Completo:
rs_viamao.rar (11,1,KB)