makaleler / Python Programlama / python ws-security, nvi sorgulama, tckimlik sorgulama, tckimlik entegrasyon version 2

python ws-security, nvi sorgulama, tckimlik sorgulama, tckimlik entegrasyon version 2

01.03.2011 15:10:29

Selamun Aleykum,

Ortalama 1 hafta önce yazdığım kodda bir mehodu değiştirdim eskisini güncelleme yerine yeni bir başlıkta açmak istedim.

#!/usr/bin/python
#-*- coding:utf-8 -*-

##############################################################################
# Hüseyin Özdemir
# TcKimlikSorgula
# nvi.gov.tr sitesinden tckimlik sorgular ve tckimlik bilgilerini getirir
# 20.02.2011
# Güncelleme 01.03.2011
##############################################################################

#Soap için kurulum paketi
#sudo aptitude install python-soappy
import os, random, time, re, sys
import base64, binascii
import hashlib
import pycurl
import StringIO
from datetime import datetime

os.environ['TZ']    = 'UTC'
WSDL_URL            = '[url]https://kps.nvi.gov.tr:443/Mernis.KPS.Web.si/kps.asmx[/url]'
WSDL_FUNC           = 'TCKimlikNodanKisiBilgisiSorgula'
USERNAME            = 'XXXXXXXX'
PASSWORD            = 'XXXXXXXX'
TCKIMLIKNO          = 'XXXXXXXX'

#-----------------------------------------------------------------------------
# Rasgele 10 haneli sayı oluştur
def passwordOlustur():
    vMakePass   = ""
    vSalt       = random.sample(xrange(10),8)
    for i in vSalt:
        vMakePass += str(i)
    return vMakePass 

#-----------------------------------------------------------------------------
# Sorguya çıkmak için gerekli değerleri oluştur.
def getVariable():
    rndnum      = passwordOlustur()
    nonce       = base64.encodestring(rndnum)
    #nonce       = binascii.b2a_base64(rndnum)
    timestamp   = int(time.time())
    #oluşturma zamanı
    created     = timestamp - 3000
    created     = datetime.fromtimestamp(created)
    created     = created.strftime('%Y-%m-%dT%H:%M:%SZ')
    #session sonlanma zamanı
    expires     = timestamp
    expires     = datetime.fromtimestamp(expires)
    expires     = expires.strftime('%Y-%m-%dT%H:%M:%SZ')
    parola      = hashlib.sha1(rndnum+created+PASSWORD)
    parola      = parola.digest()
    parola      = base64.encodestring(parola)
    #parola      = binascii.b2a_base64(parola)

    print  """
            ------------------------------------------------------------------
            Oluşturulan Değerler
            ------------------------------------------------------------------
            rndnum      :%s
            nonce       :%s
            timestamp   :%d
            created     :%s
            expires     :%s
            parola      :%s
            wsdlfunc    :%s
           """ % (rndnum,nonce,timestamp,created,expires,parola,WSDL_FUNC)
    return (rndnum,nonce,(timestamp),created,expires,parola)

#-----------------------------------------------------------------------------
# Sorgu İçin Header Oluştur
def getHeader(sNonce,sCreated,sExpires,sUserName, sParola):
    securityParams = {
        'PasswordDigest': sParola,
        'Username': sUserName,
        'Nonce': sNonce,
        'Created': sCreated,
        'Expires': sExpires
    }
    header = """
    <SOAP-ENV:Header>
        <wsse:Security SOAP-ENV:mustUnderstand="1">
            <wsu:Timestamp wsu:Id="Timestamp-daf6faf7-798a-4084-a596-44c421ca1c27">
                <wsu:Created>%(Created)s</wsu:Created>
                <wsu:Expires>%(Expires)s</wsu:Expires>
            </wsu:Timestamp>
            <wsse:UsernameToken wsu:Id="SecurityToken-500224e8-41be-4350-a5a6-8de59e7dde8f">
                <wsse:Username>%(Username)s</wsse:Username>
                <wsse:Password Type="[url]http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest[/url]">%(PasswordDigest)s</wsse:Password>
                <wsse:Nonce>%(Nonce)s</wsse:Nonce>
                <wsu:Created>%(Created)s</wsu:Created>
            </wsse:UsernameToken>
        </wsse:Security>
    </SOAP-ENV:Header>""" % securityParams
    return header

