Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

XML/WSDL/Web Servis/SOAP/PHP - imdat


di

Öne çıkan mesajlar

Ya kac gundur ugrasiyorum sununla. Allak bullak olmam kafamin iyice karismasi bir yana cozemiyorum + anlamiyorum.

Daha once kullandigim bir teknoloji degil, bildigim birsey hic degil ve sefim benden gelip herseyi iki dakikada cozmemi bekliyor. Dokuman okuyayim diyorum 'is uzamasin yap hemen ne var ki' deniyor ama gelin gorun ki yapabilecek kimse de yok.

Nette arastirdim biraz ama anlayabilecegim, hemen uygulayabilecegim tarzda bir anlatimla, ornekle karsilasmadim.

Sadede gelirsem;
Ben su asagida linkini verdigim web servis ustunden gumruk tescil belgesi kontrolu yapmak istiyorum. Hic bir dokuman anlatim sunulmadi bunun disinda bana. Elimdeki beyannameye ve bu belgeye gore bir xml cikardim ve saniyorum ki dogru ama nasil kontrol edecegimi bilmiyorum.

$client = new SoapClient diyorum eyvallah da gerisi yok. Gordugum inceledigim orneklerde webservice'in fonksiyonlarindan falan bahsediyor ama ben fonksiyon neyim goremedim/bulamadim. Zira daha once dedigim gibi bilmedigim anlamadigim bir olay.

http://bilgewebservisler.gumruk.gov.tr/Gumruk.Biztalk.Integration.Schemas/Tescil.asmx?WSDL

Sefim beni en fazla yemege kadar rahat birakir, sonra kiyamet kopar. Beni kurtaracak, sunlari anlatacak birini ariyorum. Durum ismarlicam hatta. (Racta ve Müm'e findik fistik atiyorum ayrica burdan. Ozellike Racta'ya : p )
Link to comment
Sosyal ağlarda paylaş

şimdi elinde doğru olduğuna inandığın bir xml varsa zaten (ki bunu php kullanarak programatik oluşturduğunu varsayıyorum..), yapacağın tek şey bu xml'i .asmx sayfasına post etmek. fazlası değil ;)

ayrıca asp.net web servisinden bahsederken insanlara, ?wsdl olarak gösterme. öncelikle gerekli değil ;) zira nasıl request ve response alacağın doğrudan asmx sayfasında bulunuyor.. tek yapman gereken de aynı oradaki (misal soap 1.2) gibi xml'i post edip (yani server request), daha sonra server'dan gelecek response'u beklemek.. o response'taki veriyi de yine işlemek vs..

elimdeki xml'i nasıl test ederim demişsin.. dediğim gibi bir php sayfa yap ve o xml'i bahsettiğin web servise post et.. tek yapacağın bu... bunun dışında tek yolu, field'ları müşterideki web servisiyle eşleşen bir asp.net web servis yapmak ki bu mantıklı değil zaten.
Link to comment
Sosyal ağlarda paylaş

php.net'deki manual'dan anladigim kadariyle 3-5 satir birsey yazdim ve hepsinde gerekli ilk sey


$client = new SoapClient("wsdl_urlsi");



diyerek bir soapclient nesnesi olusturmak. burada url olarak ilk mesjda verdigim wsdl linkini verdigimde ilginc sekilde timeout oluyor calistirdigim kod. buna karsin belgeyi dosya.wsdl olarak farkli bir konuma koydugumda (local sunucu ya da bir site ustune) sorunsuz olarak yaratabiliyorum soapclient nesnesini.

bir ikincisi ise bu adrese veriyi xml olarak post etmekle ilgili bir ornek goremedim, bulamadim. bu kismini bir halletsem gerisini alacagim hata mesajlarindan hallederim zaten bi sekil.
Link to comment
Sosyal ağlarda paylaş

öncelikle php ve php web servisleri hakkında bir fikrim yok. ama senin post edeceğin web servis, asp.net web servisi.. yani senin php (ya da herhangi bir server-side dil) kullanarak sadece xml'i post etmen yeterli. server-side'ı geçtim, client-side olarak javascript xmlhttprequest nesnesi ile post etsen bile olur ;) burada artık bir sorun yok sanırım?

