def autenticar(cert, privatekey, url): tra = wsaa.create_tra("wsbfe") cms = wsaa.sign_tra(str(tra), str(cert), str(privatekey)) xml = wsaa.call_wsaa(str(cms), url) ta = SimpleXMLElement(xml) token = str(ta.credentials.token) sign = str(ta.credentials.sign) return token, sign
def autenticar(cert, privatekey, url): "Obtener el TA" TA = "TA-wsfe.xml" ttl = 60 * 60 * 5 if not os.path.exists(TA) or os.path.getmtime(TA) + (ttl) < time.time(): import wsaa tra = wsaa.create_tra(service="wsfe", ttl=ttl) cms = wsaa.sign_tra(str(tra), str(cert), str(privatekey)) ta_string = wsaa.call_wsaa(cms, wsaa_url, trace=DEBUG) open(TA, "w").write(ta_string) ta_string = open(TA).read() ta = SimpleXMLElement(ta_string) token = str(ta.credentials.token) sign = str(ta.credentials.sign) return token, sign
def main(): # cliente soap del web service client = SoapClient(WSFEURL, action = SOAP_ACTION, namespace = SOAP_NS, trace = True) # obteniendo el TA ta_string = open(TA).read() ta = SimpleXMLElement(ta_string) token = str(ta.credentials.token) sign = str(ta.credentials.sign) # fin TA CUIT = sys.argv[1] punto_vta = 2 tipo_cbte = 1 # 1: A 6: B dummy(client) qty = recuperar_qty(client, token, sign, CUIT) last_id = ultnro(client, token, sign, CUIT) last_cbte = recuperar_last_cmp(client, token, sign, CUIT, punto_vta, tipo_cbte) #import pdb; pdb.set_trace() dic = aut(client, token, sign, CUIT, id=last_id +1, cbt_desde=last_cbte +1, cbt_hasta=last_cbte +1, tipo_doc=80, nro_doc=23111111113, punto_vta=punto_vta, tipo_cbte=tipo_cbte, imp_total=0.01, imp_neto=0.01, impto_liq=0.00) cae = dic['cae'] print "QTY: %s" % qty print "Last CBTE: %s" % last_cbte print "Last Id: %s" % last_id print "CAE: %s" % cae
def main(): "Función principal de pruebas (obtener CAE)" import os, time import sys, codecs, locale if sys.stdout.encoding is None: sys.stdout = codecs.getwriter("latin1")(sys.stdout, "replace") url = len(sys.argv) > 2 and sys.argv[2].startswith( "http") and sys.argv[2] or WSBFEURL # cliente soap del web service client = SoapClient(url, action=SOAP_ACTION, namespace=SOAP_NS, trace="--trace" in sys.argv) # obteniendo el TA TA = "TA.xml" if not os.path.exists(TA) or os.path.getmtime(TA) + (60 * 60 * 5) < time.time(): import wsaa tra = wsaa.create_tra(service="wsbfe") cms = wsaa.sign_tra(tra, "reingart.crt", "reingart.key") ta_string = wsaa.call_wsaa(cms) open("TA.xml", "w").write(ta_string) ta_string = open(TA).read() ta = SimpleXMLElement(ta_string) token = str(ta.credentials.token) sign = str(ta.credentials.sign) # fin TA CUIT = len(sys.argv) > 1 and sys.argv[1] or "20267565393" if "--dummy" in sys.argv: print dummy(client) # Recuperar parámetros: if "--params" in sys.argv: print "=== Monedas ===" monedas = get_param_mon(client, token, sign, CUIT) for m in monedas: print "||%(id)s||%(ds)s||%(vig_desde)s||%(vig_hasta)s||" % m monedas = dict([(m['id'], m['ds']) for m in monedas]) print "=== NCM ===" productos = get_param_ncm(client, token, sign, CUIT) for p in productos: print "||%(codigo)s||%(ds)s||%(vig_desde)s||%(vig_hasta)s||" % p productos = dict([(m['codigo'], m['ds']) for m in productos]) print "=== Tipos de Comprobante ===" cbtes = get_param_tipo_cbte(client, token, sign, CUIT) for c in cbtes: print "||%(id)s||%(ds)s||%(vig_desde)s||%(vig_hasta)s||" % c cbtes = dict([(c['id'], c['ds']) for c in cbtes]) print "=== Tipos de IVA ===" ivas = get_param_tipo_iva(client, token, sign, CUIT) for i in ivas: print "||%(id)s||%(ds)s||%(vig_desde)s||%(vig_hasta)s||" % i ivas = dict([(i['id'], i['ds']) for i in ivas]) print "=== Unidades de Medida ===" umedidas = get_param_umed(client, token, sign, CUIT) for u in umedidas: print "||%(id)s||%(ds)s||%(vig_desde)s||%(vig_hasta)s||" % u umeds = dict([(u['id'], u['ds']) for u in umedidas]) ##zonas = get_param_zonas(client, token, sign, CUIT) ##print dict([(z['id'],z['ds']) for z in zonas]) else: monedas = { 'DOL': u'D\xf3lar Estadounidense', 'PES': u'Pesos Argentinos', '010': u'Pesos Mejicanos', '011': u'Pesos Uruguayos', '012': u'Real', '014': u'Coronas Danesas', '015': u'Coronas Noruegas', '016': u'Coronas Suecas', '019': u'Yens', '018': u'D\xf3lar Canadiense', '033': u'Peso Chileno', '056': u'Forint (Hungr\xeda)', '031': u'Peso Boliviano', '036': u'Sucre Ecuatoriano', '051': u'D\xf3lar de Hong Kong', '034': u'Rand Sudafricano', '053': u'D\xf3lar de Jamaica', '057': u'Baht (Tailandia)', '043': u'Balboas Paname\xf1as', '042': u'Peso Dominicano', '052': u'D\xf3lar de Singapur', '032': u'Peso Colombiano', '035': u'Nuevo Sol Peruano', '061': u'Zloty Polaco', '060': u'Euro', '063': u'Lempira Hondure\xf1a', '062': u'Rupia Hind\xfa', '064': u'Yuan (Rep. Pop. China)', '025': u'Dinar Yugoslavo', '002': u'D\xf3lar Libre EEUU', '027': u'Dracma Griego', '026': u'D\xf3lar Australiano', '007': u'Florines Holandeses', '023': u'Bol\xedvar Venezolano', '047': u'Riyal Saudita', '046': u'Libra Egipcia', '045': u'Dirham Marroqu\xed', '044': u'C\xf3rdoba Nicarag\xfcense', '029': u'G\xfcaran\xed', '028': u'Flor\xedn (Antillas Holandesas)', '054': u'D\xf3lar de Taiwan', '040': u'Lei Rumano', '024': u'Corona Checa', '030': u'Shekel (Israel)', '021': u'Libra Esterlina', '055': u'Quetzal Guatemalteco', '059': u'Dinar Kuwaiti' } comprobantes = { 1: u'Factura A', 2: u'Nota de D\xe9bito A', 3: u'Nota de Cr\xe9dito A', 4: u'Recibo A', 6: u'Factura B', 7: u'Nota de D\xe9bito B', 8: u'Nota de Cr\xe9dito B', 9: u'Recibo B', 11: u'Factura C', 12: u'Nota de D\xe9bito C', 13: u'Nota de Cr\xe9dito C', 15: u'Recibo C', 51: u'Factura M', 52: u'Nota de D\xe9bito M', 53: u'Nota de Cr\xe9dito M', 54: u'Recibo M' } ivas = { 1: u'No gravado', 2: u'Exento', 3: u'0%', 4: u'10.5%', 5: u'21%', 6: u'27%' } umeds = { 1: u'kilogramos', 2: u'metros', 3: u'metros cuadrados', 4: u'metros c\xfabicos', 5: u'litros', 6: u'1000 kWh', 7: u'unidades', 8: u'pares', 9: u'docenas', 10: u'quilates', 11: u'millares', 14: u'gramos', 15: u'milimetros', 16: u'mm c\xfabicos', 17: u'kil\xf3metros', 18: u'hectolitros', 20: u'cent\xedmetros', 25: u'jgo. pqt. mazo naipes', 27: u'cm c\xfabicos', 29: u'toneladas', 30: u'dam c\xfabicos', 31: u'hm c\xfabicos', 32: u'km c\xfabicos', 33: u'microgramos', 34: u'nanogramos', 35: u'picogramos', 41: u'miligramos', 47: u'mililitros', 48: u'curie', 49: u'milicurie', 50: u'microcurie', 51: u'uiacthor', 52: u'muiacthor', 53: u'kg base', 54: u'gruesa', 61: u'kg bruto', 62: u'uiactant', 63: u'muiactant', 64: u'uiactig', 65: u'muiactig', 66: u'kg activo', 67: u'gramo activo', 68: u'gramo base', 96: u'packs', 97: u'hormas', 98: u'bonificaci\xf2n', 99: u'otras unidades' } # ncm=7308.10.00, 7308.20.00 if "--prueba" in sys.argv: # recupero ultimo comprobante y id tipo_cbte = 1 punto_vta = 5 cbte_nro, cbte_fecha, events = get_last_cmp(client, token, sign, CUIT, tipo_cbte, punto_vta) id, events = get_last_id(client, token, sign, CUIT) #cbte_nro = 1 #id = 1002 # 99000000000098 # creo una factura de prueba f = FacturaBF() f.punto_vta = punto_vta f.cbte_nro = cbte_nro + 1 f.imp_moneda_id = 'PES' f.fecha_cbte = date('Ymd') it = ItemBF(ncm='7308.10.00', sec='', ds=u'prueba Anafe económico', qty=2.0, precio=100.0, bonif=0.0, iva_id=5) f.add_item(it) it = ItemBF(ncm='7308.20.00', sec='', ds='prueba 2', qty=4.0, precio=50.0, bonif=10.0, iva_id=5) f.add_item(it) print f.to_dict() try: # autorizar... auth, events = authorize(client, token, sign, CUIT, id=id + 1, factura=f.to_dict()) cae = auth['cae'] print "auth", auth print "events", events auth, events = get_cmp(client, token, sign, CUIT, f.tipo_cbte, f.punto_vta, f.cbte_nro) print "get_cmp: auth", auth print "get_cmp: events", events except: raise ##l= client.xml_request.splitlines() ##print l[4][1150:1200] ##import pdb; pdb.set_trace() sys.exit(0)
def main(): "Función principal de pruebas (obtener CAE)" import os, time url = len(sys.argv) > 2 and sys.argv[2].startswith( "http") and sys.argv[2] or WSFEXURL # cliente soap del web service client = SoapClient(url, action=SOAP_ACTION, namespace=SOAP_NS, trace="--trace" in sys.argv) # obteniendo el TA TA = "TA.xml" if not os.path.exists(TA) or os.path.getmtime(TA) + (60 * 60 * 5) < time.time(): import wsaa tra = wsaa.create_tra(service="wsfex") cms = wsaa.sign_tra(tra, "reingart.crt", "reingart.key") ta_string = wsaa.call_wsaa(cms) open("TA.xml", "w").write(ta_string) ta_string = open(TA).read() ta = SimpleXMLElement(ta_string) token = str(ta.credentials.token) sign = str(ta.credentials.sign) # fin TA CUIT = len(sys.argv) > 1 and sys.argv[1] or "20267565393" if "--dummy" in sys.argv: print dummy(client) # Recuperar parámetros: if "--params" in sys.argv: import codecs, locale sys.stdout = codecs.getwriter('latin1')(sys.stdout) print "=== Monedas ===" monedas = get_param_mon(client, token, sign, CUIT) for m in monedas: print "||%(id)s||%(ds)s||%(vig_desde)s||%(vig_hasta)s||" % m monedas = dict([(m['id'], m['ds']) for m in monedas]) print "=== Tipos Comprobante ===" cbtes = get_param_tipo_cbte(client, token, sign, CUIT) for c in cbtes: print "||%(id)s||%(ds)s||%(vig_desde)s||%(vig_hasta)s||" % c comprobantes = dict([(c['id'], c['ds']) for c in cbtes]) print u"=== Tipos Exportación ===" tipos = get_param_tipo_expo(client, token, sign, CUIT) for t in tipos: print "||%(id)s||%(ds)s||%(vig_desde)s||%(vig_hasta)s||" % t tipos_expo = dict([(t['id'], t['ds']) for t in tipos]) print "=== Idiomas ===" tipos = get_param_idiomas(client, token, sign, CUIT) for t in tipos: print "||%(id)s||%(ds)s||%(vig_desde)s||%(vig_hasta)s||" % t idiomas = dict([(t['id'], t['ds']) for t in tipos]) print "=== Unidades de medida ===" umedidas = get_param_umed(client, token, sign, CUIT) for u in umedidas: print "||%(id)s||%(ds)s||%(vig_desde)s||%(vig_hasta)s||" % u umeds = dict([(u['id'], u['ds']) for u in umedidas]) print "=== INCOTERMs ===" incoterms = get_param_incoterms(client, token, sign, CUIT) for i in incoterms: print "||%(id)s||%(ds)s||%(vig_desde)s||%(vig_hasta)s||" % i incoterms = dict([(t['id'], t['ds']) for t in incoterms]) print "=== Pais Destino ===" pais = get_param_dst_pais(client, token, sign, CUIT) for p in pais: print "||%(codigo)s||%(ds)s||" % p paises = dict([(p['codigo'], p['ds']) for p in pais]) print "=== CUIT Pais Destino ===" pais = get_param_dst_cuit(client, token, sign, CUIT) for p in pais: print "||%(cuit)s||%(ds)s||" % p cuits = dict([(p['cuit'], p['ds']) for p in pais]) ctz = get_param_ctz(client, token, sign, CUIT, 'DOL') print ctz print get_param_pto_venta(client, token, sign, CUIT) else: monedas = { 'DOL': u'D\xf3lar Estadounidense', 'PES': u'Pesos Argentinos', '010': u'Pesos Mejicanos', '011': u'Pesos Uruguayos', '012': u'Real', '014': u'Coronas Danesas', '015': u'Coronas Noruegas', '016': u'Coronas Suecas', '019': u'Yens', '018': u'D\xf3lar Canadiense', '033': u'Peso Chileno', '056': u'Forint (Hungr\xeda)', '031': u'Peso Boliviano', '036': u'Sucre Ecuatoriano', '051': u'D\xf3lar de Hong Kong', '034': u'Rand Sudafricano', '053': u'D\xf3lar de Jamaica', '057': u'Baht (Tailandia)', '043': u'Balboas Paname\xf1as', '042': u'Peso Dominicano', '052': u'D\xf3lar de Singapur', '032': u'Peso Colombiano', '035': u'Nuevo Sol Peruano', '061': u'Zloty Polaco', '060': u'Euro', '063': u'Lempira Hondure\xf1a', '062': u'Rupia Hind\xfa', '064': u'Yuan (Rep. Pop. China)', '009': u'Franco Suizo', '025': u'Dinar Yugoslavo', '002': u'D\xf3lar Libre EEUU', '027': u'Dracma Griego', '026': u'D\xf3lar Australiano', '007': u'Florines Holandeses', '023': u'Bol\xedvar Venezolano', '047': u'Riyal Saudita', '046': u'Libra Egipcia', '045': u'Dirham Marroqu\xed', '044': u'C\xf3rdoba Nicarag\xfcense', '029': u'G\xfcaran\xed', '028': u'Flor\xedn (Antillas Holandesas)', '054': u'D\xf3lar de Taiwan', '040': u'Lei Rumano', '024': u'Corona Checa', '030': u'Shekel (Israel)', '021': u'Libra Esterlina', '055': u'Quetzal Guatemalteco', '059': u'Dinar Kuwaiti' } comprobantes = { 19: u'Facturas de Exportaci\xf3n\n', 20: u'Nota de D\xe9bito por Operaciones con el Exterior\n', 21: u'Nota de Cr\xe9dito por Operaciones con el Exterior\n' } tipos_expo = { 1: u'Exportaci\xf3n definitiva de Bienes', 2: u'Servicios', 4: u'Otros' } idiomas = {1: u'Espa\xf1ol', 2: u'Ingl\xe9s', 3: u'Portugu\xe9s'} umeds = { 0: u' ', 1: u'kilogramos', 2: u'metros', 3: u'metros cuadrados', 4: u'metros c\xfabicos', 5: u'litros', 6: u'1000 kWh', 7: u'unidades', 8: u'pares', 9: u'docenas', 10: u'quilates', 11: u'millares', 14: u'gramos', 15: u'milimetros', 16: u'mm c\xfabicos', 17: u'kil\xf3metros', 18: u'hectolitros', 20: u'cent\xedmetros', 25: u'jgo. pqt. mazo naipes', 27: u'cm c\xfabicos', 29: u'toneladas', 30: u'dam c\xfabicos', 31: u'hm c\xfabicos', 32: u'km c\xfabicos', 33: u'microgramos', 34: u'nanogramos', 35: u'picogramos', 41: u'miligramos', 47: u'mililitros', 48: u'curie', 49: u'milicurie', 50: u'microcurie', 51: u'uiacthor', 52: u'muiacthor', 53: u'kg base', 54: u'gruesa', 61: u'kg bruto', 62: u'uiactant', 63: u'muiactant', 64: u'uiactig', 65: u'muiactig', 66: u'kg activo', 67: u'gramo activo', 68: u'gramo base', 96: u'packs', 97: u'hormas', 98: u'bonificaci\xf3n', 99: u'otras unidades' } incoterms = { 'DAF': u'DAF', 'DDP': u'DDP', 'CIF': u'CIF', 'FCA': u'FCA', 'FAS': u'FAS', 'DES': u'DES', 'CPT': u'CPT', 'EXW': u'EXW', 'CIP': u'CIP', 'DDU': u'DDU', 'FOB': u'FOB', 'DEQ': u'DEQ', 'CFR': u'CFR' } if "--prueba" in sys.argv: # recupero ultimo comprobante y id tipo_cbte = 19 punto_vta = 1 cbte_nro, cbte_fecha, events = get_last_cmp(client, token, sign, CUIT, tipo_cbte, punto_vta) id, events = get_last_id(client, token, sign, CUIT) print "last_cmp", cbte_nro, cbte_fecha print "last_id", id cbte_nro += 1 id += 1 if False: # prueba a mano f = { 'Id': id, 'Fecha_cbte': date('Ymd'), 'Tipo_cbte': tipo_cbte, 'Punto_vta': punto_vta, 'Cbte_nro': cbte_nro, 'Tipo_expo': 1, 'Permiso_existente': 'N', 'Dst_cmp': 225, 'Cliente': 'Jose Yorugua', 'Cuit_pais_cliente': 50000000016, 'Domicilio_cliente': 'Montevideo, UY', 'Id_impositivo': 'RUC 123123', 'Moneda_Id': 'DOL', 'Moneda_ctz': 3.85, 'Obs_comerciales': 'Observaciones comerciales', 'Imp_total': 60.00, 'Obs': 'Observaciones', 'Forma_pago': 'Taka taka', 'Incoterms': 'FOB', 'Idioma_cbte': 2, 'Items': [{ 'Item': { 'Pro_codigo': "kbd", 'Pro_ds': "Keyboard (uruguayan layout)", 'Pro_qty': 1, 'Pro_umed': 7, 'Pro_precio_uni': 50.000049, 'Pro_total_item': 50.000049 } }, { 'Item': { 'Pro_codigo': "mice", 'Pro_ds': "Optical Mouse", 'Pro_qty': 1, 'Pro_umed': 7, 'Pro_precio_uni': 10.50, 'Pro_total_item': 10.50 } }] } else: # creo una factura de prueba f = FacturaEX() f.punto_vta = punto_vta f.cbte_nro = cbte_nro f.fecha_cbte = date('Ymd') f.tipo_expo = 1 f.permiso_existente = 'S' f.dst_cmp = 203 f.cliente = 'Joao Da Silva' f.cuit_pais_cliente = 50000000016 f.domicilio_cliente = 'Rua 76 km 34.5 Alagoas' f.id_impositivo = 'PJ54482221-l' f.moneda_id = '012' f.moneda_ctz = 0.5 f.obs_comerciales = 'Observaciones comerciales' f.obs = 'Sin observaciones' f.forma_pago = '30 dias' f.incoterms = 'FOB' f.idioma_cbte = 1 # agrego los items it = ItemFEX(codigo='PRO1', ds=u'Producto Tipo 1 Exportacion MERCOSUR ISO 9001', qty=1, precio=125) f.add_item(it) it = ItemFEX(codigo='PRO2', ds=u'Producto Tipo 2 Exportacion MERCOSUR ISO 9001', qty=1, precio=125) f.add_item(it) permiso = PermisoFEX(id_permiso="99999AAXX999999A", dst_merc=225) f.add_permiso(permiso) permiso = PermisoFEX(id_permiso="99999AAXX999999B", dst_merc=225) f.add_permiso(permiso) if f.tipo_cbte != 19: cmp_asoc = CmpAsocFEX(tipo=19, punto_vta=2, cbte_nro=1) f.add_cmp_asoc(cmp_asoc) cmp_asoc = CmpAsocFEX(tipo=19, punto_vta=2, cbte_nro=2) f.add_cmp_asoc(cmp_asoc) f = f.to_dict() print f try: auth, events = authorize(client, token, sign, CUIT, id=id, factura=f) except FEXError, fex: print "FEX_error:", fex.msg print client.xml_response sys.exit(1) cae = auth['cae'] print "auth", auth print "events", events try: auth, events = get_cmp(client, token, sign, CUIT, tipo_cbte, punto_vta, cbte_nro) except: print client.xml_response sys.exit(1) print "get_cmp: auth", auth print "get_cmp: events", events
try: if "--version" in sys.argv: print "Versión: ", __version__ CERT='reingart.crt' PRIVATEKEY='reingart.key' # obteniendo el TA TA = "wsddf-ta.xml" if not os.path.exists(TA) or os.path.getmtime(TA)+(60*60*5)<time.time(): tra = wsaa.create_tra(service="wDigDepFiel") cms = wsaa.sign_tra(tra,CERT,PRIVATEKEY) ta_string = wsaa.call_wsaa(cms) open(TA,"w").write(ta_string) ta_string=open(TA).read() ta = SimpleXMLElement(ta_string) token = str(ta.credentials.token) sign = str(ta.credentials.sign) # fin TA # cliente soap del web service client = SoapClient(WSDDFURL, action = SOAP_ACTION, namespace = SOAP_NS, exceptions = True, trace = True, ns = 'ar', soap_ns='soap') if '--dummy' in sys.argv: ret = dummy(client) print '\n'.join(["%s: %s" % it for it in ret.items()]) # ejemplos aviso recep acept (prueba):