Esimados Colegas,
En esta oportunidad me encuentro trabajando con este webservice y no logro obtener una respuesta correcta, recibo error de seguridad. Cuento con un ejemplo realizado en el lenguaje .NET que utilizo como referencia. Quería consultarles si alguno ha trabajado con ese idioma y me da una mano para poder o bien migrar la función a Fivewin o sino generar el ejecutable con esa función en .NET para que pueda hacer una llamada desde mi aplicación en Fivewin con parámetros.
También utilizo la aplicación SOAP UI para realizar pruebas y con la cual obtengo una buena respuesta del webservice, debajo el ejemplo de la cadena enviada y la rta desde esa aplicación.
Webservice : https://homologacion.farmalink.com.ar/V ... reSvc?wsdl
MAIN()
buscarRespuesta(sXmlIda,'P',100000,'A','Farmalink')
RETU .T.
/////////////////////////////////////////////////////////////////////////////////////////
[b]Public Function buscarRespuesta(ByVal sXmlIda As String, ByVal sTipo As String, ByVal nIdTran As Long,
ByVal sTipoVal As String, ByVal sRootSwitch As String) As String[/b]
''sXmlIda= Xml a Enviar con el formato completo segun el Switch
''sTipo= Tipo de Servidor Homologacion / Produccion
''nIdTran= Nro de Transaccion
''sTipoVal= Autorizacion Consulta etc.
''sRootSwitch= Imed o Farmalink
Dim dDoc As New XmlDocument()
Dim dDocXmlLectura As New XmlDocument
Dim url As String
Dim sPathTmp As String
Dim fsSoap As StreamWriter
Dim buscarRespuestaError As String
Dim sArchivoRecibido As String
buscarRespuestaError = ""
buscarRespuesta = ""
sArchivoRecibido = ""
Try
dDoc = New Xml.XmlDocument
dDoc.LoadXml(sXmlIda)
Select Case Trim(sTipoVal)
Case "A"
sArchivoEnviado = sCarpeta & "\Temp\Imed_Ida_Aut_" & nIdTran & ".xml"
dDoc.Save(sArchivoEnviado)
Case "AN"
sArchivoEnviado = sCarpeta & "\Temp\Imed_Ida_Can_" & nIdTran & ".xml"
dDoc.Save(sArchivoEnviado)
Case "C"
sArchivoEnviado = sCarpeta & "\Temp\Imed_Ida_Con_" & nIdTran & ".xml"
dDoc.Save(sArchivoEnviado)
Case "D"
sArchivoEnviado = sCarpeta & "\Temp\Imed_Ida_Decl_" & nIdTran & ".xml"
dDoc.Save(sArchivoEnviado)
Case "R"
sArchivoEnviado = sCarpeta & "\Temp\Imed_Ida_Rec_" & nIdTran & ".xml"
dDoc.Save(sArchivoEnviado)
Case "CR"
sArchivoEnviado = sCarpeta & "\Temp\Imed_Ida_CR_" & nIdTran & ".xml"
dDoc.Save(sArchivoEnviado)
End Select
dDoc = Nothing
If sTipoVal = "RV" Then
sPathTmp = sCarpeta & "\Temp\Imed_" & nIdTran & "_Tmp_Rva.xml"
sArchivoRespuesta = Application.StartupPath & "\Temp\Imed_Rva_Rpta_" & nIdTransaccion & ".xml"
Else
sPathTmp = sCarpeta & "\Temp\Imed_" & nIdTran & "_Tmp_Rta.xml"
End If
Dim response As String
Dim data As String = sMensaje
url = ""
Select Case sRootSwitch
Case "Farmalink"
Select Case sTipo
Case "P"
url = "https://servicios.farmalink.com.ar/VentaSecureSvc"
End Select
End Select
Dim myReq As HttpWebRequest = WebRequest.Create(url)
Dim proxy As IWebProxy = CType(myReq.Proxy, IWebProxy)
Dim proxyaddress As String
Dim myProxy As New WebProxy()
Dim encoding As New ASCIIEncoding
Dim buffer() As Byte = encoding.GetBytes(sXmlIda)
myReq.AllowWriteStreamBuffering = False
myReq.Method = "POST"
myReq.ContentType = "text/xml; charset=UTF-8"
myReq.ContentLength = buffer.Length
Select Case sRootSwitch
Case "Farmalink"
Select Case sTipoVal
Case "R"
''Consulta Receta
myReq.Headers.Add("SOAPAction", "http://farmalink.com.ar/applicationService/V1/DatosAdicionalesRecetaVentaSecureOutAppSvc")
Case "A"
''Autorizacion - OK
myReq.Headers.Add("SOAPAction", "http://farmalink.com.ar/applicationService/V1/AutorizacionRecetaVentaSecureOutAppSvc")
Case "C"
''Consulta - Error
myReq.Headers.Add("SOAPAction", "http://farmalink.com.ar/applicationService/V1/ConsultaRecetaVentaSecureOutAppSvc")
Case "AN"
''Cancelacion'' - Error
myReq.Headers.Add("SOAPAction", "http://farmalink.com.ar/applicationService/V1/CancelacionRecetaVentaSecureOutAppSvc")
Case "RV"
''Reversa - OK
myReq.Headers.Add("SOAPAction", "http://farmalink.com.ar/applicationService/V1/ReversaRecetaVentaSecureOutAppSvc")
Case "D"
''Dispensa
myReq.Headers.Add("SOAPAction", "http://farmalink.com.ar/applicationService/V1/DeclaracionRecetaVentaSecureOutAppSvc")
End Select
End Select
proxyaddress = proxy.GetProxy(myReq.RequestUri).ToString
Dim post As Stream = myReq.GetRequestStream
post.Write(buffer, 0, buffer.Length)
Dim myResponse As HttpWebResponse = myReq.GetResponse
Dim responsedata As Stream = myResponse.GetResponseStream
Dim responsereader As New StreamReader(responsedata)
response = responsereader.ReadToEnd
fsSoap = File.AppendText(sPathTmp)
fsSoap.Write(response)
fsSoap.Flush()
fsSoap.Close()
dDocXmlLectura.Load(sPathTmp)
buscarRespuesta = ""
sIdTransaccionControl = ""
Select Case sSwitchRoot
Case "Farmalink"
Try
Dim nodos As XmlNodeList
nodos = Nothing
Select Case sTipoVal
Case "CR"
Case "R"
''Consulta Receta
nodos = dDocXmlLectura.GetElementsByTagName("dat:datosAdicionalesRecetaVentaRq")
Case "A"
''Autorizacion
nodos = dDocXmlLectura.GetElementsByTagName("aut:payload")
Case "C"
''Consulta
nodos = dDocXmlLectura.GetElementsByTagName("con:payload")
Case "AN"
''Cancelacion''
nodos = dDocXmlLectura.GetElementsByTagName("can:payload")
Case "RV"
''Reversa
nodos = dDocXmlLectura.GetElementsByTagName("rev:payload")
Case "D"
''Dispensa
nodos = dDocXmlLectura.GetElementsByTagName("dec:declaracionRecetaVentaRq")
End Select
Dim i As Integer
For i = 0 To nodos.Count - 1
buscarRespuesta = nodos(i).InnerXml
Next i
Catch ex As Exception
End Try
Try
Dim nodos_error_transaccion As XmlNodeList
nodos_error_transaccion = Nothing
''Error''
Select Case sTipoVal
Case "CR"
Case "R"
''Consulta Receta
If Trim(buscarRespuesta) <> "" Then
nodos_error_transaccion = dDocXmlLectura.GetElementsByTagName("")
Else
nodos_error_transaccion = dDocXmlLectura.GetElementsByTagName("ns19:infoCabeceraRs")
End If
Case "A"
''Autorizacion
If Trim(buscarRespuesta) <> "" Then
nodos_error_transaccion = dDocXmlLectura.GetElementsByTagName("aut:infoCabeceraRs")
Else
nodos_error_transaccion = dDocXmlLectura.GetElementsByTagName("ns19:infoCabeceraRs")
End If
Case "C"
If Trim(buscarRespuesta) <> "" Then
nodos_error_transaccion = dDocXmlLectura.GetElementsByTagName("con:infoCabeceraRs")
Else
nodos_error_transaccion = dDocXmlLectura.GetElementsByTagName("ns19:infoCabeceraRs")
End If
Case "AN"
''Cancelacion''
If Trim(buscarRespuesta) <> "" Then
nodos_error_transaccion = dDocXmlLectura.GetElementsByTagName("can:infoCabeceraRs")
Else
nodos_error_transaccion = dDocXmlLectura.GetElementsByTagName("ns19:infoCabeceraRs")
End If
Case "RV"
''Reversa - OK
If Trim(buscarRespuesta) <> "" Then
nodos_error_transaccion = dDocXmlLectura.GetElementsByTagName("rev:infoCabeceraRs")
Else
nodos_error_transaccion = dDocXmlLectura.GetElementsByTagName("ns19:infoCabeceraRs")
End If
Case "D"
''Dispensa
If Trim(buscarRespuesta) <> "" Then
nodos_error_transaccion = dDocXmlLectura.GetElementsByTagName("dec:infoCabeceraRs")
Else
nodos_error_transaccion = dDocXmlLectura.GetElementsByTagName("ns19:infoCabeceraRs")
End If
End Select
Dim i_error_transaccion As Integer
For i_error_transaccion = 0 To nodos_error_transaccion.Count - 1
sIdTransaccionControl = nodos_error_transaccion(i_error_transaccion).LastChild.InnerText
Next i_error_transaccion
Catch ex As Exception
End Try
buscarRespuestaError = ""
Try
''Error
Dim nodos_error As XmlNodeList = dDocXmlLectura.GetElementsByTagName("ns19:payload")
Dim i_error As Integer
For i_error = 0 To nodos_error.Count - 1
buscarRespuestaError = nodos_error(i_error).InnerXml
Next i_error
Catch ex As Exception
End Try
Case "Imed"
Try
Dim nodos As XmlNodeList
nodos = Nothing
Dim i As Integer
For i = 0 To nodos.Count - 1
buscarRespuesta = nodos(i).InnerText
Next i
Catch ex As Exception
End Try
buscarRespuestaError = ""
Try
''Error
Dim nodos_error As XmlNodeList = dDocXmlLectura.GetElementsByTagName("AutorizarResult")
Dim i_error As Integer
For i_error = 0 To nodos_error.Count - 1
buscarRespuestaError = nodos_error(i_error).InnerXml
Next i_error
Catch ex As Exception
End Try
End Select
If Trim(buscarRespuesta) <> "" Then
Dim xDoxRta As New XmlDocument
Dim xRtaRta As Boolean = False
Do Until xRtaRta = True
Try
xDoxRta.LoadXml(buscarRespuesta)
xRtaRta = True
Catch ex As Exception
xRtaRta = False
End Try
Application.DoEvents()
Loop
xDoxRta = Nothing
fsSoap = File.AppendText(sArchivoRespuesta)
fsSoap.Write(buscarRespuesta)
fsSoap.Flush()
fsSoap.Close()
End If
If sSwitchRoot = "Farmalink" Then
If Trim(buscarRespuestaError) <> "" Then
Dim xDoxRta As New XmlDocument
Dim xRtaRta As Boolean = False
Do Until xRtaRta = True
Try
xDoxRta.LoadXml(buscarRespuestaError)
xRtaRta = True
Catch ex As Exception
xRtaRta = False
End Try
Application.DoEvents()
Loop
xDoxRta = Nothing
fsSoap = File.AppendText(sArchivoRespuesta)
fsSoap.Write(buscarRespuestaError)
fsSoap.Flush()
fsSoap.Close()
''nCodigoRespuestaValidaXml = -1
buscarRespuesta = buscarRespuestaError
End If
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Function
Desde ya muchas gracias, si alguno tiene experiencia usando webservices y soapui no dude en contactarse.
Saludos a todos Mariano