o adreste nasıl göremezsin yahu? bunu konuştmuştuk diye hatırlıyorum =) "Schema"ya bakacaksın.. orada "The following is a sample SOAP 1.2 request and response. The placeholders shown need to be replaced with actual values." yazıyor misal ^^ altında da response ve request örneği ;)

haydi kolay gele =)
Link to comment
Sosyal ağlarda paylaş

ben de tam bi xml parsing üzerine uğraş sarfediyordum.. :D

Şimdi parsing dediğimiz olay basit efenim :D

Once xml'i alıyoruz sunucumuza çekiyoruz, bir de belki güncellenen bir xmldir diyoruz ve auto download a bağlıyoruz belli zaman aralıklarında günde 1 kez gibi..

$gun = date('d');
$ay = date('m');
$yil = date('y');
$saat=date('G');
$dakika=date('i');
$bugun = mktime(0,0,0,$ay,$gun,$yil,0);
if(file_exists("path/to/file/from/root/gun.txt")) {
$f=fopen("path/to/file/from/root/gun.txt","r");
$gecmisgun = trim(fgets($f, 1024));
$gecmisay = trim(fgets($f, 1024));
$gecmisyil = trim(fgets($f, 1024));
fclose($f);
$dun = mktime(0,0,0,$gecmisay,$gecmisgun,$gecmisyil);
if($bugun > $dun && (($saat >= 18 && $dakika >= 30) || $saat >= 17)) { //// 17:30'da işlemi tekrarlatır..
copy("http://hebele.com.tr/pathtoxml/xml.xml","where/to/save/aq/xml.xml");
$f=fopen("path/to/file/from/root/gun.txt","w");
fwrite($f, date("dnmny"));
fclose($f);
}
} else {
copy("http://hebele.com.tr/pathtoxml/xml.xml","where/to/save/aq/xml.xml");
$f=fopen("path/to/file/from/root/gun.txt","w");
fwrite($f, date("dnmny", time()-86400));
fclose($f);
}



Daha sonra, arrayliyoruz verilerimizi artık, hangi verileri neye çevirip nasıl çağıracaksan, sen karar ver :D

$kurkodlari = array(
"arrayofxxx" => "xxxxx",
"arrayofxxx" => "xxxxx",
"arrayofxxx" => "xxxxx",
"arrayofxxx" => "xxxxx",
"arrayofxxx" => "xxxxx",
...
);



xml alanları gene bir arrayleme mevcut, değerleri felan çağırma amaçlı.. Daha uzatılabilir...


$xmlalanlari = array(
"asd" => "cfd",
"asd" => "cfd",
"asd" => "cfd",
"asd" => "cfd",
"asd" => "cfd",
"asd" => "cfd",
);


xml i çekiyoz kur dosyasına eşitliyok

$kurdosyasi = file_get_contents("where/to/save/aq/xml.xml");


xml alanları isimli değişken aranıyor değerler $degerler adlı bir array de toplanıyor..
ben uzerinde çalıştığım kodu verdim burda, sen bunu kendine göre düzenlersin.. Çoğunu düzenliceğin gibi :D

preg_match("'<Tarih_Date Tarih="(.*)" Date="(.*)">'Uis",$kurdosyasi,$tarih);
$tarih = date("d-m-y",strtotime($tarih[2]));


foreach($kurkodlari as $kod => $dummy){
foreach($xmlalanlari as $alanadi => $alanaditurkce){
preg_match("'<Currency Kod="(".$kod.")".*><".$alanadi.">(.*)</".$alanadi.">(.*)</Currency>'Uis",$kurdosyasi,$deger);
$kurlar[$kod][$alanaditurkce] = $deger[2];
}
}


Bu değerleri şimdi istediğin yerde, şu şekilde çağırabilirsin..

<?php
echo $kurlar['array1deger2']['array2deger2'];
?>



