Я пытаюсь научить себя SOAP, просто немного расширить свой набор навыков, но я ударил стену, и мне было интересно, может помочь?PHP/SOAP - пытается учиться, но имеет проблемы с реализацией
Я создал свой сервер таким образом:
http://www.domain1.com/server.php
<?php
// Pull in the NuSOAP code
require_once('soap/nusoap.php');
// Create the server instance
$server = new soap_server();
// Initialize WSDL support
$server->configureWSDL('hellowsdl', 'urn:hellowsdl');
// Register the method to expose
$server->register('hello', // method name
array('name' => 'xsd:string'), // input parameters
array('return' => 'xsd:string'), // output parameters
'urn:hellowsdl', // namespace
'urn:hellowsdl#hello', // soapaction
'rpc', // style
'encoded', // use
'Says hello to the caller' // documentation
);
// Define the method as a PHP function
function hello($name) {
return 'Hello, ' . $name;
}
// Use the request to (try to) invoke the service
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
?>
А теперь я пытался настроить клиента на отдельном сервере:
http://www.domain2.com/client.php
<?php
// Pull in the NuSOAP code
require_once('soap/nusoap.php');
// Create the client instance
$client = new soapclient('http://domain.com/server.php?wsdl', true);
// Check for an error
$err = $client->getError();
if ($err) {
// Display the error
echo '<h2>Constructor error</h2><pre>' . $err . '</pre>';
// At this point, you know the call that follows will fail
}
// Call the SOAP method
$result = $client->call('hello', array('name' => 'Scott'));
// Check for a fault
if ($client->fault) {
echo '<h2>Fault</h2><pre>';
print_r($result);
echo '</pre>';
} else {
// Check for errors
$err = $client->getError();
if ($err) {
// Display the error
echo '<h2>Error</h2><pre>' . $err . '</pre>';
} else {
// Display the result
echo '<h2>Result</h2><pre>';
print_r($result);
echo '</pre>';
}
}
// Display the request and response
echo '<h2>Request</h2>';
echo '<pre>' . htmlspecialchars($client->request, ENT_QUOTES) . '</pre>';
echo '<h2>Response</h2>';
echo '<pre>' . htmlspecialchars($client->response, ENT_QUOTES) . '</pre>';
// Display the debug messages
echo '<h2>Debug</h2>';
echo '<pre>' . htmlspecialchars($client->debug_str, ENT_QUOTES) . '</pre>';
?>
Но я не могу заставить рабочую вещь работать. На сервере отображается только тонкий - wdsl вывод лота. Но клиент не может/не сможет подключиться и завершить транзакцию. Я получаю сообщение:
Warning: SoapClient::SoapClient() expects parameter 2 to be array, boolean given in /home/public_html/slidebank_soap_client.php on line 5
Fatal error: Uncaught SoapFault exception: [Client] SoapClient::SoapClient() [<a href='soapclient.soapclient'>soapclient.soapclient</a>]: Invalid parameters in /home/soap/slidebank_soap_client.php:5 Stack trace: #0 /home/soap/slidebank_soap_client.php(5): SoapClient->SoapClient('http://testing....', true) #1 {main} thrown in /home/public_html/soap/slidebank_soap_client.php on line 5
И это где я тупик ...
Любые идеи?
H
Благодаря Иэн, это было очень полезно! В конце концов, я использовал свой код обслуживания и ваш код клиента, и они были без проблем! Теперь все работает, поэтому большое спасибо :) – MrFidge
Рад, что вы сочли это полезным! Кажется, что nusoap (по-прежнему) лучший вариант для создания SOAP-сервисов с PHP на данный момент, так что похоже, что вы пошли по лучшему маршруту. Надеюсь, PHP в какой-то момент получит встроенную реализацию SOAP-сервера, столь же изящную, как и клиентскую! –
Да, похоже, это упущение tbh! Зачем делать полузакрытую работу и обеспечивать ее без нее? – MrFidge