Pythontr

husonet | Tarih: 01.03.2011

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

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 = 'https://kps.nvi.gov.tr:443/Mernis.KPS.Web.si/kps.asmx'
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="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">%(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="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/03/addressing" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
%s
<SOAP-ENV:Body>
<TCKimlikNodanKisiBilgisiSorgula xmlns="http://kps.nvi.gov.tr/WS">
<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