# Bestehenden Webservice aufrufen



## Ronn (20. Juli 2007)

Hallo!

Bin ziemlich neu auf diesem Gebiet & wollte mal fragen wie ich einen Webservice aus einer php datei aufgerufen bekomme. Bin am verzweifeln.


```
try
 {
      $client = new SoapClient(NULL,
        array("location"  => "http://mbox.sycada.com/mbox/Services/Authentication.asmx",
               "uri"       => "urn:Authenticate",
               "style"     => SOAP_RPC,
               "use"       => SOAP_ENCODED));

//$client->Authenticate("test", "test");
      print($client->__soapCall("Authenticate",
             array(new SoapParam("test", "test")),
             array("uri" => "urn:Authenticate",
                   "soapaction" => "urn:Authenticate")));
  }
  catch (SoapFault $e)
  {
          print($e);
  }
```

Fehler :

```
SoapFault exception: [soap:Client] Server did not recognize the value of HTTP Header SOAPAction: urn:Authenticate. in C:Programmexampxampphtdocslogbookserviceindex.php:48 Stack trace: #0 C:\Programme\xamp\xampp\htdocs\logbook\service\index.php(48): SoapClient->__soapCall('Authenticate', Array, Array) #1 {main}
```

Das ist ein bestehender Webservice, also kein selbst erstellter. Also aus c# +vs2005 ist das kein Problem. Ich muß mich erst authentifizieren bevor ich die Methoden nutzen kann. So und das wollte ich nun von php aus machen.Also erstmal authentifizieren. Aber da kommt leider die Fehlermeldung.Wer kann helfen?

MfG Ronnsen


----------



## Michael Engel (20. Juli 2007)

Da der Server den WSDL Modus unterstützt, verwende ihn doch auch, dann geht das alles noch einfacher:


```
<?
$client = new SoapClient('http://mbox.sycada.com/mbox/Services/Authentication.asmx?WSDL');
$result = $client->Authenticate("asdasd", "asdasd");

echo $result->User->ID;
echo $result->User->CompanyDataID;
?>
```

PS: wenn das da oben dein Passwort ist im Kommentar, würd ich es noch rausnehmen


----------



## Ronn (20. Juli 2007)

Hallo engelb,

soweit so gut. Aber leider scheint man sich dort nicht anmelden zu können. Weil das $result
ist immer -1. Das heißt soviel wie...nicht angemeldet. :-(
Was kann da noch falsch sein?

MfG


----------



## Ronn (20. Juli 2007)

Ist das eventuell ein Sicherheitsproblem? Oder ne Einstellung im Apache?

MfG


----------



## Ronn (24. Juli 2007)

Hab noch in einem anderen Forum nach Antworten gesucht.

http://www.pear-forum.de/ftopic1876.html

Bin leider zu keinem Ergegnis gekommen. Help!


----------



## Michael Engel (25. Juli 2007)

Es muss so aber funktionieren:


```
<?

$client = new SoapClient('http://mbox.sycada.com/mbox/Services/Authentication.asmx?WSDL');

print_r($client->__getFunctions());
echo "\n";
print_r($client->__getTypes());
echo "\n";

$auth       = array('testuser','testpass');
$response   = $client->Authenticate($auth);

/**
 * $response->User->ID
 * $response->User->CompanyDataID
 * 
 * es sollte noch geben aber beim test nicht vorhanden:
 * $response->User->Name
 * $response->User->CompanyName
 */
?>
```

Die Fehlermeldung kommt daher das du das hier hast:


```
$client = new SoapClient(NULL,
        array("location"  => "http://mbox.sycada.com/mbox/Services/Authentication.asmx",
               "uri"       => "urn:Authenticate",
               "style"     => SOAP_RPC,
               "use"       => SOAP_ENCODED));
```
aber im WSDL steht das es so aussehen müsste:

```
$client = new SoapClient(NULL,
        array("location"  => "http://mbox.sycada.com/mbox/Services/Authentication.asmx",
               "uri"       => "urn:Authenticate",
               "style"     => SOAP_DOCUMENT,
               "use"       => SOAP_LITERAL));
```
Da das File aber vorliegt würde ich einfach den WSDL Modus verwenden, ist eh einfacher.


----------



## Ronn (30. Juli 2007)

Hallo engelb

leider funktioniert schon die Anmeldung nicht. Da kommt immer -1 zurück.Das geht ja wenigstens noch in Soap, wenn auch nicht viel mehr. Ich poste mal was ich probiert habe.


```
//1.
	 	$client = new SoapClient('http://www/mbox/Services/Authentication.asmx?WSDL');
		print_r($client->__getFunctions());
		echo "<br><br><br>";
		print_r($client->__getTypes());
		echo "<br><br><br>";
		$auth = array('testbenutzer','testpass');
		$response   = $client->Authenticate($auth);
		print_r($response);

//2.
	       $client = new SoapClient(NULL,array("location"  => "http://www/mbox/Services/Authentication.asmx",
               						"uri"       => "urn:Authenticate",
              					    "style"     => SOAP_DOCUMENT,
               						"use"       => SOAP_LITERAL)); 

			$response   = $client->Authenticate('testbenutzer','testpass');
			print_r($response);
```

MfG


----------



## Ronn (2. August 2007)

Hallo,

hat nicht irgend jemand noch eine Idee wie sowas funktionieren könnte?
Wäre sehr wichtig für mich. Hab nirgendwo was alternatives gefunden. 

MfG


----------

