def autenticar(service="wsfe", cert=CERT, pkey=PKEY, url=""): wsaa = WSAA() tra = wsaa.CreateTRA(service) cms = wsaa.SignTRA(tra, cert, pkey) wsaa.Conectar("", url) ta = wsaa.LoginCMS(cms) return wsaa
def main(): """ Función utilizada para la ejecución del script por línea de comandos """ # Obtengo los parámetros pasados por línea de comandos args = utility.cli_parser(__version__) # Obtengo los datos de configuración try: config_data = utility.get_config_data(args) except ValueError as error: raise SystemExit(error) # Muestro las opciones de configuración via stdout if config_data['debug']: utility.print_config(config_data) # Instancio WSAA para obtener un objeto de autenticación y autorización wsaa = WSAA(config_data) # Instancio WSFE para obtener un objeto de Factura Electrónica AFIP voucher = WSFE(config_data) # Obtengo el ticket de autorización de AFIP voucher.token, voucher.sign = wsaa.get_ticket() # Obtengo los datos solicitados voucher.get_request() # Imprimo la ubicación del archivo de salida print('Respuesta AFIP en: {}'.format(voucher.output))
def main(): """ Función utilizada para la ejecución del script por línea de comandos """ # Obtengo los parámetros pasados por línea de comandos args = utility.cli_parser(__version__) # Actualizo el nombre del web service según el alcance args['web_service'] += '_a' + args['alcance'] # Obtengo los datos de configuración try: config_data = utility.get_config_data(args) except ValueError as error: raise SystemExit(error) # Muestro las opciones de configuración via stdout if config_data['debug']: utility.print_config(config_data) # Instancio WSAA para obtener un objeto de autenticación y autorización wsaa = WSAA(config_data) # Instancio WSSRPADRON para obtener un objeto de padrón AFIP census = WSSRPADRON(config_data) # Obtengo el ticket de autorización de AFIP census.token, census.sign = wsaa.get_ticket() # Obtengo los datos solicitados census.get_scope_data() # Imprimo la ubicación del archivo de salida print('Respuesta AFIP en: {}'.format(census.output))
def main(): "Función principal de pruebas (obtener CAE)" import os, time DEBUG = '--debug' in sys.argv if DEBUG: from pysimplesoap.client import __version__ as soapver print "pysimplesoap.__version__ = ", soapver wsfev1 = WSFEv1() wsfev1.LanzarExcepciones = True cache = None wsdl = "https://wswhomo.afip.gov.ar/wsfev1/service.asmx?WSDL" proxy = "" wrapper = "" #"pycurl" cacert = None #geotrust.crt" ok = wsfev1.Conectar(cache, wsdl, proxy, wrapper, cacert) if not ok: raise RuntimeError(wsfev1.Excepcion) if DEBUG: print "LOG: ", wsfev1.DebugLog() if "--dummy" in sys.argv: print wsfev1.client.help("FEDummy") wsfev1.Dummy() print "AppServerStatus", wsfev1.AppServerStatus print "DbServerStatus", wsfev1.DbServerStatus print "AuthServerStatus", wsfev1.AuthServerStatus sys.exit(0) # obteniendo el TA para pruebas from wsaa import WSAA ta = WSAA().Autenticar("wsfe", "reingart.crt", "reingart.key", debug=True) wsfev1.SetTicketAcceso(ta) wsfev1.Cuit = "20267565393" if "--prueba" in sys.argv: print wsfev1.client.help("FECAESolicitar").encode("latin1") tipo_cbte = 2 punto_vta = 4001 cbte_nro = long(wsfev1.CompUltimoAutorizado(tipo_cbte, punto_vta) or 0) fecha = datetime.datetime.now().strftime("%Y%m%d") concepto = 2 tipo_doc = 80 nro_doc = "30500010912" # CUIT BNA cbt_desde = cbte_nro + 1 cbt_hasta = cbte_nro + 1 imp_total = "122.00" imp_tot_conc = "0.00" imp_neto = "100.00" imp_iva = "21.00" imp_trib = "1.00" imp_op_ex = "0.00" fecha_cbte = fecha fecha_venc_pago = fecha # Fechas del período del servicio facturado (solo si concepto = 1?) fecha_serv_desde = fecha fecha_serv_hasta = fecha moneda_id = 'PES' moneda_ctz = '1.000' wsfev1.CrearFactura( concepto, tipo_doc, nro_doc, tipo_cbte, punto_vta, cbt_desde, cbt_hasta, imp_total, imp_tot_conc, imp_neto, imp_iva, imp_trib, imp_op_ex, fecha_cbte, fecha_venc_pago, fecha_serv_desde, fecha_serv_hasta, #-- moneda_id, moneda_ctz) if tipo_cbte not in (1, 2): tipo = 19 pto_vta = 2 nro = 1234 wsfev1.AgregarCmpAsoc(tipo, pto_vta, nro) id = 99 desc = 'Impuesto Municipal Matanza' base_imp = 100 alic = 1 importe = 1 wsfev1.AgregarTributo(id, desc, base_imp, alic, importe) id = 5 # 21% base_im = 100 importe = 21 wsfev1.AgregarIva(id, base_imp, importe) import time t0 = time.time() wsfev1.CAESolicitar() t1 = time.time() print "Resultado", wsfev1.Resultado print "Reproceso", wsfev1.Reproceso print "CAE", wsfev1.CAE print "Vencimiento", wsfev1.Vencimiento if DEBUG: print "t0", t0 print "t1", t1 print "lapso", t1 - t0 open("xmlrequest.xml", "wb").write(wsfev1.XmlRequest) open("xmlresponse.xml", "wb").write(wsfev1.XmlResponse) wsfev1.AnalizarXml("XmlResponse") p_assert_eq(wsfev1.ObtenerTagXml('CAE'), str(wsfev1.CAE)) p_assert_eq(wsfev1.ObtenerTagXml('Concepto'), '2') p_assert_eq(wsfev1.ObtenerTagXml('Obs', 0, 'Code'), "10063") print wsfev1.ObtenerTagXml('Obs', 0, 'Msg') if "--reprocesar" in sys.argv: print "reprocesando...." wsfev1.Reproceso = True wsfev1.CAESolicitar() if "--get" in sys.argv: tipo_cbte = 2 punto_vta = 4001 cbte_nro = wsfev1.CompUltimoAutorizado(tipo_cbte, punto_vta) wsfev1.CompConsultar(tipo_cbte, punto_vta, cbte_nro) print "FechaCbte = ", wsfev1.FechaCbte print "CbteNro = ", wsfev1.CbteNro print "PuntoVenta = ", wsfev1.PuntoVenta print "ImpTotal =", wsfev1.ImpTotal print "CAE = ", wsfev1.CAE print "Vencimiento = ", wsfev1.Vencimiento print "EmisionTipo = ", wsfev1.EmisionTipo wsfev1.AnalizarXml("XmlResponse") p_assert_eq(wsfev1.ObtenerTagXml('CodAutorizacion'), str(wsfev1.CAE)) p_assert_eq(wsfev1.ObtenerTagXml('CbteFch'), wsfev1.FechaCbte) p_assert_eq(wsfev1.ObtenerTagXml('MonId'), "PES") p_assert_eq(wsfev1.ObtenerTagXml('MonCotiz'), "1") p_assert_eq(wsfev1.ObtenerTagXml('DocTipo'), "80") p_assert_eq(wsfev1.ObtenerTagXml('DocNro'), "30500010912") if "--parametros" in sys.argv: import codecs, locale, traceback if sys.stdout.encoding is None: sys.stdout = codecs.getwriter(locale.getpreferredencoding())( sys.stdout, "replace") sys.stderr = codecs.getwriter(locale.getpreferredencoding())( sys.stderr, "replace") print "=== Tipos de Comprobante ===" print u'\n'.join(wsfev1.ParamGetTiposCbte()) print "=== Tipos de Concepto ===" print u'\n'.join(wsfev1.ParamGetTiposConcepto()) print "=== Tipos de Documento ===" print u'\n'.join(wsfev1.ParamGetTiposDoc()) print "=== Alicuotas de IVA ===" print u'\n'.join(wsfev1.ParamGetTiposIva()) print "=== Monedas ===" print u'\n'.join(wsfev1.ParamGetTiposMonedas()) print "=== Tipos de datos opcionales ===" print u'\n'.join(wsfev1.ParamGetTiposOpcional()) print "=== Tipos de Tributo ===" print u'\n'.join(wsfev1.ParamGetTiposTributos()) print "=== Puntos de Venta ===" print u'\n'.join(wsfev1.ParamGetPtosVenta()) if "--cotizacion" in sys.argv: print wsfev1.ParamGetCotizacion('DOL') if "--comptox" in sys.argv: print wsfev1.CompTotXRequest() if "--ptosventa" in sys.argv: print wsfev1.ParamGetPtosVenta() if "--solicitar-caea" in sys.argv: periodo = sys.argv[sys.argv.index("--solicitar-caea") + 1] orden = sys.argv[sys.argv.index("--solicitar-caea") + 2] if DEBUG: print "Solicitando CAEA para periodo %s orden %s" % (periodo, orden) caea = wsfev1.CAEASolicitar(periodo, orden) print "CAEA:", caea if wsfev1.Errores: print "Errores:" for error in wsfev1.Errores: print error if DEBUG: print "periodo:", wsfev1.Periodo print "orden:", wsfev1.Orden print "fch_vig_desde:", wsfev1.FchVigDesde print "fch_vig_hasta:", wsfev1.FchVigHasta print "fch_tope_inf:", wsfev1.FchTopeInf print "fch_proceso:", wsfev1.FchProceso if not caea: print 'Consultando CAEA' caea = wsfev1.CAEAConsultar(periodo, orden) print "CAEA:", caea if wsfev1.Errores: print "Errores:" for error in wsfev1.Errores: print error if "--sinmovimiento-caea" in sys.argv: punto_vta = sys.argv[sys.argv.index("--sinmovimiento-caea") + 1] caea = sys.argv[sys.argv.index("--sinmovimiento-caea") + 2] if DEBUG: print "Informando Punto Venta %s CAEA %s SIN MOVIMIENTO" % ( punto_vta, caea) resultado = wsfev1.CAEASinMovimientoInformar(punto_vta, caea) print "Resultado:", resultado print "fch_proceso:", wsfev1.FchProceso if wsfev1.Errores: print "Errores:" for error in wsfev1.Errores: print error
if DEBUG: print "conf_dbf", conf_dbf else: conf_dbf = {} DEBUG = '--debug' in sys.argv XML = '--xml' in sys.argv if DEBUG: print "Usando Configuración:" print "WSAA_URL:", WSAA_URL print "WSLTV_URL:", WSLTV_URL print "CACERT", CACERT print "WRAPPER", WRAPPER # obteniendo el TA from wsaa import WSAA wsaa = WSAA() ta = wsaa.Autenticar("wsltv", CERT, PRIVATEKEY, wsdl=WSAA_URL, proxy=PROXY, wrapper=WRAPPER, cacert=CACERT) if not ta: sys.exit("Imposible autenticar con WSAA: %s" % wsaa.Excepcion) # cliente soap del web service wsltv = WSLTV() wsltv.LanzarExcepciones = True wsltv.Conectar(url=WSLTV_URL, proxy=PROXY, wrapper=WRAPPER, cacert=CACERT) wsltv.SetTicketAcceso(ta) wsltv.Cuit = CUIT if '--dummy' in sys.argv: ret = wsltv.Dummy() print "AppServerStatus", wsltv.AppServerStatus
win32com.server.register.UseCommandLine(WSFEX) #elif "/Automate" in sys.argv: # # MS seems to like /automate to run the class factories. # import win32com.server.localserver # #win32com.server.localserver.main() # # start the server. # win32com.server.localserver.serve([WSFEXv1._reg_clsid_]) else: # Crear objeto interface Web Service de Factura Electrónica de Exportación wsfexv1 = WSFEXv1() # Setear token y sing de autorización (pasos previos) # obteniendo el TA para pruebas from wsaa import WSAA ta = WSAA().Autenticar("wsfex", "reingart.crt", "reingart.key") wsfexv1.SetTicketAcceso(ta) # CUIT del emisor (debe estar registrado en la AFIP) wsfexv1.Cuit = "20267565393" # Conectar al Servicio Web de Facturación (producción u homologación) if "--prod" in sys.argv: wsdl = "https://servicios1.afip.gov.ar/wsfexv1/service.asmx?WSDL" else: wsdl = "https://wswhomo.afip.gov.ar/wsfexv1/service.asmx?WSDL" cache = proxy = "" wrapper = "httplib2" cacert = open("conf/afip_ca_info.crt").read() ok = wsfexv1.Conectar(cache, wsdl, proxy, wrapper, cacert)
def main(): "Función principal de pruebas (obtener CAE)" import os, time global CONFIG_FILE DEBUG = '--debug' in sys.argv if '--constancia' in sys.argv: padron = WSSrPadronA5() SECTION = 'WS-SR-PADRON-A5' service = "ws_sr_constancia_inscripcion" else: padron = WSSrPadronA4() SECTION = 'WS-SR-PADRON-A4' service = "ws_sr_padron_a4" config = abrir_conf(CONFIG_FILE, DEBUG) if config.has_section('WSAA'): crt = config.get('WSAA', 'CERT') key = config.get('WSAA', 'PRIVATEKEY') cuit = config.get(SECTION, 'CUIT') else: crt, key = "reingart.crt", "reingart.key" cuit = "20267565393" url_wsaa = url_ws = None if config.has_option('WSAA','URL'): url_wsaa = config.get('WSAA', 'URL') if config.has_option(SECTION,'URL') and not H**O: url_ws = config.get(SECTION, 'URL') # obteniendo el TA para pruebas from wsaa import WSAA cache = "" ta = WSAA().Autenticar(service, crt, key, url_wsaa) padron.SetTicketAcceso(ta) padron.Cuit = cuit padron.Conectar(cache, url_ws, cacert="conf/afip_ca_info.crt") if "--dummy" in sys.argv: print padron.client.help("dummy") wssrpadron4.Dummy() print "AppServerStatus", wssrpadron4.AppServerStatus print "DbServerStatus", wssrpadron4.DbServerStatus print "AuthServerStatus", wssrpadron4.AuthServerStatus try: if "--prueba" in sys.argv: id_persona = "20000000516" else: id_persona = len(sys.argv)>1 and sys.argv[1] or "20267565393" if "--testing" in sys.argv: padron.LoadTestXML("tests/xml/%s_resp.xml" % service) print "Consultando AFIP online via webservice...", ok = padron.Consultar(id_persona) if DEBUG: print "Persona", padron.Persona print padron.Excepcion print 'ok' if ok else "error", padron.Excepcion print "Denominacion:", padron.denominacion print "Tipo:", padron.tipo_persona, padron.tipo_doc, padron.nro_doc print "Estado:", padron.estado print "Direccion:", padron.direccion print "Localidad:", padron.localidad print "Provincia:", padron.provincia print "Codigo Postal:", padron.cod_postal print "Impuestos:", padron.impuestos print "Actividades:", padron.actividades print "IVA", padron.imp_iva print "MT", padron.monotributo, padron.actividad_monotributo print "Empleador", padron.empleador if padron.Excepcion: print "Excepcion:", padron.Excepcion # ver padron.errores para el detalle except: raise print padron.XmlRequest print padron.XmlResponse
def main(): "Función principal de pruebas (obtener CAE)" import os, time global CONFIG_FILE DEBUG = '--debug' in sys.argv sire = WSSIREc2005() SECTION = 'WSSIREc2005' service = "sire-ws" config = abrir_conf(CONFIG_FILE, DEBUG) if config.has_section('WSAA'): crt = config.get('WSAA', 'CERT') key = config.get('WSAA', 'PRIVATEKEY') cuit = config.get(SECTION, 'CUIT') else: crt, key = "reingart.crt", "reingart.key" cuit = "20267565393" url_wsaa = url_ws = None if config.has_option('WSAA', 'URL'): url_wsaa = config.get('WSAA', 'URL') if config.has_option(SECTION, 'URL') and not H**O: url_ws = config.get(SECTION, 'URL') # obteniendo el TA para pruebas from wsaa import WSAA cache = "" ta = WSAA().Autenticar(service, crt, key, url_wsaa) sire.SetTicketAcceso(ta) sire.Cuit = cuit sire.Conectar(cache, url_ws, cacert="conf/afip_ca_info.crt") if "--dummy" in sys.argv: print sire.client.help("dummy") sire.Dummy() print "AppServerStatus", sire.AppServerStatus print "DbServerStatus", sire.DbServerStatus print "AuthServerStatus", sire.AuthServerStatus try: if "--testing" in sys.argv: sire.LoadTestXML("tests/xml/%s_resp.xml" % service) print "Consultando AFIP online via webservice...", ok = sire.Emitir( version=100, impuesto=216, regimen=831, fecha_retencion='2020-07-11T11:16:00.000-03:00', importe_retencion=2100.00, importe_base_calculo=20000.00, regimen_exclusion=False, tipo_comprobante=1, fecha_comprobante='2020-07-11T11:15:53.000-03:00', importe_comprobante=22200.00, cuit_retenido='30500010912', fecha_retencion_certificado_original= '2020-07-11T11:16:00.000-03:00', codigo_trazabilidad=None, condicion=1, # 1: Inscripto, 2: No inscriptio imposibilidad_retencion=False, motivo_no_retencion=None, porcentaje_exclusion=None, fecha_publicacion=None, numero_comprobante='00003-00008497', coe=None, coe_original=None, cae=None, motivo_emision_nota_credito=None, numero_certificado_original=None, importe_certificado_original=None, motivo_anulacion=None, ) print "CertificadoNro: ", sire.CertificadoNro print "CodigoSeguridad: ", sire.CodigoSeguridad print 'ok' if ok else "error!" if sire.Excepcion: print "Excepcion:", sire.Excepcion except: raise print sire.XmlRequest print sire.XmlResponse
def main(): "Función principal de pruebas (obtener CAE)" import os, time DEBUG = '--debug' in sys.argv # obteniendo el TA para pruebas from wsaa import WSAA ta = WSAA().Autenticar("wsct", "reingart.crt", "reingart.key") wsct = WSCT() wsct.SetTicketAcceso(ta) wsct.Cuit = "20267565393" cache = "" if "--prod" in sys.argv: wsdl = "https://serviciosjava.afip.gob.ar/wsct/CTService?wsdl" else: wsdl = WSDL wsct.Conectar(cache, wsdl, cacert="conf/afip_ca_info.crt") if "--dummy" in sys.argv: print wsct.client.help("dummy") wsct.Dummy() print "AppServerStatus", wsct.AppServerStatus print "DbServerStatus", wsct.DbServerStatus print "AuthServerStatus", wsct.AuthServerStatus if "--prueba" in sys.argv: ##print wsct.client.help("autorizarComprobante").encode("latin1") try: tipo_cbte = 195 punto_vta = 4000 cbte_nro = wsct.ConsultarUltimoComprobanteAutorizado(tipo_cbte, punto_vta) fecha = datetime.datetime.now().strftime("%Y-%m-%d") tipo_doc = 80; nro_doc = "50000000059" cbte_nro = long(cbte_nro) + 1 id_impositivo = 9 # "Cliente del Exterior" cod_relacion = 3 # Alojamiento Directo a Turista No Residente imp_total = "101.00"; imp_tot_conc = "0.00"; imp_neto = "100.00" imp_trib = "1.00"; imp_op_ex = "0.00"; imp_subtotal = "100.00" imp_reintegro = -21.00 # validación AFIP 346 cod_pais = 203 domicilio = "Rua N.76 km 34.5 Alagoas" fecha_cbte = fecha moneda_id = 'PES'; moneda_ctz = '1.000' obs = "Observaciones Comerciales, libre" wsct.CrearFactura(tipo_doc, nro_doc, tipo_cbte, punto_vta, cbte_nro, imp_total, imp_tot_conc, imp_neto, imp_subtotal, imp_trib, imp_op_ex, imp_reintegro, fecha_cbte, id_impositivo, cod_pais, domicilio, cod_relacion, moneda_id, moneda_ctz, obs) tributo_id = 99 desc = 'Impuesto Municipal Matanza' base_imp = "100.00" alic = "1.00" importe = "1.00" wsct.AgregarTributo(tributo_id, desc, base_imp, alic, importe) iva_id = 5 # 21% base_imp = 100 importe = 21 wsct.AgregarIva(iva_id, base_imp, importe) tipo = 0 # Item General cod_tur = 1 # Servicio de hotelería - alojamiento sin desayuno codigo = "T0001" ds = "Descripcion del producto P0001" iva_id = 5 imp_iva = 21.00 imp_subtotal = 121.00 wsct.AgregarItem(tipo, cod_tur, codigo, ds, iva_id, imp_iva, imp_subtotal) codigo = 68 # tarjeta de crédito tipo_tarjeta = 99 # otra (ver tabla de parámetros) numero_tarjeta = "999999" swift_code = None tipo_cuenta = None numero_cuenta = None wsct.AgregarFormaPago(codigo, tipo_tarjeta, numero_tarjeta, swift_code, tipo_cuenta, numero_cuenta) print wsct.factura wsct.AutorizarComprobante() print "Resultado", wsct.Resultado print "CAE", wsct.CAE print "Vencimiento", wsct.Vencimiento print "Reproceso", wsct.Reproceso print "Errores", wsct.ErrMsg print wsct.Excepcion print wsct.ErrMsg cae = wsct.CAE if cae: wsct.ConsultarComprobante(tipo_cbte, punto_vta, cbte_nro) print "CAE consulta", wsct.CAE, wsct.CAE==cae print "NRO consulta", wsct.CbteNro, wsct.CbteNro==cbte_nro print "TOTAL consulta", wsct.ImpTotal, wsct.ImpTotal==imp_total wsct.AnalizarXml("XmlResponse") assert wsct.ObtenerTagXml('codigoAutorizacion') == str(wsct.CAE) assert wsct.ObtenerTagXml('codigoConcepto') == str(concepto) assert wsct.ObtenerTagXml('arrayItems', 0, 'item', 'unidadesMtx') == '123456' except: print wsct.XmlRequest print wsct.XmlResponse print wsct.ErrCode print wsct.ErrMsg if "--ptosventa" in sys.argv: print wsct.ConsultarPuntosVenta() if "--parametros" in sys.argv: print wsct.ConsultarTiposDatosAdicionales() print wsct.ConsultarTiposComprobante() print wsct.ConsultarTiposDocumento() print wsct.ConsultarTiposIVA() print wsct.ConsultarCondicionesIVA() print wsct.ConsultarMonedas() print wsct.ConsultarTiposItem() print wsct.ConsultarCodigosItemTurismo() print wsct.ConsultarTiposTributo() print wsct.ConsultarFomasPago() for forma_pago in wsct.ConsultarFomasPago(sep=None)[:2]: print wsct.ConsultarTiposTarjeta(forma_pago["codigo"]) print wsct.ConsultarTiposCuenta() print "\n".join(wsct.ConsultarPaises()) print "\n".join(wsct.ConsultarCUITsPaises()) if "--cotizacion" in sys.argv: print wsct.ConsultarCotizacionMoneda('DOL')
if "--register" in sys.argv or "--unregister" in sys.argv: import win32com.server.register win32com.server.register.UseCommandLine(WSBFEv1) if '--wsbfe' in sys.argv: win32com.server.register.UseCommandLine(WSBFE) else: # Crear objeto interface Web Service de Factura Electrónica de Exportación wsbfev1 = WSBFEv1() # Setear token y sing de autorización (pasos previos) # obteniendo el TA para pruebas from wsaa import WSAA ta = WSAA().Autenticar( "wsbfe", "certificado_testing_renzo_dev_vb_ubuntu16.crt", "pk_renzo_dev.key") wsbfev1.SetTicketAcceso(ta) # CUIT del emisor (debe estar registrado en la AFIP) wsbfev1.Cuit = "20267565393" # Conectar al Servicio Web de Facturación (homologación) wsdl = "http://wswhomo.afip.gov.ar/WSBFEv1/service.asmx" cache = proxy = "" wrapper = "httplib2" cacert = open("conf/afip_ca_info.crt").read() ok = wsbfev1.Conectar(cache, wsdl, proxy, wrapper, cacert) if '--dummy' in sys.argv: #wsbfev1.LanzarExcepciones = False
def main(): "Función principal de pruebas (obtener CAE)" import os, time global CONFIG_FILE DEBUG = '--debug' in sys.argv if '--constancia' in sys.argv: padron = WSSrPadronA5() SECTION = 'WS-SR-PADRON-A5' service = "ws_sr_constancia_inscripcion" else: padron = WSSrPadronA4() SECTION = 'WS-SR-PADRON-A4' service = "ws_sr_padron_a4" config = abrir_conf(CONFIG_FILE, DEBUG) if config.has_section('WSAA'): crt = config.get('WSAA', 'CERT') key = config.get('WSAA', 'PRIVATEKEY') cuit = config.get(SECTION, 'CUIT') else: crt, key = "reingart.crt", "reingart.key" cuit = "20267565393" url_wsaa = url_ws = None if config.has_option('WSAA', 'URL'): url_wsaa = config.get('WSAA', 'URL') if config.has_option(SECTION, 'URL') and not H**O: url_ws = config.get(SECTION, 'URL') # obteniendo el TA para pruebas from wsaa import WSAA cache = "" ta = WSAA().Autenticar(service, crt, key, url_wsaa) padron.SetTicketAcceso(ta) padron.Cuit = cuit padron.Conectar(cache, url_ws, cacert="conf/afip_ca_info.crt") if "--dummy" in sys.argv: print padron.client.help("dummy") wssrpadron4.Dummy() print "AppServerStatus", wssrpadron4.AppServerStatus print "DbServerStatus", wssrpadron4.DbServerStatus print "AuthServerStatus", wssrpadron4.AuthServerStatus if '--csv' in sys.argv: csv_reader = csv.reader(open("entrada.csv", "rU"), dialect='excel', delimiter=",") csv_writer = csv.writer(open("salida.csv", "w"), dialect='excel', delimiter=",") encabezado = next(csv_reader) columnas = [ "cuit", "denominacion", "estado", "direccion", "localidad", "provincia", "cod_postal", "impuestos", "actividades", "imp_iva", "monotributo", "actividad_monotributo", "empleador", "imp_ganancias", "integrante_soc" ] csv_writer.writerow(columnas) for fila in csv_reader: cuit = (fila[0] if fila else "").replace("-", "") if cuit.isdigit(): print "Consultando AFIP online...", cuit, try: ok = padron.Consultar(cuit) except SoapFault as e: ok = None if e.faultstring != "No existe persona con ese Id": raise print 'ok' if ok else "error", padron.Excepcion # domicilio posiblemente esté en Latin1, normalizar csv_writer.writerow( [norm(getattr(padron, campo, "")) for campo in columnas]) sys.exit(0) try: if "--prueba" in sys.argv: id_persona = "20000000516" else: id_persona = len(sys.argv) > 1 and sys.argv[1] or "20267565393" if "--testing" in sys.argv: padron.LoadTestXML("tests/xml/%s_resp.xml" % service) print "Consultando AFIP online via webservice...", ok = padron.Consultar(id_persona) if DEBUG: print "Persona", padron.Persona print padron.Excepcion print 'ok' if ok else "error", padron.Excepcion print "Denominacion:", padron.denominacion print "Tipo:", padron.tipo_persona, padron.tipo_doc, padron.nro_doc print "Estado:", padron.estado print "Direccion:", padron.direccion print "Localidad:", padron.localidad print "Provincia:", padron.provincia print "Codigo Postal:", padron.cod_postal print "Impuestos:", padron.impuestos print "Actividades:", padron.actividades print "IVA", padron.imp_iva print "MT", padron.monotributo, padron.actividad_monotributo print "Empleador", padron.empleador if padron.Excepcion: print "Excepcion:", padron.Excepcion # ver padron.errores para el detalle except: raise print padron.XmlRequest print padron.XmlResponse
def main(): "Funcion principal para utilizar la interfaz por linea de comando" if '--formato' in sys.argv: print "Formato:" for msg, formato in [('Encabezado', ENCABEZADO), ('Observacion', OBSERVACION), ('Evento', EVENTO), ('Error', ERROR), ]: comienzo = 1 print "=== %s ===" % msg print "|| %-20s || %8s || %9s || %-12s || %-20s ||" % ( "Campo", "Posición", "Longitud", "Tipo", "Descripción") for fmt in formato: clave, longitud, tipo, desc = fmt print "|| %-20s || %8d || %9d || %-12s || %-20s ||" % ( clave, comienzo, longitud, tipo, desc.encode("latin1")) comienzo += longitud sys.exit(0) # leer configuracion global CONFIG_FILE if len(sys.argv)>1 and sys.argv[1][0] not in "-/": CONFIG_FILE = sys.argv.pop(1) config = SafeConfigParser() config.read(CONFIG_FILE) crt = config.get('WSAA', 'CERT') key = config.get('WSAA', 'PRIVATEKEY') cuit = config.get('WSCDC', 'CUIT') url_wsaa = config.get('WSAA', 'URL') if config.has_option('WSAA','URL') else "" url_wscdc = config.get('WSCDC', 'URL') if config.has_option('WSCDC','URL') else "" # leo configuración de archivos de intercambio ENTRADA = config.get('WSCDC','ENTRADA') SALIDA = config.get('WSCDC','SALIDA') if config.has_section('DBF'): conf_dbf = dict(config.items('DBF')) else: conf_dbf = {} # instanciar la interfaz con el webservice wscdc = WSCDC() ok = wscdc.Conectar("", url_wscdc) if "--dummy" in sys.argv: #print wscdc.client.help("ComprobanteDummy") wscdc.Dummy() print "AppServerStatus", wscdc.AppServerStatus print "DbServerStatus", wscdc.DbServerStatus print "AuthServerStatus", wscdc.AuthServerStatus sys.exit(0) # Gestionar credenciales de acceso con AFIP: from wsaa import WSAA wsaa = WSAA() ta = wsaa.Autenticar("wscdc", crt, key, url_wsaa) if not ta: sys.exit("Imposible autenticar con WSAA: %s" % wsaa.Excepcion) wscdc.SetTicketAcceso(ta) wscdc.Cuit = cuit if "--constatar" in sys.argv: if len(sys.argv) < 8: if "--prueba" in sys.argv: dic = dict( cbte_modo="CAE", cuit_emisor="20267565393", pto_vta=4002, cbte_tipo=1, cbte_nro=109, cbte_fch="20131227", imp_total="121.0", cod_autorizacion="63523178385550", doc_tipo_receptor=80 , doc_nro_receptor="30628789661", ) # escribir archivo de intercambio con datos de prueba: escribir_archivo(dic, ENTRADA) else: # leer archivo de intercambio: dic = leer_archivo(ENTRADA) # constatar el comprobante wscdc.ConstatarComprobante(**dic) # actualizar el diccionario con los datos de devueltos por AFIP dic.update({'resultado': wscdc.Resultado, 'fch_proceso': wscdc.FchProceso, }) dic['observaciones'] = wscdc.observaciones dic['errores'] = wscdc.errores escribir_archivo(dic, SALIDA) else: # usar los datos pasados por linea de comandos: wscdc.ConstatarComprobante(*sys.argv[sys.argv.index("--constatar")+1:]) print "Resultado:", wscdc.Resultado print "Mensaje de Error:", wscdc.ErrMsg print "Observaciones:", wscdc.Obs if "--params" in sys.argv: print "=== Modalidad Comprobantes ===" print u'\n'.join(wscdc.ConsultarModalidadComprobantes("||")) print "=== Tipo Comprobantes ===" print u'\n'.join(wscdc.ConsultarTipoComprobantes("||")) print "=== Tipo Documentos ===" print u'\n'.join(wscdc.ConsultarTipoDocumentos("||")) print "=== Tipo Opcionales ===" print u'\n'.join(wscdc.ConsultarTipoOpcionales("||")) print "Mensaje de Error:", wscdc.ErrMsg
win32com.server.register.UseCommandLine(WSFEX) #elif "/Automate" in sys.argv: # # MS seems to like /automate to run the class factories. # import win32com.server.localserver # #win32com.server.localserver.main() # # start the server. # win32com.server.localserver.serve([WSFEXv1._reg_clsid_]) else: # Crear objeto interface Web Service de Factura Electronica de Exportacion wsfexv1 = WSFEXv1() # Setear token y sing de autorizacion (pasos previos) # obteniendo el TA para pruebas from wsaa import WSAA ta = WSAA().Autenticar("wsfex", "ubykuoERP.crt", "ClavePrivadaUbykuo.key") wsfexv1.SetTicketAcceso(ta) # CUIT del emisor (debe estar registrado en la AFIP) wsfexv1.Cuit = "20119613524" # Conectar al Servicio Web de Facturacion (produccion u homologacion) if "--prod" in sys.argv: wsdl = "https://servicios1.afip.gov.ar/wsfexv1/service.asmx?WSDL" else: wsdl = "https://wswhomo.afip.gov.ar/wsfexv1/service.asmx?WSDL" cache = proxy = "" wrapper = "httplib2" cacert = open("conf/afip_ca_info.crt").read() ok = wsfexv1.Conectar(cache, wsdl, proxy, wrapper, cacert)
def main(): "Función principal de pruebas (obtener CAE)" import os, time DEBUG = '--debug' in sys.argv if DEBUG: from pysimplesoap.client import __version__ as soapver print "pysimplesoap.__version__ = ", soapver wsfev1 = WSFEv1() wsfev1.LanzarExcepciones = True cache = None wsdl = "https://wswhomo.afip.gov.ar/wsfev1/service.asmx?WSDL" proxy = "" wrapper = "" #"pycurl" cacert = None #geotrust.crt" ok = wsfev1.Conectar(cache, wsdl, proxy, wrapper, cacert) if not ok: raise RuntimeError(wsfev1.Excepcion) if DEBUG: print "LOG: ", wsfev1.DebugLog() if "--dummy" in sys.argv: print wsfev1.client.help("FEDummy") wsfev1.Dummy() print "AppServerStatus", wsfev1.AppServerStatus print "DbServerStatus", wsfev1.DbServerStatus print "AuthServerStatus", wsfev1.AuthServerStatus sys.exit(0) # obteniendo el TA para pruebas from wsaa import WSAA ta = WSAA().Autenticar("wsfe", "reingart.crt", "reingart.key", debug=True) wsfev1.SetTicketAcceso(ta) wsfev1.Cuit = "20267565393" if "--prueba" in sys.argv: print wsfev1.client.help("FECAESolicitar").encode("latin1") tipo_cbte = 1 if '--usados' not in sys.argv else 49 punto_vta = 4001 cbte_nro = long(wsfev1.CompUltimoAutorizado(tipo_cbte, punto_vta) or 0) fecha = datetime.datetime.now().strftime("%Y%m%d") concepto = 2 if '--usados' not in sys.argv else 1 tipo_doc = 80 if '--usados' not in sys.argv else 30 nro_doc = "30000000001" cbt_desde = cbte_nro + 1; cbt_hasta = cbte_nro + 1 imp_total = "122.00"; imp_tot_conc = "0.00"; imp_neto = "100.00" imp_iva = "21.00"; imp_trib = "1.00"; imp_op_ex = "0.00" fecha_cbte = fecha # Fechas del período del servicio facturado y vencimiento de pago: if concepto > 1: fecha_venc_pago = fecha fecha_serv_desde = fecha; fecha_serv_hasta = fecha else: fecha_venc_pago = fecha_serv_desde = fecha_serv_hasta = None moneda_id = 'PES'; moneda_ctz = '1.000' wsfev1.CrearFactura(concepto, tipo_doc, nro_doc, tipo_cbte, punto_vta, cbt_desde, cbt_hasta, imp_total, imp_tot_conc, imp_neto, imp_iva, imp_trib, imp_op_ex, fecha_cbte, fecha_venc_pago, fecha_serv_desde, fecha_serv_hasta, #-- moneda_id, moneda_ctz) if '--caea' in sys.argv: periodo = datetime.datetime.today().strftime("%Y%M") orden = 1 if datetime.datetime.today().day < 15 else 2 caea = wsfev1.CAEAConsultar(periodo, orden) wsfev1.EstablecerCampoFactura("caea", caea) # comprobantes asociados (notas de crédito / débito) if tipo_cbte in (1, 2, 3, 6, 7, 8, 11, 12, 13): tipo = 3 pto_vta = 2 nro = 1234 wsfev1.AgregarCmpAsoc(tipo, pto_vta, nro) # otros tributos: tributo_id = 99 desc = 'Impuesto Municipal Matanza' base_imp = 100 alic = 1 importe = 1 wsfev1.AgregarTributo(tributo_id, desc, base_imp, alic, importe) # subtotales por alicuota de IVA: iva_id = 5 # 21% base_imp = 100 importe = 21 wsfev1.AgregarIva(iva_id, base_imp, importe) # datos opcionales para proyectos promovidos: if '--proyectos' in sys.argv: wsfev1.AgregarOpcional(2, "1234") # identificador del proyecto # datos opcionales para RG Bienes Usados 3411 (del vendedor): if '--usados' in sys.argv: wsfev1.AgregarOpcional(91, "Juan Perez") # Nombre y Apellido wsfev1.AgregarOpcional(92, "200") # Nacionalidad wsfev1.AgregarOpcional(93, "Balcarce 50") # Domicilio # datos opcionales para RG 3668 Impuesto al Valor Agregado - Art.12: if '--rg3668' in sys.argv: wsfev1.AgregarOpcional(5, "02") # IVA Excepciones wsfev1.AgregarOpcional(61, "80") # Firmante Doc Tipo wsfev1.AgregarOpcional(62, "20267565393") # Firmante Doc Nro wsfev1.AgregarOpcional(7, "01") # Carácter del Firmante import time t0 = time.time() if not '--caea' in sys.argv: wsfev1.CAESolicitar() else: wsfev1.CAEARegInformativo() t1 = time.time() print "Resultado", wsfev1.Resultado print "Reproceso", wsfev1.Reproceso print "CAE", wsfev1.CAE print "Vencimiento", wsfev1.Vencimiento if DEBUG: print "t0", t0 print "t1", t1 print "lapso", t1-t0 open("xmlrequest.xml","wb").write(wsfev1.XmlRequest) open("xmlresponse.xml","wb").write(wsfev1.XmlResponse) wsfev1.AnalizarXml("XmlResponse") p_assert_eq(wsfev1.ObtenerTagXml('CAE'), str(wsfev1.CAE)) p_assert_eq(wsfev1.ObtenerTagXml('Concepto'), '2') p_assert_eq(wsfev1.ObtenerTagXml('Obs',0,'Code'), "10017") print wsfev1.ObtenerTagXml('Obs',0,'Msg') if "--reprocesar" in sys.argv: print "reprocesando...." wsfev1.Reproceso = True wsfev1.CAESolicitar() if "--consultar" in sys.argv: cae = wsfev1.CAE cae2 = wsfev1.CompConsultar(tipo_cbte, punto_vta, cbt_desde) p_assert_eq(cae, cae2) # comparar datos del encabezado p_assert_eq(wsfev1.ObtenerCampoFactura('cae'), str(wsfev1.CAE)) p_assert_eq(wsfev1.ObtenerCampoFactura('nro_doc'), long(nro_doc)) p_assert_eq(wsfev1.ObtenerCampoFactura('imp_total'), float(imp_total)) # comparar primer alicuota de IVA p_assert_eq(wsfev1.ObtenerCampoFactura('iva', 0, 'importe'), 21) # comparar primer tributo p_assert_eq(wsfev1.ObtenerCampoFactura('tributos', 0, 'importe'), 1) # comparar primer opcional if '--rg3668' in sys.argv: p_assert_eq(wsfev1.ObtenerCampoFactura('opcionales', 0, 'valor'), "02") # comparar primer observacion de AFIP p_assert_eq(wsfev1.ObtenerCampoFactura('obs', 0, 'code'), 10017) # pruebo la segunda observacion inexistente p_assert_eq(wsfev1.ObtenerCampoFactura('obs', 1, 'code'), None) p_assert_eq(wsfev1.Excepcion, u"El campo 1 solicitado no existe") if "--get" in sys.argv: tipo_cbte = 2 punto_vta = 4001 cbte_nro = wsfev1.CompUltimoAutorizado(tipo_cbte, punto_vta) wsfev1.CompConsultar(tipo_cbte, punto_vta, cbte_nro) print "FechaCbte = ", wsfev1.FechaCbte print "CbteNro = ", wsfev1.CbteNro print "PuntoVenta = ", wsfev1.PuntoVenta print "ImpTotal =", wsfev1.ImpTotal print "CAE = ", wsfev1.CAE print "Vencimiento = ", wsfev1.Vencimiento print "EmisionTipo = ", wsfev1.EmisionTipo wsfev1.AnalizarXml("XmlResponse") p_assert_eq(wsfev1.ObtenerTagXml('CodAutorizacion'), str(wsfev1.CAE)) p_assert_eq(wsfev1.ObtenerTagXml('CbteFch'), wsfev1.FechaCbte) p_assert_eq(wsfev1.ObtenerTagXml('MonId'), "PES") p_assert_eq(wsfev1.ObtenerTagXml('MonCotiz'), "1") p_assert_eq(wsfev1.ObtenerTagXml('DocTipo'), "80") p_assert_eq(wsfev1.ObtenerTagXml('DocNro'), "30500010912") if "--parametros" in sys.argv: import codecs, locale, traceback if sys.stdout.encoding is None: sys.stdout = codecs.getwriter(locale.getpreferredencoding())(sys.stdout,"replace"); sys.stderr = codecs.getwriter(locale.getpreferredencoding())(sys.stderr,"replace"); print u'\n'.join(wsfev1.ParamGetTiposDoc()) print "=== Tipos de Comprobante ===" print u'\n'.join(wsfev1.ParamGetTiposCbte()) print "=== Tipos de Concepto ===" print u'\n'.join(wsfev1.ParamGetTiposConcepto()) print "=== Tipos de Documento ===" print u'\n'.join(wsfev1.ParamGetTiposDoc()) print "=== Alicuotas de IVA ===" print u'\n'.join(wsfev1.ParamGetTiposIva()) print "=== Monedas ===" print u'\n'.join(wsfev1.ParamGetTiposMonedas()) print "=== Tipos de datos opcionales ===" print u'\n'.join(wsfev1.ParamGetTiposOpcional()) print "=== Tipos de Tributo ===" print u'\n'.join(wsfev1.ParamGetTiposTributos()) print "=== Puntos de Venta ===" print u'\n'.join(wsfev1.ParamGetPtosVenta()) if "--cotizacion" in sys.argv: print wsfev1.ParamGetCotizacion('DOL') if "--comptox" in sys.argv: print wsfev1.CompTotXRequest() if "--ptosventa" in sys.argv: print wsfev1.ParamGetPtosVenta() if "--solicitar-caea" in sys.argv: periodo = sys.argv[sys.argv.index("--solicitar-caea")+1] orden = sys.argv[sys.argv.index("--solicitar-caea")+2] if DEBUG: print "Solicitando CAEA para periodo %s orden %s" % (periodo, orden) caea = wsfev1.CAEASolicitar(periodo, orden) print "CAEA:", caea if wsfev1.Errores: print "Errores:" for error in wsfev1.Errores: print error if DEBUG: print "periodo:", wsfev1.Periodo print "orden:", wsfev1.Orden print "fch_vig_desde:", wsfev1.FchVigDesde print "fch_vig_hasta:", wsfev1.FchVigHasta print "fch_tope_inf:", wsfev1.FchTopeInf print "fch_proceso:", wsfev1.FchProceso if not caea: print 'Consultando CAEA' caea = wsfev1.CAEAConsultar(periodo, orden) print "CAEA:", caea if wsfev1.Errores: print "Errores:" for error in wsfev1.Errores: print error if "--sinmovimiento-caea" in sys.argv: punto_vta = sys.argv[sys.argv.index("--sinmovimiento-caea")+1] caea = sys.argv[sys.argv.index("--sinmovimiento-caea")+2] if DEBUG: print "Informando Punto Venta %s CAEA %s SIN MOVIMIENTO" % (punto_vta, caea) resultado = wsfev1.CAEASinMovimientoInformar(punto_vta, caea) print "Resultado:", resultado print "fch_proceso:", wsfev1.FchProceso if wsfev1.Errores: print "Errores:" for error in wsfev1.Errores: print error