#-----------------------------------------------------------------------------
# Sorgu için Msg Oluştur
def getMsg(sTcKimlikNo,sNonce,sCreated,sExpires,sUserName,sParola):
    msg = """<?xml version="1.0" encoding="utf-8"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="[url]http://schemas.xmlsoap.org/soap/envelope/[/url]" xmlns:xsd="[url]http://www.w3.org/2001/XMLSchema[/url]" xmlns:xsi="[url]http://www.w3.org/2001/XMLSchema-instance[/url]" xmlns:wsa="[url]http://schemas.xmlsoap.org/ws/2004/03/addressing[/url]" xmlns:wsse="[url]http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd[/url]" xmlns:wsu="[url]http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd[/url]" xmlns:SOAP-ENC="[url]http://schemas.xmlsoap.org/soap/encoding/[/url]">
    %s
    <SOAP-ENV:Body>
        <TCKimlikNodanKisiBilgisiSorgula xmlns="[url]http://kps.nvi.gov.tr/WS[/url]">
            <list>
                <TCKimlikNoG>
                    <TCKimlikNo>%s</TCKimlikNo>
                </TCKimlikNoG>
            </list>
        </TCKimlikNodanKisiBilgisiSorgula>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
    """ % (getHeader(sNonce,sCreated,sExpires,sUserName, sParola),sTcKimlikNo)
    return msg

#-----------------------------------------------------------------------------
# Hata Kodu kısmını getirir
def getHatakodu(sVal):
    sablon = re.compile('<HataKod>(.*?)</HataKod>', re.DOTALL)
    stil   = sablon.search(sVal)
    return stil.group(1)

#-----------------------------------------------------------------------------
# Sorgu pozisyon kısmını getir
def getSorgupozisyon(sVal):
    try:
        sablon = re.compile('<SorguPozisyon>(.*?)</SorguPozisyon>', re.DOTALL)
        stil   = sablon.search(sVal)
        return stil.group(1)
    except: return '-1'
#-----------------------------------------------------------------------------
# Tckimlikno kısmını getir
def getTckimlikno(sVal):
    try:
        sablon = re.compile('<TCKimlikNo>(.*?)</TCKimlikNo>', re.DOTALL)
        stil   = sablon.search(sVal)
        return stil.group(1)
    except: return '-1'

#-----------------------------------------------------------------------------
# Ad kısmını getir
def getAd(sVal):
    try:
        sablon = re.compile('<Ad>(.*?)</Ad>', re.DOTALL)
        stil   = sablon.search(sVal)
        return stil.group(1)
    except: return '-1'

#-----------------------------------------------------------------------------
# Soyad kısmını getir
def getSoyad(sVal):
    try:
        sablon = re.compile('<Soyad>(.*?)</Soyad>', re.DOTALL)
        stil   = sablon.search(sVal)
        return stil.group(1)
    except: return '-1'

#-----------------------------------------------------------------------------
# Cinsiyet kısmını getir
def getCinsiyet(sVal):
    try:
        sablon = re.compile('<Cinsiyet>(.*?)</Cinsiyet>', re.DOTALL)
        stil   = sablon.search(sVal)
        return stil.group(1)
    except: return '-1'

#-----------------------------------------------------------------------------
# Babaad kısmını getir
def getBabaad(sVal):
    try:
        sablon = re.compile('<BabaAd>(.*?)</BabaAd>', re.DOTALL)
        stil   = sablon.search(sVal)
        return stil.group(1)
    except: return '-1'