Kolay gele.
Link to comment
Sosyal ağlarda paylaş

Hehe.. ya dun gece ben kendi problemimle okurken yanlış anlamışım.. :D

senin dediğini TC Kİmlik Doğrularken kullanıyoruz.. Hazır scriptleri de var..

Birini vereyim hemen :D

<?php
/*
** Copyright (c) 2006 Kadir GÜLAĞIZ

** Bu sayfa PHP+Soap uygulamasıdır.Bu sayfada http://tckimlik.nvi.gov.tr(Nufus Müdürlüğü) adresinin web servisi
** kullanılarak TC kimlik Doğrulaması yapılmaktadır.Bunun için nüfus müdürlüğünün web servis hizmeti kullanılmıştır.

** Bu sayfadaki bilgiler tamamen serbest dolaşabilir.İstenildiği gibi değiştirilebilir.
** İstenildiği gibi yayınlanabilir.Bu tamamiyle size kalmış.

** Bu sayfa PHP+Soap kullanımını öğrenmek isteyenlere başlangıç kaynağı olarak kullanılabilir.Kodlar içinde
** hiçbir hazır kütüphane kullanılmamıştır.

** Bu sayfayla ilgili tüm önerilerinizi ve eleştirilerinizi
** [email protected] adresine bekliyorum.

** Sakarya Üniversitesi Bilgisayar Mühendisliği 3 .sınıf
** http://kGlznet.kayyo.com
*/
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-9" />
<title>T.C. Kimlik Sorgulama...</title>
<style type="text/css">
<!--
.style2 {
font-size: 14px;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-weight: bold;
}

.style3 {
font-size: 12px;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-weight: bold;
}
-->
</style>
</head>

<body>
<?php
/* Öncelikle Nüfus Müdürlüğünün web servis hizmetini kullanabilmek için gereken adresi bilmeliyiz.
** soruişareti(?)'den sonra "wsdl" uzantısı olmalı.
** bu adresi öğrendikten sonra bir SOAP nesnesi oluşturmalıyız.aşağıdaki tek satırlık kod bir
** SoapClient nesnesi oluşturmaktadır.Soap Nesnesi oluşturalım ki,nüfus müdürlüğünün web servisi
** içindeki fonksiyonları kullanabilelim.
*/
$soap=new SoapClient("http://tckimlik.nvi.gov.tr/kpsPublic.asmx?wsdl");
?>
<div align="center">
<form id="form1" name="form1" method="post" action="">


<table width="350" border="1" cellpadding="0" cellspacing="0" bordercolor="#FF0000">
<tr>
<td><div align="center">
<table width="300" border="0">
<tr>
<td><div align="center" class="style2">T.C. Kimlik Numaranızı Giriniz..: </div></td>
</tr>
<tr>
<td><div align="center">
<input name="txtkno" type="text" id="txtkno" size="20" />
</div></td>
</tr>
<tr>
<td><div align="center">
<input type="submit" name="Submit" value="Sorgula..." />
</div></td>
</tr>
</table>
</div></td>
</tr>
</table>
</form>

