Factura Electrónica


Solicitud
LOCAL loHttp, loUrl, loData, loResponse

* Deben cambiar los datos de "params" por los que correspondan. 
* Esta request de ejemplo incluye todos posibles valores para 
* llamar al metodo FECAESolicitar, puede que algun valor sea opcional.
LOCAL loDataObject
loDataObject = CREATEOBJECT("JSONObject")
    loDataObject.set("environment", "prod")
    loDataObject.set("method", "FECAESolicitar")
    loDataObject.set("wsid", "wsfe")
    LOCAL params
    params = CREATEOBJECT("JSONObject")
    loDataObject.set("params", params)
        LOCAL Auth
        Auth = CREATEOBJECT("JSONObject")
        params.set("Auth", Auth)
            Auth.set("Token", "string")
            Auth.set("Sign", "string")
            Auth.set("Cuit", 1)
        LOCAL FeCAEReq
        FeCAEReq = CREATEOBJECT("JSONObject")
        params.set("FeCAEReq", FeCAEReq)
            LOCAL FeCabReq
            FeCabReq = CREATEOBJECT("JSONObject")
            FeCAEReq.set("FeCabReq", FeCabReq)
                FeCabReq.set("CantReg", 1)
                FeCabReq.set("PtoVta", 1)
                FeCabReq.set("CbteTipo", 1)
            LOCAL FeDetReq
            FeDetReq = CREATEOBJECT("JSONObject")
            FeCAEReq.set("FeDetReq", FeDetReq)
                LOCAL FECAEDetRequest
                FECAEDetRequest = CREATEOBJECT("JSONArray")
                FeDetReq.set("FECAEDetRequest", FECAEDetRequest)
                    LOCAL FECAEDetRequest0
                    FECAEDetRequest0 = CREATEOBJECT("JSONObject")
                    FECAEDetRequest.add(FECAEDetRequest0)
                        FECAEDetRequest0.set("Concepto", 1)
                        FECAEDetRequest0.set("DocTipo", 1)
                        FECAEDetRequest0.set("DocNro", 1)
                        FECAEDetRequest0.set("CbteDesde", 1)
                        FECAEDetRequest0.set("CbteHasta", 1)
                        FECAEDetRequest0.set("CbteFch", "string")
                        FECAEDetRequest0.set("ImpTotal", 1.5)
                        FECAEDetRequest0.set("ImpTotConc", 1.5)
                        FECAEDetRequest0.set("ImpNeto", 1.5)
                        FECAEDetRequest0.set("ImpOpEx", 1.5)
                        FECAEDetRequest0.set("ImpTrib", 1.5)
                        FECAEDetRequest0.set("ImpIVA", 1.5)
                        FECAEDetRequest0.set("FchServDesde", "string")
                        FECAEDetRequest0.set("FchServHasta", "string")
                        FECAEDetRequest0.set("FchVtoPago", "string")
                        FECAEDetRequest0.set("MonId", "string")
                        FECAEDetRequest0.set("MonCotiz", 1.5)
                        FECAEDetRequest0.set("CanMisMonExt", "string")
                        FECAEDetRequest0.set("CondicionIVAReceptorId", 1)
                        LOCAL CbtesAsoc
                        CbtesAsoc = CREATEOBJECT("JSONObject")
                        FECAEDetRequest0.set("CbtesAsoc", CbtesAsoc)
                            LOCAL CbteAsoc
                            CbteAsoc = CREATEOBJECT("JSONArray")
                            CbtesAsoc.set("CbteAsoc", CbteAsoc)
                                LOCAL CbteAsoc0
                                CbteAsoc0 = CREATEOBJECT("JSONObject")
                                CbteAsoc.add(CbteAsoc0)
                                    CbteAsoc0.set("Tipo", 1)
                                    CbteAsoc0.set("PtoVta", 1)
                                    CbteAsoc0.set("Nro", 1)
                                    CbteAsoc0.set("Cuit", "string")
                                    CbteAsoc0.set("CbteFch", "string")
                        LOCAL Tributos
                        Tributos = CREATEOBJECT("JSONObject")
                        FECAEDetRequest0.set("Tributos", Tributos)
                            LOCAL Tributo
                            Tributo = CREATEOBJECT("JSONArray")
                            Tributos.set("Tributo", Tributo)
                                LOCAL Tributo0
                                Tributo0 = CREATEOBJECT("JSONObject")
                                Tributo.add(Tributo0)
                                    Tributo0.set("Id", 1)
                                    Tributo0.set("Desc", "string")
                                    Tributo0.set("BaseImp", 1.5)
                                    Tributo0.set("Alic", 1.5)
                                    Tributo0.set("Importe", 1.5)
                        LOCAL Iva
                        Iva = CREATEOBJECT("JSONObject")
                        FECAEDetRequest0.set("Iva", Iva)
                            LOCAL AlicIva
                            AlicIva = CREATEOBJECT("JSONArray")
                            Iva.set("AlicIva", AlicIva)
                                LOCAL AlicIva0
                                AlicIva0 = CREATEOBJECT("JSONObject")
                                AlicIva.add(AlicIva0)
                                    AlicIva0.set("Id", 1)
                                    AlicIva0.set("BaseImp", 1.5)
                                    AlicIva0.set("Importe", 1.5)
                        LOCAL Opcionales
                        Opcionales = CREATEOBJECT("JSONObject")
                        FECAEDetRequest0.set("Opcionales", Opcionales)
                            LOCAL Opcional
                            Opcional = CREATEOBJECT("JSONArray")
                            Opcionales.set("Opcional", Opcional)
                                LOCAL Opcional0
                                Opcional0 = CREATEOBJECT("JSONObject")
                                Opcional.add(Opcional0)
                                    Opcional0.set("Id", "string")
                                    Opcional0.set("Valor", "string")
                        LOCAL Compradores
                        Compradores = CREATEOBJECT("JSONObject")
                        FECAEDetRequest0.set("Compradores", Compradores)
                            LOCAL Comprador
                            Comprador = CREATEOBJECT("JSONArray")
                            Compradores.set("Comprador", Comprador)
                                LOCAL Comprador0
                                Comprador0 = CREATEOBJECT("JSONObject")
                                Comprador.add(Comprador0)
                                    Comprador0.set("DocTipo", 1)
                                    Comprador0.set("DocNro", 1)
                                    Comprador0.set("Porcentaje", 1.5)
                        LOCAL PeriodoAsoc
                        PeriodoAsoc = CREATEOBJECT("JSONObject")
                        FECAEDetRequest0.set("PeriodoAsoc", PeriodoAsoc)
                            PeriodoAsoc.set("FchDesde", "string")
                            PeriodoAsoc.set("FchHasta", "string")
                        LOCAL Actividades
                        Actividades = CREATEOBJECT("JSONObject")
                        FECAEDetRequest0.set("Actividades", Actividades)
                            LOCAL Actividad
                            Actividad = CREATEOBJECT("JSONArray")
                            Actividades.set("Actividad", Actividad)
                                LOCAL Actividad0
                                Actividad0 = CREATEOBJECT("JSONObject")
                                Actividad.add(Actividad0)
                                    Actividad0.set("Id", 1)