#-----------------------------------------------------------------------------
# Baba Soyad kısmını getir
def getBabasoyad(sVal):
    try:
        sablon = re.compile('<BabaSoyad>(.*?)</BabaSoyad>', re.DOTALL)
        stil   = sablon.search(sVal)
        return stil.group(1)
    except: return '-1'

#-----------------------------------------------------------------------------
# Ana adı kısmını getir
def getAnaad(sVal):
    try:
        sablon = re.compile('<AnaAd>(.*?)</AnaAd>', re.DOTALL)
        stil   = sablon.search(sVal)
        return stil.group(1)
    except: return '-1'

#-----------------------------------------------------------------------------
# Ana Soyad kısmını getir
def getAnasoyad(sVal):
    try:
        sablon = re.compile('<AnaSoyad>(.*?)</AnaSoyad>', re.DOTALL)
        stil   = sablon.search(sVal)
        return stil.group(1)
    except: return '-1'

#-----------------------------------------------------------------------------
# Doğum tarihi kısmını getir
def getDogumtarihi(sVal):
    try:
        sablon = re.compile('<DogumTarih><Yil>(.*?)</Yil><Ay>(.*?)</Ay><Gun>(.*?)</Gun></DogumTarih>', re.DOTALL)
        stil   = sablon.search(sVal)
        return stil.group(1) + "-" + stil.group(2)  + "-" + stil.group(3)
    except: return '-1'

#-----------------------------------------------------------------------------
# Doğum yeri kısmını getir
def getDogumyeri(sVal):
    try:
        sablon = re.compile('<DogumYer>(.*?)</DogumYer>', re.DOTALL)
        stil   = sablon.search(sVal)
        return stil.group(1)
    except: return '-1'

#-----------------------------------------------------------------------------
# Kızlık Soyadı kısmını getir
def getKizliksoyadi(sVal):
    try:
        sablon = re.compile('<KizlikSoyad>(.*?)</KizlikSoyad>', re.DOTALL)
        stil   = sablon.search(sVal)
        return stil.group(1)
    except: return '-1'

#-----------------------------------------------------------------------------
# Özür Oran kısmını getir
def getOzuroran(sVal):
    try:
        sablon = re.compile('<OzurOran>(.*?)</OzurOran>', re.DOTALL)
        stil   = sablon.search(sVal)
        return stil.group(1)
    except: return '-1'

#-----------------------------------------------------------------------------
# Durum kısmını getir
def getDurum(sVal):
    try:
        sablon = re.compile('<Durum>(.*?)</Durum>', re.DOTALL)
        stil   = sablon.search(sVal)
        return stil.group(1)
    except: return '-1'

#-----------------------------------------------------------------------------
# Medeni Hal kısmını getir
def getMedenihal(sVal):
    try:
        sablon = re.compile('<MedeniHal>(.*?)</MedeniHal>', re.DOTALL)
        stil   = sablon.search(sVal)
        return stil.group(1)
    except: return '-1'

#-----------------------------------------------------------------------------
# Din kısmını getir
def getDin(sVal):
    try:
        sablon = re.compile('<Din>(.*?)</Din>', re.DOTALL)
        stil   = sablon.search(sVal)
        return stil.group(1)
    except: return '-1'

#-----------------------------------------------------------------------------
# Ölüm tarihi kısmını getir
def getOlumtarihi(sVal):
    try:
        sablon = re.compile('<OlumTarih><Yil>(.*?)</Yil><Ay>(.*?)</Ay><Gun>(.*?)</Gun></OlumTarih>', re.DOTALL)
        stil   = sablon.search(sVal)
        return stil.group(1) + "-" + stil.group(2)  + "-" + stil.group(3)
    except: return '-1'

#-----------------------------------------------------------------------------
# Ölüm yer kısmını getir
def getOlumyeri(sVal):
    try:
        sablon = re.compile('<OlumYer>(.*?)</OlumYer>', re.DOTALL)
        stil   = sablon.search(sVal)
        return stil.group(1)
    except: return '-1'

