<SOAP-ENV:Envelope xmlns:SOAP-ENV="
http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="
http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<ConsultarSituacaoLoteRpsRequest xmlns="
http://notacarioca.rio.gov.br/">
<inputXML>
<ConsultarSituacaoLoteRpsEnvio xmlns="
http://www.abrasf.org.br/ABRASF/arquivos/nfse.xsd">
<Prestador>
<Cnpj>xxxxxxxxxxx</Cnpj>
<InscricaoMunicipal>xxxxxxx</InscricaoMunicipal>
</Prestador>'.
<Protocolo>x</Protocolo>
</ConsultarSituacaoLoteRpsEnvio>
</inputXML>
</ConsultarSituacaoLoteRpsRequest>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
- Código em PHP usado para enviar o XML
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);
curl_setopt($ch, CURLOPT_FAILONERROR, 0);
curl_setopt($ch, CURLOPT_SSLCERT, $pemfile);
curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'PEM');
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, $cert_password);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Expect:',
'Content-Type: text/xml; charset=utf-8',
'Content-Length: '.strlen($requestXml),
'SOAPAction: "
http://notacarioca.rio.gov.br/ConsultarSituacaoLoteRps"',
));
curl_setopt($ch, CURLOPT_POSTFIELDS, $requestXml);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_HEADER, 1);
$ret = curl_exec($ch);
O detalhe que estava faltando para parar de receber o erro 972 eu só consegui descobrir lendo um código em Java que encontrei na internet.
Tudo que está dentro da tag <inputXML> deve ser convertido de forma a substituir os caracteres '<' e '>' por '<' e '>' respectivamente.
Em PHP fica algo assim:
$dados = str_replace('<', '<', $dados);
$dados = str_replace('>', '>', $dados);
Tudo que estiver fora da tag <inputXML> (incluindo a própria tag) deve continuar no formato normal.
Att,
Daniel