While there are plenty of mentions online that SoapServer doesn't support SOAP Headers, this isn't true.
In your class, if you declare a function with the name of the header, the function will be called when that header is received.
<?php
class MySoapService {
private $user_is_valid;
function MyHeader($header) {
if ((isset($header->Username)) && (isset($header->Password))) {
if (ValidateUser($header->Username, $header->Password)) {
$user_is_valid = true;
}
}
}
function MySoapRequest($request) {
if ($user_is_valid) {
// process request
}
else {
throw new MyFault("MySoapRequest", "User not valid.");
}
}
}
?>
PHP.mk документација
SoapServer
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Патека
class.soapserver.php
Локална патека за оваа страница.
Извор
php.net/manual/en
Оригиналниот HTML се реупотребува и локално се стилизира.
Режим
Прокси + преведен приказ
Кодовите, табелите и белешките остануваат читливи во истиот тек.
Референца
class.soapserver.php
SoapServer
Референца за `class.soapserver.php` со подобрена типографија и навигација.
Класата SoapServer
класата mysqli_driver
Вовед
Класата SoapServer обезбедува сервер за SOAP екстензијата може да се користи за пишување SOAP сервери и клиенти. Поддржува подмножества на and » SOAP 1.1 протоколи. Може да се користи со или без WSDL опис на услугата.
Синопсис на класата
Својства
- service
-
- __soap_fault
-
Содржина
- SoapServer::addFunction — Додава една или повеќе функции за обработка на SOAP барања
- SoapServer::addSoapHeader — Додава една или повеќе функции за обработка на SOAP барања
- SoapServer::__construct — Додај SOAP заглавие во одговорот
- SoapServer::fault — Конструктор на SoapServer
- SoapServer::getFunctions — Издава SoapServer грешка што укажува на проблем
- SoapServer::__getLastResponse — Враќа SOAP заглавја од последното барање
- SoapServer::handle — Враќа список на дефинирани функции
- SoapServer::setClass — Обработува SOAP барање
- SoapServer::setObject — Поставува класа што ги обработува SOAP барањата
- SoapServer::setPersistence — Поставува објект што ќе се користи за обработка на SOAP барања
Белешки од корисници Управување со PDO конекции
php1221 на klox точка net ¶
пред 14 години
mail на borisd точка ru ¶
пред 7 години
If you want to run dummy SoapServer as a daemon for tests on linux, you need to:
1. Set up location "localhost:12312/soapServer.php" in your wsdl like:
<wsdl:service name="ServiceName">
<wsdl:port name="ServiceNamePort" binding="tns:ServiceNameBinding">
<soap:address location="http://localhost:12312/soapServer.php" />
</wsdl:port>
</wsdl:service>
2. Write your test server like:
<?php
/*
* Server
*/
class TestSoapServer
{
public function getMessage()
{
return 'Hello, World!';
}
}
$options = ['uri' => 'http://localhost:12312/'];
$server = new SoapServer(null, $options);
$server->setClass('TestSoapServer');
$server->handle();
?>
3. Run it with `php -S localhost:12312` (in the same folder)
Whenever you make a request according to your wsdl, it will end up at your "server".
carlos точка vini на gmail точка com ¶
пред 15 години
SoapServer does not support WSDL with literal/document. I have a class:
<?php
class My_Soap {
/**
* Returns Hello World.
*
* @param string $world
* @return string
*/
public function getInterAdmins($world) {
return 'hello' . $world;
}
}
?>
To fix this I had to create proxy class:
<?php
class My_Soap_LiteralDocumentProxy {
public function __call($methodName, $args) {
$soapClass = new My_Soap();
$result = call_user_func_array(array($soapClass, $methodName), $args[0]);
return array($methodName . 'Result' => $result);
}
}
?>
Now make sure that the WSDL is created using My_Soap. And that the Server is created using My_Soap_LiteralDocumentProxy:
<?php
if (isset($_GET['wsdl'])) {
$wsdl = new Zend_Soap_AutoDiscover(); // It generates the WSDL
$wsdl->setOperationBodyStyle(array(
'use' => 'literal'
));
$wsdl->setBindingStyle(array(
'style' => 'document'
));
$wsdl->setClass('My_Soap');
$wsdl->handle();
} else {
$server = new Zend_Soap_Server('http://localhost/something/webservice.php?wsdl');
$server->setClass('My_Soap_LiteralDocumentProxy');
$server->handle();
}
?>
softontherocks на gmail точка com ¶
пред 11 години
I posted in this URL http://softontherocks.blogspot.com/2014/02/web-service-soap-con-php.html a full example of a nusoap web service.
There is defined the server and the cliente who calls the web service.
I hope it would be useful for you.
dsubar на interna точка com ¶
пред 16 години
Do not put a SoapServer and a SoapClient in the same PHP file. This seems to cause arbitrary behavior. On the PHP interpreter in Eclipse, everything worked fine. Under MAMP, I got an undocumented error. In moving the client from the same file as the server, everything worked fine.
s на dumdeedum точка com ¶
12 години пред
I was running PHP 5.3.2 and couldn't for the life of me get SOAP headers to work, no matter how carefully I built my class/wsdl/client. What finally fixed it was updating to the latest PHP. No idea if there was a bug somewhere or what, but it's never a bad idea to stay current and it might save you weeks of frustration!
hawky83 на googlemail точка com ¶
пред 15 години
Another simple example for SOAP_SERVER with errorhandling an params and wsdl:
SERVER (soap_all_srv.php):
<?php
// PEAR::SOAP einbinden
require_once "SOAP/Server.php";
$skiptrace =& PEAR::getStaticProperty('PEAR_Error', 'skiptrace');
$skiptrace = true;
// Service-Class
class mytimeserv {
// __dispatch_map
public $__dispatch_map = array ();
// In/Out param -> __dispatch_map
public function __construct() {
$this->__dispatch_map["now"] =
array ("in" => array("format" => "string"),
"out" => array("time" => "string"));
}
// get back __dispatch_map in __dispatch
public function __dispatch($methodname) {
if (isset($this->__dispatch_map[$methodname])) {
return $this->__dispatch_map[$methodname];
}
return NULL;
}
// servicemthod with parameters
function now ($format) {
// formaterror?
if (($format == null) || (trim($format) == "")) {
// send errormessage
return new SOAP_Fault("Kein Parameter angegeben","0815", "Client");
}
date_default_timezone_set('Europe/Berlin');
$time = date ($format);
// return SOAP-Obj.
return (new SOAP_Value('time','string', $time));
}
}
// service-class
$service = new mytimeserv();
// server
$ss = new SOAP_Server();
// add service with name
$ss->addObjectMap (&$service,"urn:mytimeserv");
// service or wsdl
if (isset($_SERVER["REQUEST_METHOD"])&& $_SERVER["REQUEST_METHOD"] == "POST") {
// postdata -> service
$ss->service ($HTTP_RAW_POST_DATA);
} else {
// wsdl-param in url
if (isset($_SERVER['QUERY_STRING']) && strcasecmp($_SERVER['QUERY_STRING'],'wsdl') == 0) {
// DISCO_Server for WSDL
require_once "SOAP/Disco.php";
$disco = new SOAP_DISCO_Server ($ss,"mytimeserv","My Time Service");
// set HTML-Header
header("Content-type: text/xml");
// return wsdl
print $disco->getWSDL ();
}
}
?>
CLIENT (soap_all_client.php) (for wsdl: http://example.com/soap_all_srv.php?wsdl):
<?php
require_once "SOAP/Client.php";
// SOAP/WSDL
$sw = new SOAP_WSDL ("http://example.com/soap_all_srv.php?wsdl");
// Proxy-Obj.
$proxy = $sw->getProxy ();
// servicemthod
$erg = $proxy->now ("H:i:s");
// return
print $erg."\n";
?>