* Convertimos el objeto en JSON
loData = json_encode(loDataObject)

* Creamos un cliente HTTP para llamar a la API
loHttp = CREATEOBJECT("Msxml2.XMLHTTP")
loUrl = "https://app.afipsdk.com/api/v1/afip/requests"

* Realizamos la llamada a la API
loHttp.Open("POST", loUrl, .F.)
loHttp.setRequestHeader("Content-Type", "application/json")

* Reemplazar con tu access_token obtenido de https://app.afipsdk.com
LOCAL accessToken
accessToken = "TU_TOKEN_AQUI"
loHttp.setRequestHeader("Authorization", "Bearer " + accessToken)

loHttp.Send(loData)

* En caso de error lo mostramos por pantalla
IF loHttp.Status <> 200
    ? STR(loHttp.responseText)
    RETURN
ENDIF

* Convertimos la respuesta en un objeto
loResponse = json_decode(loHttp.responseText)

* Mostramos la respuesta por pantalla
? loHttp.responseText
Respuesta
{
    "FECAESolicitarResult": {
        "FeCabResp": {
            "Cuit": "long",
            "PtoVta": "integer",
            "CbteTipo": "integer",
            "FchProceso": "string",
            "CantReg": "integer",
            "Resultado": "string",
            "Reproceso": "string"
        },
        "FeDetResp": {
            "FECAEDetResponse": [
                {
                    "Concepto": "integer",
                    "DocTipo": "integer",
                    "DocNro": "long",
                    "CbteDesde": "long",
                    "CbteHasta": "long",
                    "CbteFch": "string",
                    "Resultado": "string",
                    "Observaciones": {
                        "Obs": [
                            {
                                "Code": "integer",
                                "Msg": "string"
                            }
                        ]
                    },
                    "CAE": "string",
                    "CAEFchVto": "string"
                }
            ]
        },
        "Events": {
            "Evt": [
                {
                    "Code": "integer",
                    "Msg": "string"
                }
            ]
        },
        "Errors": {
            "Err": [
                {
                    "Code": "integer",
                    "Msg": "string"
                }
            ]
        }
    }
}