Zend Soap Server und Client Anwendung

Gepostet am Januar 13, 2012

Im folgenden wird eine Soap Server und Client Struktur auf Grundlage von XAMPP aufgebaut. Dazu müsst ihr die folgenden Verzeichnisse und Dateien anlegen und mit dem Quelltext befüllen.

Verzeichnisstruktur:
C:\xampp\htdocs\amicron
C:\xampp\htdocs\amicron\lib\Zend <- Enthält die Zend Lib C:\xampp\htdocs\amicron\zend_soap_client.php C:\xampp\htdocs\amicron\zend_soap_server.php C:\xampp\htdocs\amicron\zend_soap_server_class.php Allgemeines:
DOCUMENT_ROOT = C:\xampp\htdocs\
Aufruf: http://localhost/amicron/zend_soap_client.php

Code:
zend_soap_client.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
<?php
header('Content-Type: text/html; charset=utf-8'); 
date_default_timezone_set('Europe/Berlin');
 
 
//Auth
$user = "magentoconnector";
$password = "passwort";
 
// WDSL-Caching abschalten
ini_set("soap.wsdl_cache_enabled", 0);
 
//Include
set_include_path($_SERVER['DOCUMENT_ROOT'].'/amicron/lib/');
require_once 'Zend/Loader.php';
require_once 'Zend/Loader/Autoloader.php'; 
Zend_Loader_Autoloader::getInstance(); 
 
// Initialisiere Request Objekt
$request = new Zend_Controller_Request_Http();
 
// lege Adresse des Soap Servers fest
$url = 'http://192.168.178.101/amicron/zend_soap_server.php?wsdl=show';
 
// Soap Client initialisieren
$client = new Zend_Soap_Client($url);
 
// Rufe Soap Methode auf (user, password, requestfunction, parameter as Array)
$result = $client->httpRequest($user, $password, 'getorder', $parameter=array(2,'Marcel'));
 
// Gebe Ergebnis aus
Zend_Debug::dump($result);

zend_soap_server.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
 
############### CONFIG ################
$url = 'http://192.168.178.101/amicron/zend_soap_server.php?wsdl=show';
#######################################

 
header('Content-Type: text/html; charset=utf-8'); 
date_default_timezone_set('Europe/Berlin');
 
// WDSL-Caching abschalten
ini_set("soap.wsdl_cache_enabled", 0);
 
//Include
set_include_path($_SERVER['DOCUMENT_ROOT'].'/amicron/lib/');
require_once 'Zend/Loader.php';
require_once 'Zend/Loader/Autoloader.php'; 
Zend_Loader_Autoloader::getInstance(); 
 
require_once('zend_soap_server_class.php');
 
// Initialisiere Request Objekt
$request = new Zend_Controller_Request_Http();
 
// check GET Parameter
if ($request->getQuery('wsdl') == 'show') {
    // WSDL Beschreibung automatisch erstellen
    $autodiscover = new Zend_Soap_AutoDiscover();
    $autodiscover->setClass('Zend_Soap_Server_Class');
    $autodiscover->handle();
} else {
    // Soap Server initialisieren
    $server = new Zend_Soap_Server($url);
    $server->setClass('Zend_Soap_Server_Class');
    $server->handle();
}

zend_soap_server_class.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?php
//KOMMENTAR parameter und return müssen korrekt gesetzt werden sonst NULL!
 
class Zend_Soap_Server_Class
{
    /**
     * @var array
     */
    protected $_pizzaList = array(
        '1' => 'Pizza Margarita',
        '2' => 'Pizza Hawaii',
        '3' => 'Pizza Salami',
    );
 
	protected $_password = "passwort";
	protected $_user  = "magentoconnector";
 
 
    /**
     * Http Request
     * 
	 * @param string $user Benutzer
	 * @param string $password Passwort
     * @param string $function Funktion
     * @param array $parameter Parameter
     * @return string
     */
    public function httpRequest($user, $password, $function, $parameter)
    {
		//Auth Check
		if (($user != $this->_user) || ($password != $this->_password)) return "Auth Error";
 
		switch ($function) {
			case "getorder": return $this->getOrder($parameter); break;
 
			default: return "Please check function";
		}
 
    }
 
 
	/**
     * Http Request
     * 
     * @param array $parameter Parameter
     * @return string
     */
    public function getOrder($parameter)
    {
        // erstelle Text für Ausgabe
        $text = 'Lieber ' . $parameter[1] . ', deine Pizza ';
        $text.= isset($this->_pizzaList[$parameter[0]]) ? $this->_pizzaList[$parameter[0]] : 'XY';
        $text.= ' wurde ausgeliefert!';
        return $text;
    }
 
}

SSL (HTTPS) Aufruf über XAMPP

Beim Aufruf einer SOAP-Server PHP über https wird ein Fehler ausgegeben:
Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn’t load from ‚https3://www.danmoi.com/amicon_sync/zend_soap_server.php?wsdl=magentoconnector‘ : failed to load external entity „https3://www.danmoi.com/amicon_sync/zend_soap_server.php?wsdl=magentoconnector“ in C:\xampp\htdocs\amicron_client\lib\Zend\Soap\Client\Common.php:51 Stack trace: #0 C:\xampp\htdocs\amicron_client\lib\Zend\Soap\Client\Common.php(51): SoapClient->SoapClient(‚https3://www.da…‘, Array) #1 C:\xampp\htdocs\amicron_client\lib\Zend\Soap\Client.php(1032): Zend_Soap_Client_Common->__construct(Array, ‚https3://www.da…‘, Array) #2 C:\xampp\htdocs\amicron_client\lib\Zend\Soap\Client.php(1188): Zend_Soap_Client->_initSoapClientObject() #3 C:\xampp\htdocs\amicron_client\lib\Zend\Soap\Client.php(1112): Zend_Soap_Client->getSoapClient() #4 C:\xampp\htdocs\amicron_client\zend_soap_client.php(37): Zend_Soap_Client->__call(‚httpRequest‘, Array) #5 C:\xampp\htdocs\amicron_client\zend_soap_client.php(37): Zend_Soap_Client->httpReque in C:\xampp\htdocs\amicron_client\lib\Zend\Soap\Client\Common.php on line 51

Lösung:
In die php.ini muss die Datei „extension=php_openssl.dll“ eingebunden werden. Die php.ini liegt unter C:\XAMPP\php\php.ini.

1
2
3
4
5
6
7
8
9
10
11
12
; If you only provide the name of the extension, PHP will look for it in its
; default extension directory.
;
; Windows Extensions
; Note that ODBC support is built in, so no dll is needed for it.
; Note that many DLL files are located in the extensions/ (PHP 4) ext/ (PHP 5)
; extension folders as well as the separate PECL DLL download (PHP 5).
; Be sure to appropriately set the extension_dir directive.
 
extension=php_bz2.dll
extension=php_curl.dll
extension=php_openssl.dll

Tags: , , ,

Leave a Reply

 

Posts of Current Category



Facebook: