Depois de muito tempo gerando o XML e usando o próprio site do SNGPC para enviar meus arquivos, decidi que já era hora de enviar esses arquivos do meu sistema.
Criei os tres serviços oficiais do SNGPC ( validar usuário, enviar arquivo XML e testar arquivo enviado ) mais a importação do inventário direto da ANVISA.
Essa primeira rotina, valida um email/senha para ver se esta cadastrado no SNGPC da ANVISA. No código estão os endereços de homologação e produção.
//
// WebService com xHarbour
//
// Nesse exemplo estamos testando se o email/senha do usuario
// esta cadastrado no SNGPC da ANVISA.
//
// Existem ainda mais 2 servicos :
//
// a) enviar arquivo XML.
// b) verificar se arquivo XML enviado foi validado.
//
// Manoel Angeiras
//
#define CR_LF chr(13) + chr(10)
***************
FUNCTION MAIN()
***************
if !InternetOK()
Alert("Conexao com a internet falhou !")
else
Alert("Conexao OK")
endif
//
// Abertura das funcoes para WebService do xHarbour
//
try
doc := CreateObject( "MSXML2.DOMDocument" )
catch
try
doc := CreateObject( "MSXML2.DOMDocument" )
catch
Alert("Erro na criacao do objeto MSXML2.DOMDocument : " + Ole2TxtError())
return NIL
end
end
try
http := CreateObject( "MSXML2.XMLHTTP" )
catch
try
http := CreateObject( "MSXML2.XMLHTTP" )
catch
Alert("Erro na criacao do objeto MSXML2.XMLHTTP : " + Ole2TxtError())
end
end
//
// Criar o XML request
//
cXml := ""
cXml += '<?xml version="1.0" encoding="utf-8"?>' + CR_LF
cXml += '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/">' + CR_LF
cXml += ' <soapenv:Header/>' + CR_LF
cXml += ' <soapenv:Body>' + CR_LF
cXml += ' <tem:ValidarUsuario>' + CR_LF
cXml += ' <tem:Email>seu_email_aqui</tem:Email>' + CR_LF // SEU EMAIL AQUI
cXml += ' <tem:Senha>sua_senha_aqui</tem:Senha>' + CR_LF // SUA SENHA AQUI
cXml += ' </tem:ValidarUsuario>' + CR_LF
cXml += ' </soapenv:Body> ' + CR_LF
cXml += '</soapenv:Envelope>' + CR_LF
//
// ENDERECO DE HOMOLOGACAO
//
http:Open( "POST", "http://homologacao.anvisa.gov.br/sngpc/webservice/sngpc.asmx?WSDL HTTP/1.1", .F. )
http:SetRequestHeader( "Content-Type" , "text/xml;charset=UTF-8" )
http:SetRequestHeader( "SOAPAction" , "http://tempuri.org/ValidarUsuario" )
http:SetRequestHeader( "Host" , "homologacao.anvisa.gov.br" )
//
// ENDERECO DE PRODUCAO
//
// http:Open( "POST", "http://sngpc.anvisa.gov.br/webservice/sngpc.asmx?WSDL HTTP/1.1", .F. )
// http:SetRequestHeader( "Content-Type" , "text/xml;charset=UTF-8" )
// http:SetRequestHeader( "SOAPAction" , "http://tempuri.org/ConsultaDadosArquivoSNGPC" )
// http:SetRequestHeader( "Host" , "sngpc.anvisa.gov.br" )
Alert("Carrega o request...")
doc:LoadXML( cXml ) // Carrega o request de string
Alert("Envia o xml...")
http:send( doc:xml ) // Envia o request
Alert("Ler a resposta...")
response := http:responseText // Recebe a resposta
Alert("Apresentando a resposta")
oXmlDoc := TXmlDocument():new()
oXMlDoc:read( response )
oXmlNode := oXmlDoc:findFirst( "ValidarUsuarioResult" )
Alert(oXmlNode:cName + " = " + oXmlNode:cData )
RETURN NIL
*********************
FUNCTION InternetOK()
*********************
local aHosts, cName, cAddress := "www.google.com.br"
InetInit()
aHosts := InetGetHosts( cAddress )
if aHosts == NIL .or. len(aHosts) == 0
InetCleanup()
return .F.
endif
InetCleanup()
RETURN .T.
Se alguem quiser os serviços de enviar XML e testar arquivo, posso publicar aqui também.
[]s
Angeiras