[TYPO3-UG Freiburg] Webservice ansprechen mit Powermail-Hook

Heiko Hänsge mailinglisten at wild-wild-web.de
Tue Nov 29 09:34:52 CET 2011


Hallo,

habe mich mittlerweile etwas in die Webservice-Materie eingearbeitet und 
möchte meine Erkenntnisse hier teilen, falls jemand das Thema zukünftig 
noch angehen muss. Um Webservices anzusprechen, gibt es verschiedene 
Methoden. Drei habe ich ausprobiert. Hier die prinzipielle 
Herangehensweise als Snippets:

// Webservice query starten
###########################################################
                     // 1. SOAP
                     $url = ''; // URL angeben
                     $params = ''; // Parameter-Array angeben
                     $method = ''; // Methode angeben
                     try {
                         $client = new SoapClient($url); // create a PHP 
SOAP object
                     } catch (SoapFault $fault) {
                         $error .= 'Fehler beim Verbinden zum Server.';
                         // trigger_error("SOAP Fault: (faultcode: 
{$fault->faultcode}, faultstring: {$fault->faultstring})", E_USER_ERROR);
                     }
                     $client->__getFunctions();
                     try {
                         $response = $client->__call($method,$params);
                     } catch (SoapFault $fault) {
                         $error .= 'Fehler beim Verbinden zum Server 
inkl. Parametern.';
                         // trigger_error("SOAP Fault: (faultcode: 
{$fault->faultcode}, faultstring: {$fault->faultstring})", E_USER_ERROR);
                     }
                     // $response-Array weiter verarbeiten

###########################################################

                     // 2. HTTP-POST-Request
                     $url = ''; // URL angeben
                     $params = ''; // Parameter-Array angeben
                     $method = ''; // Methode angeben
                     // prepares the request
                     $request = array(
                         'method' => $method,
                         'params' => $params,
                         'id' => 1
                     );
                     $request = json_encode($request);
                     // performs the HTTP POST
                     $opts = array (
                         'http' => array (
                         'method'  => 'POST',
                         'header'  => 'Content-type: application/json',
                         'content' => $request
                     ));
                     $context  = stream_context_create($opts);
                     if ($fp = @fopen($url, 'r', false, $context)) {
                         $xmlstr_raw = fpassthru($fp);
                         $xmlstr = '';
                         while($row = fgets($fp)) {
                             $response.= trim($row)."\n";
                         }
                         $response = json_decode($response,true);
                     } else {
                         $error .= 'Fehler beim Verbinden zur 
Server-URL'.$this->url;
                         //throw new Exception('Unable to connect to 
'.$this->url);
                     }
                     // $response-Array weiter verarbeiten

###########################################################

                     // 3. CURL

                     // 3.1 kurze Version
                     $targetUrl = ''; // URL inkl. GET-Parametern angeben
                     $ch = curl_init();    // create curl resource
                     curl_setopt($ch, CURLOPT_URL, $targetUrl);    // 
set url
                     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);    
//return the transfer as a string
                     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);    
// ignore httpS
                     $response = curl_exec($ch);    // $htmlOUT contains 
the output string
                     curl_close($ch);    // close curl resource to free 
up system resources
                     // $response-Array weiter verarbeiten

###########################################################

     // 3. CURL

     // 3.2 ausführliche Version
     if ($GLOBALS['TYPO3_CONF_VARS']['SYS']['curlUse']) {
             // performs the HTTP POST by use of libcurl
             $targetUrl = ''; // URL inkl. GET-Parametern angeben
             $params = ''; // alternativ zu GET-Parametern bei URL die 
POST-Parameter angeben
             $timeout = 15;
             $options = array(
                 CURLOPT_URL        => $targetUrl,
                 CURLOPT_POST        => true,
                 CURLOPT_POSTFIELDS    => $params,
                 CURLOPT_HTTPHEADER    => array( 'Content-Type: 
application/json' ),
                 CURLINFO_HEADER_OUT    => true,
                 CURLOPT_RETURNTRANSFER    => true,
                 CURLOPT_SSL_VERIFYHOST     => false,
                 CURLOPT_SSL_VERIFYPEER     => false,
                 CURLOPT_FOLLOWLOCATION    => true,
                 CURLOPT_CONNECTTIMEOUT   => $timeout,
             );
             $ch = curl_init();
             curl_setopt_array( $ch, $options );
             $response = trim( curl_exec( $ch ) );
             $response = json_decode( $response, true );
             curl_close( $ch );
         }
         // $response-Array weiter verarbeiten

###########################################################

Erst mit der letzten Variante bin ich zum erwarteten Ergebnis gelangt.
So, jetzt muss ich nur noch über die Hooks von Powermail die 
Session-Daten und die Marker manipulieren...
Kann mir jemand evtl. sagen, warum im Hook PM_SubmitBeforeMarkerHook() 
das Marker-Array nicht zur Verfügung steht, also leer ist?

Viele Grüße
Heiko



------------ Original-Nachricht ------------
Heiko Hänsge schrieb am 23.11.2011 12:50 Uhr:
> Hallo,
>
> nach dem Absenden eines Powermail-Formulars sollen einige der 
> eingegebenen Daten per POST-Request an einen Webservice übergeben werden.
> Die Antwort des Webservice erfolgt in JSON als Array. Ein Parameter 
> des Antwort-Arrays soll danach ausgewertet werden (true/false), um die 
> weitere Verarbeitung der Daten zu steuern.
> Über eine eigene Extension ist es mir bisher gelungen, einen 
> geeigneten Hook von Powermail anzusprechen und die an den Webservice 
> zu übergebenden Daten herauszufummeln. Wie aber spreche ich danach den 
> Webservice an und werte die Antwort aus?
> Kann mir da jemand weiter helfen (natürlich auch gern gegen Bezahlung)?
>
> Viele Grüße
> Heiko
>
> Fon: +49 761 7048880
> _______________________________________________
> TYPO3-UG-Freiburg mailing list
> TYPO3-UG-Freiburg at lists.typo3.org
> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-ug-freiburg
>


More information about the TYPO3-UG-Freiburg mailing list