Webservice de .NET a Fivewin

Webservice de .NET a Fivewin

Postby mterraz » Wed Jul 12, 2023 4:37 pm

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
Last edited by mterraz on Wed Jul 19, 2023 10:45 pm, edited 3 times in total.
mterraz
 
Posts: 54
Joined: Mon Jun 10, 2013 1:21 pm

Re: Webservice de .NET a Fivewin

Postby Antonio Linares » Thu Jul 13, 2023 5:03 am

Estimado Mariano,

Puedes mostrar el código de la funcion buscarRespuesta() convertida a Harbour ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42122
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Webservice de .NET a Fivewin

Postby mterraz » Wed Nov 22, 2023 5:58 pm

Buenas tardes colegas,
Después de analizar los resultados de las distintas pruebas pude hacerlo funcionar correctamente, el problema estaba en el formato del archivo XML que generaba utilizando la cláusula FORMATED al momento de la definición del objeto xml desde mi aplicación.

Así que bueno muchas gracias por su ayuda y contribuciones siempre fuente inagotable de inspiración.
Saludos a todos Mariano.
mterraz
 
Posts: 54
Joined: Mon Jun 10, 2013 1:21 pm


Return to FiveWin for Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 22 guests