pythontr.com
Wsdl nedir? http yada https protokelleri ile client ve server arasında veri alışverişi yapabilen bir katmandır. Ayrıca WSDL web servis teknolojilerinin arasında en gelişmiş olanlarından bir tanesidir. Aslında, internet ortamında çok kullanım örneği olmamasına rağmen kullanımı oldukça basittir. Bizde örneğimizi hazırlarken Python programlama diline ait suds kütüphanesinden yararlandık.
Hazırladığımız örnek şu an izibiz firmasına ait earsiv yani fatura gönderiminde kullanılan ver iletişimini sağlamak amacıyla yazmış olduğum bir class.
#!/usr/bin/python # -*- coding:utf-8 -*- ################################################################################ # Huseyin OZDEMIR # husonet # 07.06.2016 # Bu betik wsdl uzerinden gonderilmek icin paketler hazirlar. ################################################################################ # apt-get install python-suds from suds.client import Client from datetime import datetime from base64 import b64encode import uuid WSDL = '[url]https://ari3.i2i-systems.com:2443/EIWSOIBProxy/EFaturaOIBProxy?wsdl[/url]' KULLANICI_ADI = 'xxxxxx' SIFRE = 'xxxxxx' # gonderen firma bilgileri UNVAN = 'GÖNDEREN DENEME LTD.ŞTİ.'.decode('utf-8') ADRES = 'HALDUR DORMEN CAD.NO:10 ÇANKAYA-ANKARA'.decode('utf-8') TEL = '03120000000' FAX = '03120000001' EMAIL = 'info@xxxxxx.com' WEB = '[url]http://www.xxxxx.com[/url]' VDR = 'MALTEPE' VNR = '4840847211' MERSIS = '0-4630-1106-0700019' ULKE = 'Türkiye'.decode('utf-8') SEHIR = 'Ankara'.decode('utf-8') ILCE = 'Çankaya'.decode('utf-8') # Alıcı firma bilgileri A_UNVAN = 'ALICI DENEME A.S.'.decode('utf-8') A_ADRES = 'HAVALANI KAVSAGI YESILKOY'.decode('utf-8') A_TEL = '' A_FAX = '' A_EMAIL = '' A_WEB = '' A_VDR = 'MARMARA KURUMLAR' A_VNR = '4840847212' A_MERSIS = '' A_ULKE = 'Türkiye'.decode('utf-8') A_SEHIR = 'ISTANBUL'.decode('utf-8') A_ILCE = 'Yeşilköy'.decode('utf-8') # SAHIS ISE AD = '' SOYAD = '' # DEBUG 1 ise debug et DEBUG = 1 #------------------------------------------------------------------------------ # EArsiv istemci sinifi class EClient(): kullanici_adi = None sifre = None wsdl = None session_id = None client = None #-------------------------------------------------------------------------- # Nesne ilk olusturuldugunda calisacak bolum. Eger ilk degerler verildiyse # set edilecek def __init__(self, sKullaniciAdi=None, sSifre=None, sWsdl=None): if sKullaniciAdi is not None: self.kullanici_adi = sKullaniciAdi if sSifre is not None: self.sifre = sSifre if sWsdl is not None: self.wsdl = sWsdl #-------------------------------------------------------------------------- # login olan method def login(self): try: self.client = Client(self.wsdl,cache = None) self.session_id = self.client.service.Login(self.kullanici_adi, self.sifre) except Exception, err: if DEBUG: print(str(err)) else: raise self.session_id = None #-------------------------------------------------------------------------- # send invoice def send_invoice(self, sInvPro, sInv): try: print self.client.service.SendInvoiceByXml(self.session_id, sInvPro, sInv) except Exception, err: if DEBUG: print(str(err)) else: raise #-------------------------------------------------------------------------- # SET INVOICE_TYPE, EMAIL_FLAG def set_invoice_type(self, sInvoiceType, sEmailFlag): try: result = None inv = self.client.factory.create('INVOICE_PROPERTIES') inv.INVOICE_TYPE = sInvoiceType inv.EMAIL_FLAG = sEmailFlag result = inv except Exception, err: if DEBUG: print(str(err)) else: raise result = None return result #-------------------------------------------------------------------------- # SET NOTE def set_note(self, sAciklama): try: result = None note = self.client.factory.create('NOTE') note.NOTE = sAciklama result = note except Exception, err: if DEBUG: print(str(err)) else: raise result = None return result #-------------------------------------------------------------------------- # SET LEGAL_MONETARY_TOTAL def set_alt_toplam(self, sToplam, sIskontoTutar, sGenelToplam): try: result = None top = self.client.factory.create('LEGAL_MONETARY_TOTAL') top.LINE_EXTENSION_AMOUNT = sToplam top.TAX_EXCLUSIVE_AMOUNT = sToplam top.TAX_INCLUSIVE_AMOUNT = sGenelToplam top.ALLOWANCE_TOTAL_AMOUNT = sIskontoTutar top.PAYABLE_AMOUNT = sGenelToplam result = top except Exception, err: if DEBUG: print(str(err)) else: raise result = None return result #-------------------------------------------------------------------------- # SET INVOICE def set_invoice(self, sSenaryo, sFaturaNo, sUUID, sTarih, sSaat,sFaturaTip, sParaBirimi, sSatirSayisi, sNote, sKur, sFile, sGond, sAlici, sVergi, sAltToplam, sInvoiceLine): try: result = None invoice = self.client.factory.create('INVOICE') invoice.PROFILE_ID = sSenaryo invoice.INVOICE_ID = sFaturaNo invoice.UUID = sUUID invoice.ISSUE_DATE = sTarih invoice.ISSUE_TIME = sSaat invoice.INVOICE_TYPE_CODE = sFaturaTip invoice.DOCUMENT_CURRENCY_CODE = sParaBirimi invoice.LINE_COUNT_NUMERIC = sSatirSayisi invoice.NOTE = sNote invoice.CALCULATION_RATE = sKur invoice.ADDITIONAL_DOCUMENT_REFERENCE = sFile invoice.ACCOUNTING_SUPPLIER_PARTY = sGond invoice.ACCOUNTING_CUSTOMER_PARTY = sAlici invoice.TAX_TOTAL = sVergi invoice.LEGAL_MONETARY_TOTAL = sAltToplam invoice.INVOICE_LINE = sInvoiceLine result = invoice except Exception, err: if DEBUG: print(str(err)) else: raise result = None return result #-------------------------------------------------------------------------- # SET ALLOWANCE_CHARGES def set_allowance_charge(self, sIskontoTutari, sBirimFiyat): try: result = None iskonto_orani = (sIskontoTutari / sBirimFiyat) iskonto = self.client.factory.create('ALLOWANCE_CHARGE') iskonto.CHARGE_INDICATOR = False iskonto.MULTIPLIER_FACTOR_NUMERIC = iskonto_orani iskonto.AMOUNT = sIskontoTutari iskonto.BASE_AMOUNT = sBirimFiyat result = iskonto except Exception, err: if DEBUG: print(str(err)) else: raise result = None return result #-------------------------------------------------------------------------- # SET TAX_SUB_TOTAL def set_tax_sub_total(self, sTutar, sKdv, sSiraNo, sKdvOran): try: result = None MUAF_ADI = '' MUAF_ACIKLAMA = '' MUAF_KOD = '0015' if not sKdv > 0: MUAF_ADI = 'KDV' MUAF_ACIKLAMA = 'MUAF MADDE 14/1' vergi = self.client.factory.create('TAX_SUB_TOTAL') vergi.TAX_ABLE_AMOUNT = sTutar vergi.TAX_AMOUNT = sKdv vergi.CALCULATION_SEQ_NUMERIC = sSiraNo vergi.PERCENT = sKdvOran vergi.TAX_NAME = MUAF_ADI vergi.TAX_TYPE_CODE = MUAF_KOD vergi.TAX_EXEMPTION_REASON = MUAF_ACIKLAMA result = vergi except Exception, err: if DEBUG: print(str(err)) else: raise result = None return result #-------------------------------------------------------------------------- # SET PARTY_IDENTIFICATION def set_party_identification(self, sVkn, sType): try: result = None party = self.client.factory.create('PARTY_IDENTIFICATION') party.ID = sVkn party.TYPE = sType result = party except Exception, err: if DEBUG: print(str(err)) else: raise result = None return result #-------------------------------------------------------------------------- # SET POSTAL_ADDRESS def set_postal_address(self, sGondAdres, sGondIlce, sGondSehir, sGondUlke): try: result = None adres = self.client.factory.create('POSTAL_ADDRESS') adres.BUILDING_NUMBER = '-' adres.STREET_NAME = sGondAdres adres.CITY_SUB_DIVISION_NAME = sGondIlce adres.CITY_NAME = sGondSehir adres.COUNTRY = sGondUlke adres.POSTAL_ZONE = '-' result = adres except Exception, err: if DEBUG: print(str(err)) else: raise result = None return result #-------------------------------------------------------------------------- # SET CONTACT def set_contact(self, sTel, sFax, sEMail): try: result = None contact = self.client.factory.create('CONTACT') contact.TELEPHONE = sTel contact.TELEFAX = sFax contact.ELECTRONIC_MAIL = sEMail result = contact except Exception, err: if DEBUG: print(str(err)) else: raise result = None return result #-------------------------------------------------------------------------- # SET PARTY def set_party(self, sWeb, sPartyIdent, sUnvan, sAdres, sVdr, sContact, sAd, sSoyad): try: result = None party = self.client.factory.create('PARTY') party.WEB_SITE_URI = sWeb party.PARTY_IDENTIFICATION = sPartyIdent party.NAME = sUnvan party.POSTAL_ADDRESS = sAdres party.PARTY_TAX_SCHEME = sVdr party.CONTACT = sContact party.FIRST_NAME = sAd party.FAMILY_NAME = sSoyad result = party except Exception, err: if DEBUG: print(str(err)) else: raise result = None return result #-------------------------------------------------------------------------- # SET ACCOUNTING_SUPPLIER_PARTY def set_gonderen(self, sParty): try: result = None gond = self.client.factory.create('ACCOUNTING_SUPPLIER_PARTY') gond.PARTY = sParty result = gond except Exception, err: if DEBUG: print(str(err)) else: raise result = None return result #-------------------------------------------------------------------------- # SET ACCOUNTING_CUSTOMER_PARTY def set_alici(self, sParty): try: result = None alici = self.client.factory.create('ACCOUNTING_CUSTOMER_PARTY') alici.PARTY = sParty result = alici except Exception, err: if DEBUG: print(str(err)) else: raise result = None return result #-------------------------------------------------------------------------- # SET TAX_TOTAL def set_tax_total(self, sTaxAmount, sTaxSubTotal): try: result = None vergi = self.client.factory.create('TAX_TOTAL') vergi.TAX_AMOUNT = sTaxAmount vergi.TAX_SUB_TOTAL = sTaxSubTotal result = vergi except Exception, err: if DEBUG: print(str(err)) else: raise result = None return result #-------------------------------------------------------------------------- # SET INVOICE LINE def set_invoice_line(self, sId, sAdet, sUnitCode, sTutar, sIskonto, sVergi, sAciklama, sBirimFiyat): try: result = None invoice = self.client.factory.create('INVOICE_LINE') invoice.ID = sId invoice.INVOICE_QUANTITY = sAdet invoice.UNITCODE = sUnitCode invoice.LINE_EXTENSION_AMOUNT = sTutar invoice.ALLOWANCE_CHARGES.append(sIskonto) invoice.TAXTOTAL = sVergi invoice.ITEM_NAME = sAciklama invoice.ITEM_PRICE = sBirimFiyat result = invoice except Exception, err: if DEBUG: print(str(err)) else: raise result = None return result #-------------------------------------------------------------------------- # SET ADDITIONAL_DOCUMENT_REFERENCE def set_additional_document_reference(self, sUuid, sFaturaTarihi, sDoctTypeCode, sDoctType=None, sFile=None): try: result = None add = self.client.factory.create('ADDITIONAL_DOCUMENT_REFERENCE') add.ID = sUuid add.ISSUE_DATE = sFaturaTarihi # add.DOCUMENT_TYPE_CODE = 'SendingType' add.DOCUMENT_TYPE_CODE = sDoctTypeCode if not sDoctType == '': add.DOCUMENT_TYPE = sDoctType if not sFile == '': add.ATTACHMENT = sFile result = add except Exception, err: if DEBUG: print(str(err)) else: raise result = None return result #------------------------------------------------------------------------------ # load template def load_template(sFile): try: result = '' f = open(sFile, 'r') result = f.read() f.close() except Exception, err: if DEBUG: raise print(str(err)) result = None return result #------------------------------------------------------------------------------ # main prosess if __name__ == '__main__': # fatura detay UNITCODE = 'C62' ADET = 1 KDV=8.1 TUTAR=45 SIRA_NO='1' KDV_ORAN=18 # iskonto ISKONTO_TUTAR = 0 BIRIM_FIYAT = 45.0000 ACIKLAMA = 'HIZMET UCRETI' # fatura master SENARYO = 'TEMELFATURA' FATURA_NO = 'TET2016000003885' # uuid4 random uretir uuid1 host ID ye gore uretir UUID = uuid.uuid4() #TARIH = datetime.strftime('2016-05-25 00:00:00', "%Y-%m-%d") #SAAT = datetime.strftime('2016-05-25 00:00:00', "%H:%M:%S") TARIH = '2016-05-25' SAAT = '00:00:00' FATURA_TIPI = 'SATIS' SATIR_SAYISI = 1 KUR = 1 PARA_BIRIMI = 'TRY' NOTE = [] PARTY_ID = [] A_PARTY_ID = [] FD = [] ADDENTION = [] b_file = load_template('/home/huso/python/gib.xslt') b_file = b64encode(b_file) ea = EClient(KULLANICI_ADI, SIFRE, WSDL) ea.login() if ea.session_id is not None: iskonto = ea.set_allowance_charge(ISKONTO_TUTAR, BIRIM_FIYAT) vergi = ea.set_tax_sub_total(TUTAR, KDV, SIRA_NO, KDV_ORAN); vergi = ea.set_tax_total(KDV, vergi) FD.append(ea.set_invoice_line(SIRA_NO, ADET, UNITCODE, TUTAR, iskonto, vergi, ACIKLAMA, BIRIM_FIYAT)) NOTE.append(ea.set_note('BANKA HESAP NUMARALARI')) NOTE.append(ea.set_note('TL 000000 IBAN: TR00 0000 0000 0000 0000 0000 00')) PARTY_ID.append(ea.set_party_identification(VNR, 'VKN')) post_adress = ea.set_postal_address(ADRES, ILCE, SEHIR, ULKE) contact = ea.set_contact(TEL,FAX,EMAIL) party = ea.set_party(WEB, PARTY_ID, UNVAN, post_adress, VDR, contact, AD, SOYAD) gond = ea.set_gonderen(party) A_PARTY_ID.append(ea.set_party_identification(A_VNR, 'VKN')) party = ea.set_party(A_WEB, A_PARTY_ID, A_UNVAN, post_adress, A_VDR, contact, AD, SOYAD) alici = ea.set_alici(party) vergi_master = ea.set_tax_sub_total(TUTAR, KDV, SIRA_NO, KDV_ORAN); vergi_master = ea.set_tax_total(KDV, vergi_master) alt_toplam = ea.set_alt_toplam(TUTAR, 0, 93) ADDENTION.append(ea.set_additional_document_reference(UUID, TARIH, 'SendingType', 'KAGIT', b_file)) ADDENTION.append(ea.set_additional_document_reference(UUID, TARIH, 'EArchiveType', 'NORMAL', None)) fatura = ea.set_invoice(SENARYO, FATURA_NO, UUID, TARIH, SAAT, FATURA_TIPI, PARA_BIRIMI, SATIR_SAYISI, NOTE, KUR, ADDENTION, gond, alici, vergi_master, alt_toplam, FD) fat_type = ea.set_invoice_type('EARCHIVE', 'N') ea.send_invoice(fat_type, fatura)
Örnek çıktı aşağıdaki şekilde olmalıdır.
(result){ ERROR_DESC = "1 adet fatura içerisinden HTT2016000003885 nolu fatura kaydedilemedi, Hata:Fatura sistemde mevcuttur. Fatura No:HTT2016000003885" INTL_TXN_ID = 1286852990 RETURN_CODE = -1 UUID = "3b9dc28f-ed94-46ad-a37a-7cc45098c2b9" }
İlgili Konular: SOAP için Python soap kullanımı
Yorumlar