#-----------------------------------------------------------------------------
# İl kodu kısmını getir
def getIlkodu(sVal):
    try:
        sablon = re.compile('<IlKod>(.*?)</IlKod>', re.DOTALL)
        stil   = sablon.search(sVal)
        return stil.group(1)
    except: return '-1'

#-----------------------------------------------------------------------------
# İl Adı kısmını getir
def getIladi(sVal):
    try:
        sablon = re.compile('<IlAd>(.*?)</IlAd>', re.DOTALL)
        stil   = sablon.search(sVal)
        return stil.group(1)
    except: return '-1'

#-----------------------------------------------------------------------------
# İlçe kodu kısmını getir
def getIlcekodu(sVal):
    try:
        sablon = re.compile('<IlceKod>(.*?)</IlceKod>', re.DOTALL)
        stil   = sablon.search(sVal)
        return stil.group(1)
    except: return '-1'

#-----------------------------------------------------------------------------
# İlçe Adı kısmını getir
def getIlceadi(sVal):
    try:
        sablon = re.compile('<IlceAd>(.*?)</IlceAd>', re.DOTALL)
        stil   = sablon.search(sVal)
        return stil.group(1)
    except: return '-1'

#-----------------------------------------------------------------------------
# Cilt kodu kısmını getir
def getCiltkodu(sVal):
    try:
        sablon = re.compile('<CiltKod>(.*?)</CiltKod>', re.DOTALL)
        stil   = sablon.search(sVal)
        return stil.group(1)
    except: return '-1'

#-----------------------------------------------------------------------------
# Cilt Adı kısmını getir
def getCiltadi(sVal):
    try:
        sablon = re.compile('<CiltAd>(.*?)</CiltAd>', re.DOTALL)
        stil   = sablon.search(sVal)
        return stil.group(1)
    except: return '-1'

#-----------------------------------------------------------------------------
# Aile sıra no kısmını getir
def getAilesirano(sVal):
    try:
        sablon = re.compile('<AileSiraNo>(.*?)</AileSiraNo>', re.DOTALL)
        stil   = sablon.search(sVal)
        return stil.group(1)
    except: return '-1'

#-----------------------------------------------------------------------------
# Birey sıra no kısmını getir
def getBireysirano(sVal):
    try:
        sablon = re.compile('<BireySiraNo>(.*?)</BireySiraNo>', re.DOTALL)
        stil   = sablon.search(sVal)
        return stil.group(1)
    except: return '-1'

#-----------------------------------------------------------------------------
# XML Parse et
def XMLParse(sXmlVal):
    HataKod = getHatakodu(sXmlVal)
    if HataKod != '0':
        print "Geçersiz Sorgulama" 
        sys.exit()
    responseParams = {
        'HataKod'       : HataKod,
        'SorguPozisyon' : getSorgupozisyon(sXmlVal),
        'TcKimlikno'    : getTckimlikno(sXmlVal),
        'ad'            : getAd(sXmlVal),
        'soyad'         : getSoyad(sXmlVal),
        'cinsiyet'      : getCinsiyet(sXmlVal),
        'BabaAd'        : getBabaad(sXmlVal),
        'BabaSoyad'     : getBabasoyad(sXmlVal),
        'AnaAd'         : getAnaad(sXmlVal),
        'AnaSoyad'      : getAnasoyad(sXmlVal),
        'DogumTarihi'   : getDogumtarihi(sXmlVal),
        'DogumYeri'     : getDogumyeri(sXmlVal),
        'KizlikSoyadi'  : getKizliksoyadi(sXmlVal),
        'OzurOran'      : getOzuroran(sXmlVal),
        'durum'         : getDurum(sXmlVal),
        'MedeniHal'     : getMedenihal(sXmlVal),
        'Din'           : getDin(sXmlVal),
        'OlumTarihi'    : getOlumtarihi(sXmlVal),
        'OlumYeri'      : getOlumyeri(sXmlVal),
        'IlKodu'        : getIlkodu(sXmlVal),
        'IlAdi'         : getIladi(sXmlVal),
        'IlceKodu'      : getIlcekodu(sXmlVal),
        'IlceAdi'       : getIlceadi(sXmlVal),
        'CiltKodu'      : getCiltkodu(sXmlVal),
        'CiltAdi'       : getCiltadi(sXmlVal),
        'AileSiraNo'    : getAilesirano(sXmlVal),
        'BireySiraNo'   : getBireysirano(sXmlVal)
    }
    return responseParams
    