<?php
/*
**Buradaki kodlar sayfa post edildikten sonra kullanaılabilecekler.
*/
if($_POST)
{
/*
** Aşağıdaki fonksiyon türkçe karakterler dönüştürme fonksiyonudur.
** biz Nüfüs müdürlüğünün web servisini kullanarak verileri çektiğimizde , o veriler utf-8 formatındadırlar.
** yani bizim "İ" olmasını beklediğimiz harfimiz "Ä°" şeklinde gelmektedir.
** Bunu düzeltebilmek için bir fonksiyon kullanıyoruz.Böylece yanlış gelen harfler
** düzeltilerek kullanıcıya doğru bir şekilde gösterilmektedir.
*/
function turkce_karakterler($tck)
{
$tck=str_replace("Ä°","İ",$tck);
$tck=str_replace("Ãœ","Ü",$tck);
$tck=str_replace("Äž","Ğ",$tck);
$tck=str_replace("Å?","Ş",$tck);
$tck=str_replace("Ç","Ç",$tck);
$tck=str_replace("Ö","Ö",$tck);
return $tck;
}
/*
**Aşağıdaki tek satrılık kod ,nufus müdürlüğünün("http://tckimlik.nvi.gov.tr") web servisinin bize sunmuş olduğu
** fonksiyonlardan biridir."TCKimlikNoDogrula" fornksiyonu sayfamızdaki tckimlik numaramızı yazdığımız text kutusunun
** degerini alır.Böylece biz tckimlik numarasının aranması işlemini nufus müdürlüğünün web servisi
** üzerine atarız.Böylece gönderdiğimiz numara nufus müd. web servisinde aranır.XML verisi halinde olduğu içinde
** array kullanmamız gerekmektedir.
** peki neden *1(bir ile çarptık)?
** Çünkü "TCKimlikDogrula" fonksiyonu long veri tipindedir.
** bizim text kutumuz string bir değer gönderir.biz onu *1 ile sayısal hale getiririz.
**Eğer *1 i silersek , sorgulama çalışmaz.isterseniz deneyin!!!
*/
$tc=$soap->TCKimlikNoDogrula(array("tcKimlikNo"=>$_POST['txtkno']*1));
/*
** Aşağıdaki array yapısı şunun içindir.Şimdi hemen http://tckimlik.nvi.gov.tr/Web/WebServices.aspx adresine gidin.
** aşağıda çıkan linki tıklayın.(XML web servisleri dokumantasyonu)
** Orada web servisinin bize kullanmamız için free olarak fonksiyonları görülmektedir.
** biz "TCKimlikNoDogrula" fonksiyonunu kullanmaktayız.O fonksiyonu tıklayınca karşınıza XML sayfası gelir.
** O XML sayfasında "TCKimlikNoDogrula" etiketi vardır.biz onu yukarıdaki tek satrılık kod ile kullandık.
** Aşağıya inerseniz orada birde "TCKimlikNoDogrulaResult" etiketini göreceksiniz.Oranın içeriğine bakınca
** aşağıdaki array yapısının etiketlerini göreceksiniz.
** yani biz "TCKimlikNoDoğrula" etiketine text kutumuzdaki numarayı gönderdiğimizde
** bize "TCKimlikNoDogrulaResult" etiketi geri bildirim yapıp , o tckimlik numarasının bilgilerini bize geri döndürür.
** Böylece nufus müdürlüğünün web servisini kullanmış oluruz.
*/
$bilgiler=array("TCKimlikNo" => "T.C. Kimlik Numaranız..:",
"Ad" => "Adınız..:",
"Soyad"=>"Soyadınız..:",
"DogumYil"=>"Doğum Yılınız..:");
/*
** Şimdi gelelim verileri ekrana yazdırmaya.
** bir foreach döngüsü kullanrak "TCKimlikNoDogrulaResult" fonksiyonu vasıtasıyla
** bilgileri ekrana yazıyoruz.hemde utf-8 formatında gelen verileri turkce_karakterler fonksiyonunu
** kullanarak iso-8859-9 formatındaymış gibi ekrana basıyoruz.
** işte bu kadar.
*/
echo "<table border="1" width="350" cellpadding="0" cellspacing="0" bordercolor="#FF0000">";
foreach($bilgiler as $deger => $metin)
{
echo "<tr><td><div align="left" class="style3">".$metin."</div></td>
<td>".turkce_karakterler($tc->TCKimlikNoDogrulaResult->$deger)."</td></tr>";
}
echo "</table>";

}

/*
** Bu kodlar PHP+SOAP uygulamalarına yeni başlayan arkadaşlara iyi bir
** başlangıç kaynağı olaağına inanıyorum.Bu sayfadaki kodlar denemiştir
** ve çalışıyo arkadaşlar.İnşallah yardımım olmuştur.Sizlere başarılar
** ve kolay gelsin...
*/
?>
</div>
</body>
</html>


Mantığını anlarsın muhtemelen :D
Link to comment
Sosyal ağlarda paylaş

×
×
  • Yeni Oluştur...