Viamão/RS - 4323002

Bom dia, estou tendo dificuldades em consumir o webservice da cidade de Viamão(https://www.viamao.rs.gov.br/portal/servicos/35/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)