FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour Webservice de .NET a Fivewin
Posts: 74
Joined: Mon Jun 10, 2013 01:21 PM
Webservice de .NET a Fivewin
Posted: Wed Jul 12, 2023 04: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/VentaSecureSvc?wsdl

MAIN()

buscarRespuesta(sXmlIda,'P',100000,'A','Farmalink')

RETU .T.

/////////////////////////////////////////////////////////////////////////////////////////
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


''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
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Webservice de .NET a Fivewin
Posted: Thu Jul 13, 2023 05:03 AM

Estimado Mariano,

Puedes mostrar el c贸digo de la funcion buscarRespuesta() convertida a Harbour ?

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 74
Joined: Mon Jun 10, 2013 01:21 PM
Re: Webservice de .NET a Fivewin
Posted: Wed Nov 22, 2023 05: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.

Continue the discussion