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

SOAP - PHP


jonq

Öne çıkan mesajlar

Yapmakta olduğum bir projede SMS ile onay alınması gereken bir durum mevcut. Bunun içinde anlaşılan SMS sunucusu hizmeti veren firmada bu işi SOAP ile yapmışlar.

SOAP'a ilk defa bulaştım ( bulaşmaz olaydım ) ama internette doğru dürüst bir kaynak yok. Aynı kodları değişkenleri değiştirip ezbere cümlelerle kopyala yapıştır yapmışlar sanki. Bir noktada kitlendim kaldım, bir çözümde bulamadım.

Nette yaptığım araştırmaya göre bu işlemleri 3 ayrı dosyada halletmem gerekiyormuş.

1. dosya SoapClient işlemleri
2. dosya SoapServer
3. dosya WSDL dosyası


$client = new SoapClient($wsdl, array('trace' => $trace, 'exceptions' => $exceptions));
$response = $client->startMobile($xml_array);


1. Dosya da SMS sunucusunun istediği parametreleri hazırlayıp soapclient ile bana verilen SMS sunucusundaki WSDL linkine post ediyorum. Sunucu ise bu bilgileri sorunsuz aldığına dair bana "OK" dönüyor. Cep telefonuma SMS de sorunsuz geliyor. Bu noktada bir sıkıntım yok.

Kullanıcıya gönderilen SMS'in onaylanması için 5dk ya kadar bir süre var ve bu süre içinde kullanıcı onaylar yada onaylamaz ise sunucu bana SMS'in son durumu ile ilgili tekrar geri dönüş yapıyor.

Sorunum ise ben bu geri dönüşü tekrar nasıl yakalayacağımı çözemedim. Kendi hostumda bir WSDL dosyası oluşturup SMS sunucusunun post etmesi için linkini de onlara verdim. Ancak bundan sonrası meçhul.

Misal, Soapserver'in ne işe yaradığını anlamış değilim. 3-5 satır bir kodu bir dosyaya yazıp bırakıyoruz.
Bu konuda bana yardımcı olabilecek birileri var mı ? Kod yazmanızı istemiyorum daha çok bu işin hangi mantıkta çalıştığını anlatabilirmisiniz ?
Link to comment
Sosyal ağlarda paylaş

Sana sadece ok gelmez array dump ettiginde gonderdigin islemin id bilgiside gelir.

yada tam tersi sen ne gonderirsen o geri gelebilir eger id yoksa id degiskeni bulup onu gonderip daha sonra o id nodan kontrol ettirebilirsin.

ama mutlaka sistemin otomatik atadigi bir id vardir. O idye gore ne zaman istersen sorfulama yapman lazim
Link to comment
Sosyal ağlarda paylaş

Gladmir saolsun baya yardımcı oldu sistemi anlamam da ama şu an başka bir sorunum var. Normalde XML parse ederken sorun yaşamamıştım ama bunda nedense istediğim sonuca ulaşamıyorum.

Tüm işlemlerin sonucunda karşı sunucudaki API bana en son bu veriyi POST ediyor.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<MobilePaxWEBStart xmlns="http://mobilepax.com/">
<TransactionId>f0e3dd9d-15ce-4f86-9c00-5fb9f9abd065</TransactionId>
<ChargingOK>false</ChargingOK>
</MobilePaxWEBStart>
</soap:Body>
</soap:Envelope>

file_get_contents('php://input'); ile POST edilen veriyi yakalayıp işlemleri yapmaya çalışıyorum.

$arq = file_get_contents('php://input');
$xml = simplexml_load_string($arq);
var_dump($xml);


Yukarıdaki şekilde simplexml_load_string ile çekmeye çalıştığımda bana object(SimpleXMLElement)#1 (0) {} şeklinde boş bir sonuç döndürüyor.


$doc = new DOMDocument();
$doc->loadXML($arq);
$datas = $doc->getElementsByTagName("MobilePaxWEBStart");
foreach( $datas as $data ){
$mesaj = $data->getElementsByTagName("TransactionId");
$tranid = $mesaj->item(0)->nodeValue;
$aut=$data->getElementsByTagName("ChargingOK")
$charging = $aut->item(0)->nodeValue;
}
var_dump($data);


yukarıdaki gibi bir işlem denediğimde şöyle birşey dönüyor ancak ben istediğime nasıl ulaşacağımı çözemedim.



object(DOMElement)#3 (18) {
[tagName]=>
string(17) "MobilePaxWEBStart"
[schemaTypeInfo]=>
NULL
[nodeName]=>
string(17) "MobilePaxWEBStart"
[nodeValue]=>
string(60) "
f0e3dd9d-15ce-4f86-9c00-5fb9f9abd065
false
"
[nodeType]=>
int(1)
[parentNode]=>
string(22) "(object value omitted)"
[childNodes]=>
string(22) "(object value omitted)"
[firstChild]=>
string(22) "(object value omitted)"
[lastChild]=>
string(22) "(object value omitted)"
[previousSibling]=>
string(22) "(object value omitted)"
[nextSibling]=>
string(22) "(object value omitted)"
[attributes]=>
string(22) "(object value omitted)"
[ownerDocument]=>
string(22) "(object value omitted)"
[namespaceURI]=>
string(21) "http://mobilepax.com/"
[prefix]=>
string(0) ""
[localName]=>
string(17) "MobilePaxWEBStart"
[baseURI]=>
string(31) "/home/vomopay/public_html/bayi/"
[textContent]=>
string(60) "
f0e3dd9d-15ce-4f86-9c00-5fb9f9abd065
false
"
}



Bana lazım olan ve değerleri, daha sonra da bu işlemlerle veritabanına gerekli bilgileri işleyeceğim.
Link to comment
Sosyal ağlarda paylaş

Kastettiğin bu ise Soapclient ile verileri post ettikten sonra dönen

$client = new SoapClient($wsdl, array('trace' => $trace, 'exceptions' => $exceptions));
$response = $client->startMobilePax($xml_array);
var_dump($response);


dump sonucu bu çıkıyor.

object(stdClass)#2 (1) {
[startMobilePaxResult]=>
object(stdClass)#3 (3) {
[status]=>
string(2) "OK"
[errcode]=>
string(0) ""
=>
string(36) "b8c2887b-021d-40d2-a379-76394d123bf8"
}
}
Link to comment
Sosyal ağlarda paylaş

E tamam tranid de vermiş işte?

Oncelikle kendi sistemindede bir adet id belirle. Sqlini suna göre yap

Id tel sms tranid sonuc hata durum

Status ok ise sunlarimyazdir

İd tel sms gelentranid 1 null null

Ok degilse

İd tel sms gelentranid 0 hatamesaji null

Daha sonra ok olup durumu null olan kayitlar icin soap ile baglan tranid ye gore ulasip ulasmadıgını ıgrenip editle var olan fieldi ulasti yada ulasmadi seklinde
Link to comment
Sosyal ağlarda paylaş

O kısımları hallettim. En son bana son durum ile ilgili bir veri daha POST luyor aşağıdaki şekilde. Bunu parse edip içindekileri ayrıca çekemedim.


<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<MobilePaxWEBStart xmlns="http://mobilepax.com/">
<TransactionId>f0e3dd9d-15ce-4f86-9c00-5fb9f9abd065</TransactionId>
<ChargingOK>false</ChargingOK>
</MobilePaxWEBStart>
</soap:Body>
</soap:Envelope>


Yukardaki yi çekip DB de daha önce kayıt ettiğim yerdeki TRid ile açtığım fieldde kısmını güncellemem lazım. Öncekinde Soapclient kullanmıştım o kısmı hallettim ama bu dosyada file_get_contents("php://input") ile yakaladığım için yukardaki veriyi parse etmem gerekiyor. Denediğim yöntemlerle sonuca ulaşamadım.
Link to comment
Sosyal ağlarda paylaş

$_POST bana array(0) {} döndürüyor
simplexml_load_string ise object(SimpleXMLElement)#1 (0) {} döndürüyor

$xml = file_get_contents('php://input'); ise var_dump($xml); yaptığımda bana alttakini gösteriyor.



<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="[www.w3.org]; xmlns:xsd="[www.w3.org]; xmlns:soap="[schemas.xmlsoap.org];
<soap:Body>
<MobilePaxWEBStart xmlns="[mobilepax.com];
<TransactionId>f0e3dd9d-15ce-4f86-9c00-5fb9f9abd065</TransactionId>
<ChargingOK>false</ChargingOK>
</MobilePaxWEBStart>
</soap:Body>
</soap:Envelope>



Yukarıdaki kodu nasıl parse edebilirim çözemedim.
XMLReader a bakayım
Link to comment
Sosyal ağlarda paylaş

O halde sana POST ile gelmiyor o data.

PHP'de XML parse olayi biraz uyuz bi is. Var_dump ya da turevleri ile debug edemiyosun resource'u her zaman. Haliyle bir ornek neyim bulup onun ustunden gitmen daha hayirli olur.

XMLReader'a bak bi de. Onun kullanimi nispeden daha rahat.
Link to comment
Sosyal ağlarda paylaş

Soap cevabinda bazi uyuzluklar var standard XML'e gore, ondan isini gormedi muhtemelen.

Ya dogru yolu bu degil ama tek lazim olan transaction ID ise kafana gore pars et gitsin o zaman. Response zaten ufak, cak bi regex ya da iki tane explode olsun bitsin.

Yok dogru sekilde yapayim diyosan da go go soap client.

Ama su kadarini diyeyim, bunca senedir su islerle ugrasiyorum, soz konusu PHP olunca SOAP ve XML gibi illet gormedim henuz.
Link to comment
Sosyal ağlarda paylaş

×
×
  • Yeni Oluştur...