Olá prezados,
Estou implementando uma integração o webservice da prefeitura de piracicaba, e o problema que tenho enfrentado é principalmente os namespaces que eles
utilizam. Eu não consegui ate então inserir os namespaces no envelope da requisição SOAP, pelo menos não via SoapClient. Eu consegui me conectar normalmente, e até realizei algumas emissões utilizando o SoapUI. A estrutura que o SOAPUI retorna quando me conecto ao webservice deles é a seguinte:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:si="http://www.sistema.com.br/Sistema.Ws.Nfse"
xmlns:nf="http://www.sistema.com.br/Nfse/arquivos/nfse_3.xsd"
xmlns:xm="http://www.w3.org/2000/09/xmldsig#"
xmlns:si1="http://www.sistema.com.br/Sistema.Ws.Nfse.Cn">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<si:GerarNfse>
<si:GerarNovaNfseEnvio>
<nf:Prestador>
<nf:Cnpj>18720828000180</nf:Cnpj>
<nf:InscricaoMunicipal>629213</nf:InscricaoMunicipal>
</nf:Prestador>
<nf:InformacaoNfse>
<nf:NaturezaOperacao>1</nf:NaturezaOperacao>
<nf:RegimeEspecialTributacao>6</nf:RegimeEspecialTributacao>
<nf:OptanteSimplesNacional>1</nf:OptanteSimplesNacional>
<nf:IncentivadorCultural>2</nf:IncentivadorCultural>
<nf:Status>1</nf:Status>
<nf:Competencia>2018-10-31</nf:Competencia>
<nf:OutrasInformacoes/>
<nf:Servico>
<nf:Valores>
<nf:ValorServicos>3.26</nf:ValorServicos>
<nf:ValorDeducoes>0.00</nf:ValorDeducoes>
<nf:ValorPis>0.00</nf:ValorPis>
<nf:ValorCofins>0.00</nf:ValorCofins>
<nf:ValorInss>0.00</nf:ValorInss>
<nf:ValorIr>0.00</nf:ValorIr>
<nf:ValorCsll>0.00</nf:ValorCsll>
<nf:IssRetido>2</nf:IssRetido>
<nf:ValorIss>0.07</nf:ValorIss>
<nf:ValorIssRetido>0.07</nf:ValorIssRetido>
<nf:OutrasRetencoes>0.00</nf:OutrasRetencoes>
<nf:BaseCalculo>3.26</nf:BaseCalculo>
<nf:Aliquota>2.00</nf:Aliquota>
<nf:ValorLiquidoNfse>3.26</nf:ValorLiquidoNfse>
<nf:DescontoIncondicionado>0.00</nf:DescontoIncondicionado>
<nf:DescontoCondicionado>0.00</nf:DescontoCondicionado>
</nf:Valores>
<nf:ItemListaServico>03.03</nf:ItemListaServico>
<nf:CodigoTributacaoMunicipio>030301300</nf:CodigoTributacaoMunicipio>
<nf:Discriminacao>STRING</nf:Discriminacao>
<nf:CodigoMunicipio>INT</nf:CodigoMunicipio>
<nf:ItensServico>
<nf:Descricao>STRING</nf:Descricao>
<nf:Quantidade>DECIMAL</nf:Quantidade>
<nf:ValorUnitario>DECIMAL</nf:ValorUnitario>
</nf:ItensServico>
</nf:Servico>
<nf:Tomador>
<nf:IdentificacaoTomador>
<nf:CpfCnpj>
<nf:Cnpj>STRING</nf:Cnpj>
</nf:CpfCnpj>
<nf:InscricaoMunicipal>STRING</nf:InscricaoMunicipal>
</nf:IdentificacaoTomador>
<nf:RazaoSocial>STRING</nf:RazaoSocial>
<nf:Endereco>
<nf:Endereco>STRING</nf:Endereco>
<nf:Numero>STRING</nf:Numero>
<nf:Complemento>STRING</nf:Complemento>
<nf:Bairro>STRING</nf:Bairro>
<nf:CodigoMunicipio>INT</nf:CodigoMunicipio>
<nf:Uf>STRING</nf:Uf>
<nf:Cep>INT</nf:Cep>
</nf:Endereco>
<nf:Contato>
<nf:Telefone>STRING</nf:Telefone>
<nf:Email>STRING</nf:Email>
</nf:Contato>
</nf:Tomador>
<nf:IntermediarioServico>
<nf:RazaoSocial>STRING</nf:RazaoSocial>
<nf:CpfCnpj>
<nf:Cnpj>STRING</nf:Cnpj>
</nf:CpfCnpj>
<nf:InscricaoMunicipal>STRING</nf:InscricaoMunicipal>
</nf:IntermediarioServico>
<nf:ContrucaoCivil>
<nf:CodigoObra>STRING</nf:CodigoObra>
<nf:Art>STRING</nf:Art>
</nf:ContrucaoCivil>
</nf:InformacaoNfse>
<xm:Signature>
<xm:SignedInfo>
<xm:CanonicalizationMethod/>
<xm:SignatureMethod>
<xm:HMACOutputLength>INTEGER</xm:HMACOutputLength>
</xm:SignatureMethod>
<xm:Reference>
<xm:Transforms>
<xm:Transform>
<xm:XPath>STRING</xm:XPath>
</xm:Transform>
</xm:Transforms>
<xm:DigestMethod/>
<xm:DigestValue>BASE64BINARY</xm:DigestValue>
</xm:Reference>
</xm:SignedInfo>
<xm:SignatureValue/>
<xm:KeyInfo>
<xm:MgmtData>STRING</xm:MgmtData>
</xm:KeyInfo>
<xm:Object/>
</xm:Signature>
</si:GerarNovaNfseEnvio>
<si:pParam>
<si1:P1>STRING</si1:P1>
<si1:P2>STRING</si1:P2>
</si:pParam>
</si:GerarNfse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
A montagem da msg estou enviando da seguinte forma, onde o $xmlDoc contem o xml que estou enviando:
$params = array(
'ns1:GerarNovaNfseEnvio' => str_replace(array("\r\n", "\n", "\r",'<?xml version="1.0"?>'),'', $xmlDoc->saveXML()),
'ns1:pParam' => '<ns1:pParam><ns1:P1>'.$this->cnpjPrestador.'</ns1:P1><ns1:P2>xxxx</ns1:P2></ns1:pParam>'
);
E envio para o webservice chamando o método 'GerarNfse' do webservice:
$result = $this->connectionSoap->$operation($params);