#-----------------------------------------------------------------------------
# görüntüle dönen değerleri
def getResponse(sXmlParse):
    print """
            HataKod         = %(HataKod)s
            SorguPozisyon   = %(SorguPozisyon)s
            Tckimlikno      = %(TcKimlikno)s
            Ad              = %(ad)s
            Soyad           = %(soyad)s
            cinsiyet        = %(cinsiyet)s
            Baba Adı        = %(BabaAd)s
            Baba Soyadı     = %(BabaSoyad)s
            Ana Adı         = %(AnaAd)s
            Ana Soyad       = %(AnaSoyad)s
            Doğum Tarihi    = %(DogumTarihi)s
            Doğum Yeri      = %(DogumYeri)s
            Kızlık Soyadi   = %(KizlikSoyadi)s
            Özür Oran       = %(OzurOran)s
            Durum           = %(durum)s
            Medeni Hal      = %(MedeniHal)s
            Din             = %(Din)s
            Ölüm Tarihi     = %(OlumTarihi)s
            Ölüm Yeri       = %(OlumYeri)s
            İl Kodu         = %(IlKodu)s
            İl Adi          = %(IlAdi)s
            İlçe Kodu       = %(IlceKodu)s
            İlçe Adi        = %(IlceAdi)s
            Cilt Kodu       = %(CiltKodu)s
            Cilt Adı        = %(CiltAdi)s
            Aile Sıra No    = %(AileSiraNo)s
            Birey Sıra No   = %(BireySiraNo)s
          """ % (XMLParse(sXmlParse))

#-----------------------------------------------------------------------------
# Proses buradan başlıyor
if __name__ == "__main__":
    vRndnum,vNonce,vTimestamp,vCreated,vExpires,vParola = getVariable()
    msg     = getMsg(TCKIMLIKNO,vNonce,vCreated,vExpires,USERNAME, vParola)
    body    = msg

    headers =  [
                "User-Agent: python",
                "Content-Type: text/xml; charset=utf-8",
                'SOAPAction: "http://kps.nvi.gov.tr/WS/TCKimlikNodanKisiBilgisiSorgula"'
               ]
    SIO    = StringIO.StringIO()
    try:
        ch     = pycurl.Curl()
        ch.setopt(ch.URL,WSDL_URL)
        ch.setopt(ch.FOLLOWLOCATION, True)
        ch.setopt(ch.HEADER,True)
        #ch.setopt(ch.RETURNTRANSFER, 1)
        ch.setopt(ch.TIMEOUT, 30)
        ch.setopt(ch.SSL_VERIFYPEER, False)
        ch.setopt(ch.SSL_VERIFYHOST, False)
        ch.setopt(ch.HTTPHEADER,headers)
        ch.setopt(ch.POST,True)
        ch.setopt(ch.POSTFIELDS,body)
        ch.setopt(ch.WRITEFUNCTION, SIO.write)
        ch.perform()
        ch.close()
    except: 
        print "Bağlantı hatası"
        sys.exit()
    xmlval = SIO.getvalue()
    getResponse(xmlval)
    #print XMLVal


ilgili konular
python ws-security, tckimlik sorgulama, nvi sorgulama, nvi entegrasyon
python tc kimlik numarası üretme
yazar husonet

Yorumlar

Bu içerik için sizde yorum yapabilirsiniz!
anasayfa | makaleler | haberler | dosyalar | linkler | hakkımızda