Bestehenden Webservice aufrufen

Ronn

Grünschnabel
Hallo!

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

PHP:
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 :
PHP:
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
 
Zuletzt bearbeitet:
Da der Server den WSDL Modus unterstützt, verwende ihn doch auch, dann geht das alles noch einfacher:

PHP:
<?
$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
 
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
 
Es muss so aber funktionieren:

PHP:
<?

$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:

PHP:
      $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:
PHP:
      $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.
 
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.

PHP:
//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
 
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. :confused:

MfG
 
Zurück