SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

TYPO3 Kochbuch

TYPO3 Kochbuch zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP für Fortgeschrittene und Experten

PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 08.08.2011, 18:13:59
nites nites ist offline
Anfänger
 
Registriert seit: Feb 2005
Beiträge: 69
SoapClient - Aufruf übergibt nicht alle Parameter

Hallo zusammen,

ich bin noch relativ neu was SOAP Aufrufe durch PHP angeht und laufe eigentlich fast sofort in einen Fehler.

Folgender Maßen stelle ich eine Verbindung her.

PHP-Code:
$option = array
(
'trace'=>1,
'soap_version'=> 'SOAP_1_2'//keine Ahnung ob das richtig ist
'exceptions' => true
); 
$client = new SoapClient('http://<IP>/<Info>?wsdl',$option); 
das klappt auch und mit

PHP-Code:
 echo "<pre>";
var_dump($client->__getFunctions());
 echo 
"</pre>"
bekomme ich auch die Funktionen die ich erwarte zurück.


Hiermit schaffe ich auch ein Login und bekomme eine SessionID zurück.

PHP-Code:
 //Logon
 
$function "logon";
 
$params->userName "userName";
 
$params->password "password";
 
 
$result $client->__soapCall("logon", array("parameters"=>$params), nullnull$output_headers); 
Jetzt komme ich aber nicht weiter.
Folgenden Befehl (natürlich mit gefüllten Variablen) funktioniert mit jmeter einwandfrei.
Code:
<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:viewCountries xmlns:ns2="http://[...]/">
<sessionId>${sessionId}</sessionId>
	<viewCountriesOrder>
	<destination>${destination}</destination>
	</viewCountriesOrder> 
</ns2:viewCountries>
</S:Body>
</S:Envelope>
Sobald ich jetzt aber in php versuche, wird destination einfach nicht übergeben:
PHP-Code:
$function "viewCountries";
 
$params = new stdClass();
 
$params->sessionId $sessionId;
$params->viewCountriesOrder->destination "493049876089";
//oder auch mit 
  //$params->viewCountriesOrder = new stdClass(); 
  //$params->viewCountriesOrder->destination = "493049876089";
//oder auch mit 
 //$params->viewCountriesOrder->destination = "493049876089";
//klappt es nicht


 
use_soap_error_handler(true);
 
 
 try {
  
//oder//$result = $client->__soapCall($function, array("parameters"=>$params), null, null, $output_headers);
  
$result $client->$function ($params);
  echo 
"test";
}
catch(
SoapFault $e){
  
// handle issues returned by the web service
 
echo "SoapFault";
}
catch(
Exception $e){
  
// handle PHP issues with the request
 
echo "Exception";
}
 echo 
"<pre>getLastRequest - $function<br>";
 
var_dump(htmlentities($client->__getLastRequest()));
 echo 
"</pre>";
 echo 
"<pre>getLastRequestHeaders - $function<br>";
 
var_dump(htmlentities($client->__getLastRequestHeaders()));
 echo 
"</pre>";
 echo 
"<pre>getLastResponse - $function<br>";
 
var_dump(htmlentities($client->__getLastResponse()));
 echo 
"</pre>";
 echo 
"<pre>getLastResponseHeaders - $function<br>";
 
var_dump(htmlentities($client->__getLastResponseHeaders()));
 echo 
"</pre>"
Ich bekomme zurück

Code:
string(436) "<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://[...]/"><SOAP-ENV:Body><ns1:viewCountries><sessionId>8138896</sessionId><viewCountriesOrder/></ns1:viewCountries></SOAP-ENV:Body></SOAP-ENV:Envelope>
"

Ich bin jetzt mit meinem Latein am Ende, da ich auch nicht weiß, was der / die Aufrufe genau machen und die paramter verarbeiten.

Mit Hoffnung auf Hilfe.

Gruß
nites
Mit Zitat antworten
  #2  
Alt 08.08.2011, 18:59:54
DokuLeseHemmung DokuLeseHemmung ist offline
SELFPHP Experte
 
Registriert seit: Jun 2008
Alter: 15
Beiträge: 2.269
AW: SoapClient - Aufruf übergibt nicht alle Parameter

Tipp:
Hiermit die Typen abfragen.
PHP-Code:
 echo "<pre>"
var_dump($client->__getTypes()); 
 echo 
