---
title: "SOAP Webservice erstellen"
url: "https://www.typo3.net/d/87202-soap-webservice-erstellen"
source: "typo3.net"
tags: ["Extensions","Entwicklung","Frage","PHP"]
created: "2009-02-23"
last_reply: "2009-03-31"
replies: 6
solved: false
page: 1
pages: 1
lang: "de"
---

# SOAP Webservice erstellen

Extensions › Entwicklung · 6 Antworten · gestartet 2009-02-23

## Eröffnungsbeitrag

**Tsd** · 2009-02-23 · [Beitrag #1](https://www.typo3.net/d/87202-soap-webservice-erstellen/1)

Hi,
ich wollte mir einen Webservice für mein Portal zusammenbauen.
Hab erstmal einige Tutorials durchgemacht. Die haben schließlich auch alle ganz gut funktioniert.( Gut das wsdl-File war invalide. Geht aber ja auch ohne :D )
Jetzt wollt ich das in mein TYPO3 einbauen.
Hab mir zwei Frontend-Plugins erstellt. Eins soll der Server, das andere der Client sein.
Leider bekomm ich dauernd nur Fehlermeldungen.
Letzte Meldung war z.B.

> looks like we got no XML document

Meine beiden pi Klassen sehen wie folgt aus.
Server:

```php
try {
  $server = new SOAPServer(NULL,array(
				'uri' => 'http://portaladresse/webservice'
				));
  $server->setClass('tx_portalwebservice_pi1');
  $server->handle();
}
 
catch (SOAPFault $f) {
  print $f->faultstring;
}
class tx_portalwebservice_pi1 extends tslib_pibase {
	var $prefixId      = 'tx_portalwebservice_pi1';		
	var $scriptRelPath = 'pi1/class.tx_portalwebservice_pi1.php';
	var $extKey        = 'portal_webservice';	
	var $pi_checkCHash = true;
	
	function main($content,$conf)	{
		$this->conf=$conf;
		$this->pi_setPiVarDefaults();
		$this->pi_loadLL();
	}
	public function halloWelt()
	{
		return "Hallo!! Es funktioniert!!!";
	}  
}



if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/portal_webservice/pi1/class.tx_portalwebservice_pi1.php'])	{
	include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/portal_webservice/pi1/class.tx_portalwebservice_pi1.php']);
}
?>
```

Client:

```php
class tx_portalwebservice_pi2 extends tslib_pibase {
	var $prefixId      = 'tx_portalwebservice_pi2';		
	var $scriptRelPath = 'pi2/class.tx_portalwebservice_pi2.php';
	var $extKey        = 'portal_webservice';	
	var $pi_checkCHash = true;
	

	function main($content,$conf)	{
		$this->conf=$conf;
		$this->pi_setPiVarDefaults();
		$this->pi_loadLL();
		try {
			$client = new SOAPClient(NULL,array(
					'location' => 'http://portaladresse/index.php?id=29',
					'uri'      => 'http://portaladresse/webservice',
					'style'    => SOAP_RPC,
					'use'      => SOAP_ENCODED
					));
		$result = $client->halloWelt();
		}
		catch (SOAPFault $f) {
			print $f->faultstring;
		}
		$content .= '<h1>'.$result.'</h1>';
			
		return $this->pi_wrapInBaseClass($content);
	}
}



if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/portal_webservice/pi2/class.tx_portalwebservice_pi2.php'])	{
	include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/portal_webservice/pi2/class.tx_portalwebservice_pi2.php']);
}
```

Was mach ich da falsch??
Wäre super, wenn mir da jemand weiterhelfen könnte.
Thx Tsd.
PS.: TYPO3 4.2.5 und PHP5 mit nativer SOAP Unterstützung

## Antworten

### [#2](https://www.typo3.net/d/87202-soap-webservice-erstellen/2) · jenses · 2009-02-24

> **Tsd schrieb:**
>
> > looks like we got no XML document

als Reaktion auf

```php
return "Hallo!! Es funktioniert!!!";
```

ist doch ziemlich eindeutig, oder?  :)
Versuch doch doch einfach mal ein gültiges XML_Dokument zu senden...

### [#3](https://www.typo3.net/d/87202-soap-webservice-erstellen/3) · Tsd · 2009-02-24

