Alterei a forma de pegar os endereços.
Ao invés de uma função pra cada UF, uma função pra NFE, CTE, MDFE, NFCE, e NFE 4.0
Como exemplo pra NFE:
aList := { ;
;
{ "AM", WS_AMBIENTE_PRODUCAO, WS_NFE_AUTORIZACAO, "https://nfe.sefaz.am.gov.br/services2/services/NfeAutorizacao" }, ;
{ "AM", WS_AMBIENTE_PRODUCAO, WS_NFE_CANCELAMENTO, "https://nfe.sefaz.am.gov.br/services2/services/NfeCancelamento2" }, ;
{ "AM", WS_AMBIENTE_PRODUCAO, WS_NFE_CONSULTAPROTOCOLO, "https://nfe.sefaz.am.gov.br/services2/services/NfeConsulta2" }, ;
{ "AM", WS_AMBIENTE_PRODUCAO, WS_NFE_INUTILIZACAO, "https://nfe.sefaz.am.gov.br/services2/services/NfeInutilizacao2" }, ;
{ "AM", WS_AMBIENTE_PRODUCAO, WS_NFE_RECEPCAO, "https://nfe.sefaz.am.gov.br/services2/services/NfeRecepcao2" }, ;
{ "AM", WS_AMBIENTE_PRODUCAO, WS_NFE_RECEPCAOEVENTO, "https://nfe.sefaz.am.gov.br/services2/services/RecepcaoEvento" }, ;
{ "AM", WS_AMBIENTE_PRODUCAO, WS_NFE_RETAUTORIZACAO, "https://nfe.sefaz.am.gov.br/services2/services/NfeRetAutorizacao" }, ;
{ "AM", WS_AMBIENTE_PRODUCAO, WS_NFE_RETRECEPCAO, "https://nfe.sefaz.am.gov.br/services2/services/NfeRetRecepcao2" }, ;
{ "AM", WS_AMBIENTE_PRODUCAO, WS_NFE_STATUSSERVICO, "https://nfe.sefaz.am.gov.br/services2/services/NfeStatusServico2" }, ;
;
{ "AM", WS_AMBIENTE_HOMOLOGACAO, WS_NFE_CONSULTAPROTOCOLO, "https://homnfe.sefaz.am.gov.br/services2/services/NfeConsulta2" }, ;
{ "AM", WS_AMBIENTE_HOMOLOGACAO, WS_NFE_CANCELAMENTO, "https://homnfe.sefaz.am.gov.br/services2/services/NfeCancelamento2" }, ;
{ "AM", WS_AMBIENTE_HOMOLOGACAO, WS_NFE_CONSULTACADASTRO, "https://homnfe.sefaz.am.gov.br/services2/services/CadConsultaCadastro2" }, ;
{ "AM", WS_AMBIENTE_HOMOLOGACAO, WS_NFE_CONSULTAPROTOCOLO, "https://homnfe.sefaz.am.gov.br/services2/services/NfeConsulta2" }, ;
{ "AM", WS_AMBIENTE_HOMOLOGACAO, WS_NFE_INUTILIZACAO, "https://homnfe.sefaz.am.gov.br/services2/services/NfeInutilizacao2" }, ;
{ "AM", WS_AMBIENTE_HOMOLOGACAO, WS_NFE_RECEPCAO, "https://homnfe.sefaz.am.gov.br/services2/services/NfeRecepcao2" }, ;
{ "AM", WS_AMBIENTE_HOMOLOGACAO, WS_NFE_RECEPCAOEVENTO, "https://homnfe.sefaz.am.gov.br/services2/services/RecepcaoEvento" }, ;
...
E a escolha:
nPos := AScan( aList, { | e | cUF == e[ 1 ] .AND. cAmbiente == e[ 2 ] .AND. nWsServico == e[ 3 ] } )
cUrl := iif( nPos == 0, "", aList[ nPos, 4 ] )
IF nWsServico == WS_NFE_CONSULTACADASTRO .AND. cUF $ "AC,RN,PB,SC"
cUrl := SoapUrlNfe( "SVRS", cAmbiente, nWsServico )
ENDIF
DO CASE
CASE ! Empty( cUrl )
CASE cUf $ "AC,AL,AP,DF,ES,PB,RJ,RN,RO,RR,SC,SE,TO"
cURL := SoapURLNFe( "SVRS", cAmbiente, nWsServico )
CASE cUf $ "MA,PA,PI"
cURL := SoapUrlNFe( "SVAN", cAmbiente, nWsServico )
ENDCASE
RETURN cUrl
Acho que simplificou um pouco.
E no caso da NFConsumidor, onde tem UF que pode usar mesmo endereço de NFE:
E não estiver na lista, pesquisa o endereço de NFE.
{ "SVRS", WS_AMBIENTE_HOMOLOGACAO, WS_NFE_RETAUTORIZACAO, "https://nfce-homologacao.svrs.rs.gov.br/ws/NfeRetAutorizacao/NFeRetAutorizacao.asmx" }, ;
{ "SVRS", WS_AMBIENTE_HOMOLOGACAO, WS_NFE_STATUSSERVICO, "https://nfce-homologacao.svrs.rs.gov.br/ws/NfeStatusServico/NfeStatusServico2.asmx" } }
nPos := AScan( aList, { | e | cUF == e[ 1 ] .AND. cAmbiente == e[ 3 ] .AND. nWsServico == e[ 4 ] } )
cUrl := iif( nPos == 0, "", aList[ nPos, 4 ] )
IF Empty( cUrl )
cUrl := SoapUrlNFe( cUF, cAmbiente, nWsServico )
ENDIF
RETURN cUrl
Inicialmente tinha colocado a versão no array, mas depois criei rotina própria pra NFE 4.00
Com certeza é só PRËVIA da 4.00, NÃO EXISTE como testar ainda.
STATIC FUNCTION SoapUrlNfe4( cUF, cAmbiente, nWsServico )
LOCAL cUrl := ""