function 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
#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
"{'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'}"
local respuesta := {=>}
....
...
respuesta := hb_jsonDecode( response)
?respuesta //29
respuesta := hb_jsonDecode( StrTran( response, '"', "" ) ) // Chr( 34 )
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
response:=ohttp:responseText
aHasRes := hash()
hb_jsondecode(response ,@aHasRes) //Parse JSON to hash
elemento := aHasRes["error"]
?valtype(elemento)
//----------------------------------------------------------------------------//
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
cwanderlei_cardoso wrote:como faço para enviar um arquivo .gz no lugar do arquivo json?
Return to FiveWin para Harbour/xHarbour
Users browsing this forum: No registered users and 37 guests