Hmmm,
Inwiefern. Ich habe gedacht ich kann über SOAP Funktionen auf dem SOAP-Server aufrufen. Und es werden mir Werte zurück gegeben. Als XML zwar, aber um die Erstellung des XML müsste sich die SOAP-Funktion von PHP kümmern.
Ohne TYPO3 bekomm ich das auch mit genau diesen Funktionen hin.
Da wird mir ein XML zurückgegeben, was die Client-Funktion interpretiert und ausgibt.
Ich bin mitlerweile soweit, dass es wohl an irgendwelche Ausgaben auf der Serverseite liegt. Wohl am Template oder ähnlichem.
Wenn ich in meinem PHP Skript(ohne Typo3) ein echo einbau, kommt es zur selben Fehlermeldung

### [#4](https://www.typo3.net/d/87202-soap-webservice-erstellen/4) · jenses · 2009-02-25

> **Tsd schrieb:**
>
> Wenn ich in meinem PHP Skript(ohne Typo3) ein echo einbau, kommt es zur selben Fehlermeldung

Logisch, ein echo "Hallo Welt" ist ja ebenso kein XML.
Im Übrigen gibt es keinen Unterschied zwischen einer TYPO3-Extension und PHP  ;)

<http://de.wikipedia.org/wiki/SOAP>

Zum Testen der serverseitigen Skripts empfiehlt sich <http://www.soapui.org/>

### [#5](https://www.typo3.net/d/87202-soap-webservice-erstellen/5) · Tsd · 2009-02-25

Hmmm,
also ich versteh schon, das ich XML zurückliefern muss.
Ich hab jetzt den Webservice in einer php-Datei außerhalb von TYPO3 erstellt.
Das geht ohne Probleme.
Problematisch wird es wenn ich es als Frontend Plugin mach, da dann die Serverseite ja noch HTML-Code beinhaltet(z.B. Template oder Fehlermeldung bei fehlendem Template :D)
Die Clientseite als Frontend-Plugin ist kein Problem.
Meine Frage ist also nicht, wie man generell einen Webservice mit SOAP erstellen kann, sondern wie man einen Webservice in TYPO3 integrieren kann.
Wäre net, da man dann die Konfiguration über das Backend bewerkstelligen könnte.

Ps.: Natürlich gibt es augenscheinlich keinen Unterschied zwischen PHP und einer TYPO3 Extension. Aber es gibt sehr wohl einen Unterschied, zwischen einer php-Datei außerhalb von TYPO3 und einer Extension.

### [#6](https://www.typo3.net/d/87202-soap-webservice-erstellen/6) · SeveQ · 2009-03-31

Ein eigener Seitentyp ist vielleicht die Lösung für dein Problem. Darüber kannst du dafür sorgen, dass Typo3 dir reines XML liefert. Den Seitentyp definierst du zum Beispiel in der ext_path/pi1/static/setup.txt. Das muss dann etwa so aussehen:

```typoscript
blubb_page_type >
blubb_page_type = PAGE
blubb_page_type {
  typeNum = 890 # beliebige Nummer hier eintragen, weiß nicht, ob's da Regeln gibt
  config {
    disableAllHeaderCode = 1
    sendNoCacheHeaders = 1
    no_cache = 1
    admPanel = 0
    xhtml_cleaning = 0
    additionalHeaders = Content-Type:...;charset=... # Content-Typ und charset hier angeben für XML 
  }
  
  10 = USER
  10 {
    userFunc = tx_blubb_ext_pi1->webServiceFunction
  }
}
```

... naja, so in etwa. Ein Aufruf erfolgt dann über <http://www.deine-domain.de/?type=890>

Du solltest als Ausgabe die Rückgabe der userFunc bekommen. Ich hoffe, das hilft dir ein wenig.

### [#7](https://www.typo3.net/d/87202-soap-webservice-erstellen/7) · Tsd · 2009-03-31

Lösung ist eigentlich ganz einfach. Man erstellt ein Frontend-Plugin und fügt zwischen Server-logik und Content-Ausgabe ein die(); ein.

---

Quelle: „SOAP Webservice erstellen“, typo3.net, https://www.typo3.net/d/87202-soap-webservice-erstellen
Beiträge von Mitgliedern des Forums. Bitte mit Link auf die Diskussion zitieren.