"</pre>"
Und dann nicht stdClass verwenden, sondern eigene Typeklassen erstellen.

Wie das gehen kann ist hier ganz gut beschrieben:
http://phpforum.de/forum/showthread.php?t=257851
Mit Zitat antworten
  #3  
Alt 09.08.2011, 11:29:42
nites nites ist offline
Anfänger
 
Registriert seit: Feb 2005
Beiträge: 69
AW: SoapClient - Aufruf übergibt nicht alle Parameter

Danke schon mal, aber leider klappts irgendwie immer noch nicht.

Irgendwie bekomm ich nicht hin, dass die Order korrekt aufgebaut wird.

PHP-Code:
class RequestType
{
    public 
$destination;
}
$option = array
(
'trace'=>1,
'soap_version'=> 'SOAP_1_2',
'exceptions' => true,
); 
$option['classmap']['order'] = 'RequestType';
$order_destination = new RequestType;
$order_destination->destination "493049876089";

$client = new SoapClient('http://<IP>/<Info>?wsdl',$option);

 
$function "viewCountries";

 
$params->sessionId $sessionId;
 
  
$result $client->$function ($params); 
Code:
getFunctions - viewCountries
array(29) {  
  [23]=>
  string(77) "viewCountriesResponse viewCountries(viewCountries $parameters)"
}
Code:
getTypes - viewCountries
array(111) {
  [2]=>
  string(807) "struct order {
 string destination; 
}"
  [102]=>
  string(92) "struct viewCountries {
 long sessionId;
 viewCountriesOrder viewCountriesOrder;
}"
  [103]=>
  string(34) "struct viewCountriesOrder {
}"
  [104]=>
  string(67) "struct viewCountriesResponse {
 requestResult requestResult;
}"
Code:
getLastRequest - viewCountries
string(408) "<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://[...]/">
<SOAP-ENV:Body>
<ns1:viewCountries>
<sessionId>7991583</sessionId>
</ns1:viewCountries>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
"
ungefähr so sollte es aussehen:
Code:
<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:viewCountries xmlns:ns2="http://[...]/">
<sessionId>${sessionId}</sessionId>
	<viewCountriesOrder>
	<destination>${destination}</destination>
	</viewCountriesOrder> 
</ns2:viewCountries>
</S:Body>
</S:Envelope>
Wie bekomme ich denn hin, dass die sessionId vor viewCountries steht?
Code:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://[...]/">
xmlns:ns1="http://[...]/ muss ja auch wo anders stehen.

wenn ich statt
PHP-Code:
$result $client->$function ($params); 
dies benutze
PHP-Code:
$result $client->$function ($order_destination); 
bleibt der Request komplett leer.

Gruß
nites
Mit Zitat antworten
  #4  
Alt 09.08.2011, 13:40:57
DokuLeseHemmung DokuLeseHemmung ist offline
SELFPHP Experte
 
Registriert seit: Jun 2008
Alter: 15
Beiträge: 2.269
AW: SoapClient - Aufruf übergibt nicht alle Parameter

Warum baust du nur einen Strukturtype, wo du doch offensichtlich mehrere anlegen solltest?

Leider kann ich das so nicht testen.
Darum endet meine Hilfe auch hier.
Mit Zitat antworten
  #5  
Alt 09.08.2011, 15:20:31
nites nites ist offline
Anfänger
 
Registriert seit: Feb 2005
Beiträge: 69
AW: SoapClient - Aufruf übergibt nicht alle Parameter

Hallo DokuLeseHemmung,

ich muss mich leider wie ein Dummy hier anstellen. Was meinst Du mit Strukturtype?

Der / die / das wsdl ist mir vorgegeben, ich möchte also nur die SOAP-Schnittstelle nutzen.

Leider kann ich die wsdl nicht zur Verfügung stellen, sondern nur Teile daraus posten.

Vielleicht hab' ich einfach an dem Prinzip noch etwas nicht verstanden, es wäre also toll, wenn Du einmal versucht mir das näher zu bringen.

Soweit ich das verstanden habe, muss ich die Pflichtfelder in der xml-Anfrage füllen. Diese Anfrage wird dann über die wsdl Adresse geschickt und dann von der Blackbox dahinter verarbeitet.

