Kısaca yoldan işini çözmeye çalışalım.
Rooter class ını tanımlayalım.
class SoapIslemci
{
public $SOAP; // SOAP değişkenini her yerde kullanmak için public kullandık ama bu class ın dışında kullanmak istemiyorsan private kullanabilirsin.
public $username = ''; // Birden fazla kullanıcılı işlem ise değişkeni class a ekledim
public $password = '';// Birden fazla kullanıcılı işlem ise değişkeni class a ekledim
public function __construct()
{
// Tanımladığımız SOAP değişkenine Soap Client ini çalıştırıp atamasını yaptık böylelikle 1 adet instanse oluşturmuş olduk tekrar tekar login olmamızı engelleyecek.
$this->SOAP = $client = new SoapClient("https://$degisken/soap.wsdl", array("location"=>"https://$degisken/soap/"));
try {
$this-SOAP->__soapCall('Login',array('username'=>$this->username,'password'=>$this->password));
} catch (Exception $e){
echo $e->getMessage();
exit;
}
}
public function mainProcess($arr = array())
{
}
public function __destruct()
{
$this->SOAP->__soapCall('Logout',$variables);
}
}Araya istediğin fonksiyonları yazarak işlemini yaparsın. $this->SOAP ile aktif instanse ı kullanabilirsin.
Ayrıca soapCall a neden önce stdClass ile yeni bir instanse açıp daha sonra gönderim yaparken array e zorluyorsun? direkt array gönder.
Umarım yapmak istediğin şeyde yol gösterici olur
Merhaba,
Arkadaşlar bir SOAP sistemim var ancak sürekli olarak login logout yapmam gerekiyor. ardı ardında bir çok işlem geliyor ve gereksiz kod yığını oluyor.
Construct ile Login yapmak istiyorum.
Main ilede bin bir türlü fonksiyon geliyor zaten içeri onları yönetmek istiyorum.
Descruct ilede Logout yapmak istiyorum.
lakin construct'dan gelen bütün sesion ve variable'lara ihtiyacım var ve her ikisindede connect soap yapmak zorundayım.
Kısacası bir soap işlemim:
$client = new SoapClient("https://$degisken/soap.wsdl", array("location"=>"https://$degisken/soap/"));
//Login Olmak için
try{
$request = new stdClass();
$request->_this = array ('_' => 'Process', 'type' => 'Service');
$response = $client->__soapCall('GetService', array((array)$request));
} catch (Exception $e){
echo $e->getMessage();
exit;
}
$req = $response->returnval;
try
{
$request = new stdClass();
$request->_this = $req ->sessionManager;
$request->userName = $user;
$request->password = $password;
$response = $client->__soapCall('Login', array((array)$request));
} catch (Exception $e){
echo $e->getMessage();
exit;
}
///Burada işlemler olacak ancak bunlarıda function ile almam lazım bazı işlemlerin fazla array'ları oluyor.
/*Main İşlemler*/
//İşlemler bitince:
//Logout
try
{
$request = new stdClass();
$request->_this = $req->sessionManager;
$response = $client->__soapCall('Logout', array((array)$request));
} catch (Exception $e){
echo $e->getMessage();
exit;
}bunu her işlemde tekrarlamaktansa
$islem = new SOAPislemi;
$islem->mainProcess(array("x"=>"y","bar"=>"foo"));gibi yapmak istiyorum ama daha önce hiç yapıcı yıkıcı method yapmadım. ortadaki main fonksiyonuna ve yıkıcı fonksiyonuna nasıl yapıyı ileticem bilmiyorum. yardımcı olmak adına bir örnek yazabilirmisiniz?