Crear Archivo Json y Enviarlo vía POST
Crear Archivo Json y Enviarlo vía POST
Buenos días para todos,
Como dice el encabezado, requiero crear un archivo JSON y luego enviarlo a una url vía POST. Estuve buscando en el foro, pero no encuentro un ejemplo claro sobre como hacerlo.
Por ahí encontré que existen unas funciones de harbour que permiten hacer lo que necesito, el problema es que yo uso xharbour. Alguien me puede orientar en este tema? Se puede hacer lo que requiero con xharbour?.
De antemano muchas gracias.
Como dice el encabezado, requiero crear un archivo JSON y luego enviarlo a una url vía POST. Estuve buscando en el foro, pero no encuentro un ejemplo claro sobre como hacerlo.
Por ahí encontré que existen unas funciones de harbour que permiten hacer lo que necesito, el problema es que yo uso xharbour. Alguien me puede orientar en este tema? Se puede hacer lo que requiero con xharbour?.
De antemano muchas gracias.
Saludos
LEANDRO ALFONSO
SISTEMAS LYMA - BASE
Bogotá (Colombia)
[ FWH 19.09 ] [ xHarbour 1.2.3 Intl. (SimpLex) (Build 20190613) ] [ Embarcadero C++ 7.30 for Win32 ]
LEANDRO ALFONSO
SISTEMAS LYMA - BASE
Bogotá (Colombia)
[ FWH 19.09 ] [ xHarbour 1.2.3 Intl. (SimpLex) (Build 20190613) ] [ Embarcadero C++ 7.30 for Win32 ]
Re: Crear Archivo Json y Enviarlo vía POST
João Santos - São Paulo - Brasil
-
- Posts: 179
- Joined: Sun Jan 31, 2010 3:30 pm
- Location: Bucaramanga - Colombia
Re: Crear Archivo Json y Enviarlo vía POST
Buena tarde
JOHNSON RUSSI TELLOfunction envia_json(user,pass,cJsoRes,vDatCar)
local ahashImpuestos := ahashEncabezado := hash()
local mImpuestos := {},doc ,Ctext ,cJson, response
local cBas64 := hb_base64encode(user+":"+pass,len(user+":"+pass))
try
// ejemplo reducido de json
ahashImpuestos["Nvimp_desc"] := ALLTRIM(vDatCar[1])
ahashImpuestos["Nvimp_cdia"] := ALLTRIM(vDatCar[2])
ahashImpuestos["Nvimp_porc"] := ALLTRIM(vDatCar[3])
ahashImpuestos["Nvimp_valo"] := ALLTRIM(vDatCar[4])
ahashImpuestos["Nvimp_base"] := ALLTRIM(vDatCar[5])
ahashImpuestos["Nvimp_oper"] := "S"
AADD(mImpuestos,ahashImpuestos)
ahashEncabezado["lImpuestos"] := mImpuestos
cJson := hb_jsonEncode(ahashEncabezado,.T.)
doc := CreateObject( "MSXML2.DOMDocument" )
ohttp := CreateObject("MSXML2.XMLHTTP" )
ohttp:Open( "POST" ," http://proveedor.com.co/api/facfacturas",.F.)
oHttp:SetRequestHeader("Host", "localhost")
oHttp:SetRequestHeader("cache-control", "no-cache")
oHttp:SetRequestHeader("Connection", "Keep-Alive")
ohttp:SetRequestHeader("content-type", "application/json" )
ohttp:SetRequestHeader("Authorization", "Basic "+cBas64 )
Ctext:= cJson
TRY
ohttp:Send( cText )
CATCH
alerta("No Se Pudo Enviar Documento JSON","Intente Nuevamente")
END
response := ohttp:responseText
//Memowrit("RESPUESTA.TXT",Response)
cJsoRes := response
return
Re: Crear Archivo Json y Enviarlo vía POST
Buenas tardes
JOHNSON, muchas gracias, el dato que me diste me sirvió de base para avanzar. Al final e investigando un poco el foro, llegue a esto:
Ahora me surge otra duda,
El WS en la variable response me devuelve una cadena de texto asi:
Pero lo que necesito es convertirla en un objeto JSON, intente de la siguiente manera pero me devuelve un número
De antemano gracias
JOHNSON, muchas gracias, el dato que me diste me sirvió de base para avanzar. Al final e investigando un poco el foro, llegue a esto:
Code: Select all
#include "fivewin.ch"
function Main()
local user := "usuario-codificado"
local pass := "clave-codificada"
local cBas64 := hb_base64encode(user+":"+pass,len(user+":"+pass))
local encabezado := {=>}
local sucursal := {=>}
local tercero := {=>}
local imp_1 := {=>}
local imp_2 := {=>}
local detal_1 := {=>}
local detal_2 := {=>}
local detal_3 := {=>}
local impuestos := {}
local detalle := {}
local documento := {=>}
local final := {=>}
local enviar
local respuesta
//Encabezado factura
encabezado["codmoneda"] = "COP"
encabezado["comentarios"] = ""
encabezado["emisor"] = "830106032"
encabezado["factortrm"] = 0
encabezado["fecha"] = "2019-05-08"
encabezado["fvence"] = "2019-05-08"
encabezado["idsuc"] = 1
encabezado["idvendedor"] = 0
encabezado["iva"] = 19000
encabezado["nit"] = 123456789
encabezado["numero"] = 993005011
encabezado["ordencompra"] = ""
encabezado["prefijo"] = "FVE"
encabezado["subtotal"] = 200000
encabezado["sucursal"] = 0
encabezado["total"] = 219000
encabezado["usuario"] = ""
encabezado["totalDet"] = 3
encabezado["totalImp"] = 2
//Datos empresa
sucursal["ciudad"] = "BOGOTA D.C."
sucursal["codcliente"] = ""
sucursal["departamento"] = "BOGOTA D.C."
sucursal["direccion1"] = "CALLE 111 # 23 - 55"
sucursal["dpto"] = "11"
sucursal["email"] = ""
sucursal["emailfe"] = "leandroalfonso111@hotmail.com"
sucursal["idsuc"] = 0
sucursal["idvendedor"] = 0
sucursal["movil"] = "1245678"
sucursal["mun"] = "001"
sucursal["razonsocial"] = "LEANDRO AREVALO"
sucursal["telefono1"] = "2100518"
sucursal["telefono2"] = ""
//Datos tercero o cliente
tercero["apl2"] = ""
tercero["apli1"] = "AREVALO"
tercero["comentarios"] = ""
tercero["dv"] = ""
tercero["identificacion"] = 123456789
tercero["idtipoempresa"] = 4
tercero["nom1"] = "LEANDRO"
tercero["nom2"] = ""
tercero["razonsocial"] = "AREVALO"
tercero["tdoc"] = 13
tercero["tipopersona"] = "N"
//impuestos en variables
imp_1["base_calculo"] = 100000
imp_1["porciva"] = 19
imp_1["valor"] = 19000
imp_2["base_calculo"] = 100000
imp_2["porciva"] = 0
imp_2["valor"] = 0
AADD(impuestos,imp_1)
AADD(impuestos,imp_2)
//Listado de articulos a facturar
//articulo 1
detal_1["adicional"] = "linea1"
detal_1["cantidad"] = 10
detal_1["idproducto"] = "01"
detal_1["idunidad"] = "Und"
detal_1["iva"] = 19000
detal_1["ivausd"] = 0
detal_1["nombreproducto"] = "Producto1"
detal_1["operacion"] = "SA"
detal_1["porcdcto"] = 0
detal_1["porciva"] = 19
detal_1["pos"] = 1
detal_1["precio"] = 10000
detal_1["preciousd"] = 0
detal_1["subtotal"] = 100000
detal_1["subtotalusd"] = 0
//articulo 2
detal_2["adicional"] = "linea2"
detal_2["cantidad"] = 1
detal_2["idproducto"] = "02"
detal_2["idunidad"] = "EA"
detal_2["iva"] = 0
detal_2["ivausd"] = 0
detal_2["nombreproducto"] = "Producto2"
detal_2["operacion"] = "SA"
detal_2["porcdcto"] = 0
detal_2["porciva"] = 0
detal_2["pos"] = 2
detal_2["precio"] = 60000
detal_2["preciousd"] = 0
detal_2["subtotal"] = 60000
detal_2["subtotalusd"] = 0
//articulo 3
detal_3["adicional"] = "linea3"
detal_3["cantidad"] = 2
detal_3["idproducto"] = "03"
detal_3["idunidad"] = "ME"
detal_3["iva"] = 0
detal_3["ivausd"] = 0
detal_3["nombreproducto"] = "Producto3"
detal_3["operacion"] = "SA"
detal_3["porcdcto"] = 0
detal_3["porciva"] = 0
detal_3["pos"] = 3
detal_3["precio"] = 20000
detal_3["preciousd"] = 0
detal_3["subtotal"] = 40000
detal_3["subtotalusd"] = 0
AADD(detalle , detal_1)
AADD(detalle , detal_2)
AADD(detalle , detal_3)
//agregamos la informacion al json documento
documento["detalle"] = detalle
documento["encabezado"] = encabezado
documento["sucursal"] = sucursal
documento["tercero"] = tercero
documento["impuesto"] = impuestos
//creamos el json con el documento final
final["documento"] = documento
enviar := hb_jsonEncode( final )
doc := CreateObject( "MSXML2.DOMDocument" )
ohttp := CreateObject( "MSXML2.XMLHTTP" )
ohttp:Open( "POST" ,"https://ws.proveedor-prueba.co/Factura/nrodocumento",.F.)
oHttp:SetRequestHeader("cache-control", "no-cache")
ohttp:SetRequestHeader("content-type", "application/json" )
ohttp:SetRequestHeader("authorization", "Basic "+cBas64 )
TRY
ohttp:Send( enviar )
CATCH
msginfo("No Se Pudo Enviar Documento JSON","Intente Nuevamente")
return .t.
END
response:=ohttp:responseText
?response
return nil
El WS en la variable response me devuelve una cadena de texto asi:
Code: Select all
"{'qrdata':'NumFac: 993005004\nFecFac: 20190508141241\nNitFac: 830106032\nDocAdq: 79760202\nValFac: 200000.00\nValIva: 0.00\nValOtroImp: 0.00\nValFacIm: 219000.00\nCUFE: e872704393ec005f7187553f34a6',
'xml':'PD94lByaWNlPjwvZmU6SW52b2ljZUxpbmU+PC9mZTpJbnZvaWNlPg==',
'clavtec':'dd85db55545bd6566f36b0fd3be9fd8555c36e',
'id':38390,
'error':'',
'cufe':'e872704393ec005f7187553f34a6'}"
Code: Select all
local respuesta := {=>}
....
...
respuesta := hb_jsonDecode( response)
?respuesta //29
Last edited by leandro on Wed May 08, 2019 11:02 pm, edited 2 times in total.
Saludos
LEANDRO ALFONSO
SISTEMAS LYMA - BASE
Bogotá (Colombia)
[ FWH 19.09 ] [ xHarbour 1.2.3 Intl. (SimpLex) (Build 20190613) ] [ Embarcadero C++ 7.30 for Win32 ]
LEANDRO ALFONSO
SISTEMAS LYMA - BASE
Bogotá (Colombia)
[ FWH 19.09 ] [ xHarbour 1.2.3 Intl. (SimpLex) (Build 20190613) ] [ Embarcadero C++ 7.30 for Win32 ]
Re: Crear Archivo Json y Enviarlo vía POST
Leandro, prueba asi
Code: Select all
respuesta := hb_jsonDecode( StrTran( response, '"', "" ) ) // Chr( 34 )
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Re: Crear Archivo Json y Enviarlo vía POST
Cristobal gracias por responder...
Pero no funciono sigue igual.
Saludos
Pero no funciono sigue igual.
Saludos
Saludos
LEANDRO ALFONSO
SISTEMAS LYMA - BASE
Bogotá (Colombia)
[ FWH 19.09 ] [ xHarbour 1.2.3 Intl. (SimpLex) (Build 20190613) ] [ Embarcadero C++ 7.30 for Win32 ]
LEANDRO ALFONSO
SISTEMAS LYMA - BASE
Bogotá (Colombia)
[ FWH 19.09 ] [ xHarbour 1.2.3 Intl. (SimpLex) (Build 20190613) ] [ Embarcadero C++ 7.30 for Win32 ]
-
- Posts: 179
- Joined: Sun Jan 31, 2010 3:30 pm
- Location: Bucaramanga - Colombia
Re: Crear Archivo Json y Enviarlo vía POST
aHasRes := hash()
hb_jsondecode(respuesta ,@aHasRes) //Parse JSON to hash
//MEMOEDIT(respuesta ) // ver estructura del json retornado
IF aHasRes["Result"] == 0
cNuCufe := aHasRes["Cufe"]
cDatoQr := "0- "+aHasRes["QrCode"]
cNorIde := aHasRes["Id"]
SET DEVICE TO SCREEN
alert("Proceso terminó con éxito. Archivo generado : ")
ELSEIF aHasRes["Result"] == 1
cDatoQr := "1- "+aHasRes["Description"]
mymen("Error. Enviando factura electrónica : "+cDatoQr)
SET DEVICE TO SCREEN
ENDIF
Re: Crear Archivo Json y Enviarlo vía POST
Excelente JOHNSON
Muchisimas gracias....
Muchisimas gracias....
Code: Select all
response:=ohttp:responseText
aHasRes := hash()
hb_jsondecode(response ,@aHasRes) //Parse JSON to hash
elemento := aHasRes["error"]
?valtype(elemento)
Saludos
LEANDRO ALFONSO
SISTEMAS LYMA - BASE
Bogotá (Colombia)
[ FWH 19.09 ] [ xHarbour 1.2.3 Intl. (SimpLex) (Build 20190613) ] [ Embarcadero C++ 7.30 for Win32 ]
LEANDRO ALFONSO
SISTEMAS LYMA - BASE
Bogotá (Colombia)
[ FWH 19.09 ] [ xHarbour 1.2.3 Intl. (SimpLex) (Build 20190613) ] [ Embarcadero C++ 7.30 for Win32 ]
-
- Posts: 3
- Joined: Mon May 20, 2019 3:49 pm
Re: Crear Archivo Json y Enviarlo vía POST
como faço para enviar um arquivo .gz no lugar do arquivo json?
Re: Crear Archivo Json y Enviarlo vía POST
se me ocurre que lo puedes convertir en base64, para luego ser enviado...
Code: Select all
//----------------------------------------------------------------------------//
function ConverBase64()
local user := "myUser"
local pass := "myPass"
local cBas64 := hb_base64encode(user+":"+pass,len(user+":"+pass))
local enviar
local respuesta
local aHasRes
local elemento
Local cText
//leemos el archivo.gz y lo convertimos base 64
fMimeEnc( "c:\archivo.gz", "c:\archivo")
//colocamos contenido en variable
cText := MemoRead( "c:\archivo" )
ohttp := CreateObject( "MSXML2.XMLHTTP" )
ohttp:Open( "POST" ,"https://myurl",.F.)
oHttp:SetRequestHeader("cache-control", "no-cache")
ohttp:SetRequestHeader("content-type", "application/json" )
ohttp:SetRequestHeader("authorization", "Basic "+cBas64 )
TRY
ohttp:Send( cText )
CATCH
msginfo("No Se Pudo Enviar archivo","Nuevamente")
return .t.
END
response:=ohttp:responseText
aHasRes := hash()
hb_jsondecode(response ,@aHasRes) //Parse JSON to hash
xBrowse(aHasRes)
return nil
Saludos
LEANDRO ALFONSO
SISTEMAS LYMA - BASE
Bogotá (Colombia)
[ FWH 19.09 ] [ xHarbour 1.2.3 Intl. (SimpLex) (Build 20190613) ] [ Embarcadero C++ 7.30 for Win32 ]
LEANDRO ALFONSO
SISTEMAS LYMA - BASE
Bogotá (Colombia)
[ FWH 19.09 ] [ xHarbour 1.2.3 Intl. (SimpLex) (Build 20190613) ] [ Embarcadero C++ 7.30 for Win32 ]