Warum kann ich dann nicht einfach die Pflichtfelder als einfach params mitgeben und fertig?
Ok, ich sehe, dass alles so aussieht wie in einem mehrdimensionalen Array und ich somit wahrscheinlich auf eine Sub-Ebene kommen muss, aber da das ganze sich nicht wie ein Array verhält, verstehe ich nur noch Bahnhof, da ich einfach nicht mehr weiß.

Gruß,
nites
Mit Zitat antworten
  #6  
Alt 11.08.2011, 14:16:44
nites nites ist offline
Anfänger
 
Registriert seit: Feb 2005
Beiträge: 69
AW: SoapClient - Aufruf übergibt nicht alle Parameter

Durch wsdl2php wurde mir eine php-Datei mit allen Klassen etc. erzeugt.

Hier der Code des funktionierenden Aufrufs:

PHP-Code:
class order {
  public 
$destination// string
}

class 
viewCountriesSync {
  public 
$sessionId// long
  
public $viewCountriesOrder// viewCountriesOrderSync
}

class 
viewCountriesOrderSync {
}


class 
SoapCountriesService extends SoapClient {

  private static 
$classmap = array(
                                    
'order' => 'order',
                                    
'viewCountriesSync' => 'viewCountriesSync',
                                    
'viewCountriesOrderSync' => 'viewCountriesOrderSync',
                                   );

  public function 
SoapCountriesService($wsdl "http://[ip]/SoapCountries?wsdl"$options = array()) {
    foreach(
self::$classmap as $key => $value) {
      if(!isset(
$options['classmap'][$key])) {
        
$options['classmap'][$key] = $value;
      }
    }
    
parent::__construct($wsdl$options);
  }
  
  
   
/**
   *  
   *
   * @param viewCountriesSync $parameters
   * @return viewCountriesSyncResponse
   */
  
public function viewCountriesSync(viewCountriesSync $parameters) {
    return 
$this->__soapCall('viewCountriesSync', array($parameters),       array(
            
'uri' => 'http://Countries.[...]/',
            
'soapaction' => ''
           
)
      );
  }
  
  
$wsdl 'http://[ip]/SoapCountries?wsdl';

$client = new SoapCountriesService($wsdl,$option);
  
//Logon
$function "logon";
$req = new logon;
$req->userName "user";
$req->password "pw";

$result $client->$function ($req);

$sessionId_logon $result->sessionId



 
$function "viewCountriesSync";

$req = new viewCountriesSync;
$req->sessionId $sessionId_logon;


$req_sub_order = new order;
$req_sub_order->destination "4917250123445";

$req->viewCountriesOrder $req_sub_order;


 
 
use_soap_error_handler(true);
 
 
try {
  
$result $client->$function ($req);
}
catch(
SoapFault $e){
 echo 
"SoapFault";
}
catch(
Exception $e){
 echo 
"Exception";
}


 echo 
"<pre>getLastRequest - $function<br>";
 
var_dump(htmlentities($client->__getLastRequest()));
 echo 
"</pre>";
 echo 
"<pre>getLastRequestHeaders - $function<br>";
 
var_dump(htmlentities($client->__getLastRequestHeaders()));
 echo 
"</pre>";
 echo 
"<pre>getLastResponse - $function<br>";
 
var_dump(htmlentities($client->__getLastResponse()));
 echo 
"</pre>";
 echo 
"<pre>getLastResponseHeaders - $function<br>";
 
var_dump(htmlentities($client->__getLastResponseHeaders()));
 echo 
"</pre>";
 echo 
"<pre>getFunctions - $function<br>";
 
var_dump($client->__getFunctions());
 echo 
"</pre>";
 echo 
"<pre>getTypes - $function<br>";
 
var_dump($client->__getTypes());
 echo 
"</pre>"
Mit Zitat antworten
Antwort

Stichworte
client, soap


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Methoden Parameter direkt validieren floorball92 PHP Grundlagen 11 08.04.2009 13:11:55
Namen der übergebenen Parameter ermitteln jubi PHP Grundlagen 2 21.02.2009 00:19:51
GET Parameter verschlüsseln Kukulkan PHP für Fortgeschrittene und Experten 7 17.12.2007 19:46:55
parameter an externe datei übergeben Knisterkarl PHP Grundlagen 8 08.06.2006 06:08:18
Parameter aus Funktionsaufruf in Objektbezeichner benutzen!? AndreasS HTML, CSS und JavaScript Help! 1 05.07.2004 14:41:05


Alle Zeitangaben in WEZ +2. Es ist jetzt 20:06:03 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt