私は WSDL をサポートする SOAP Web サービスに取り組んでいます。WSDL ファイルはhttp://paygoo.com/soap/server.wsdl
にあります。
Web サービスには 3 つの機能があります。GetUserInfo、TransferFromWallet、および TransferToWallet。
関数 GetUserInfo は正常に動作するので、他の 2 つの関数をこのように設計しましたが、他の 2 つの関数 TransferFromWallet と TransferToWallet はクライアントからパラメーターを受信しません。
関数 GetUserInfo は次のようになります。
function GetUserInfo($sessionID)
{
if (mysql_num_rows($result)==1){
if (mysql_num_rows($result)==1)
{
$element->balance = new SoapVar($balance, XSD_DECIMAL, '','','');
$element->currencyCode = new SoapVar("EUR", XSD_STRING, '','','');
$element->displayName = new SoapVar($row['username'], XSD_STRING, '','','');
$element->languageCode = new SoapVar("DE", XSD_STRING, '','','');
$element->UID = new SoapVar($row['ID'], XSD_STRING, '','','');
$element->responseCode = new SoapVar("OK", XSD_STRING, '','','');
return new SoapVar($element, SOAP_ENC_OBJECT,'');
}else
{
$element->responseCode = new SoapVar("UNEXPECTED_ERROR", XSD_STRING, '','','');
return new SoapVar($element, SOAP_ENC_OBJECT,'');
}
}else
{
$element->responseCode = new SoapVar("INVALID_SESSION", XSD_STRING, '','','');
return new SoapVar($element, SOAP_ENC_OBJECT,'');
}
}
関数 TransferFromWallet および TransferToWallet は次のようになります。
function TransferFromWallet($sessionID, $UID, $amount)
{
if (mysql_num_rows($result)==1){
if ($row2['ID'] == $UID)
{
if($amount > 0 and $amount <= $balance)
{
$element->responseCode = new SoapVar("OK", XSD_STRING, '','','');
return new SoapVar($element, SOAP_ENC_OBJECT,'');
}else
{
$element->responseCode = new SoapVar("BALANCE_TOO_LOW", XSD_STRING, '','','');
return new SoapVar($element, SOAP_ENC_OBJECT,'');
}
}else
{
$element->responseCode = new SoapVar("INVALID_UID", XSD_STRING, '','','');
return new SoapVar($element, SOAP_ENC_OBJECT,'');
}
}else
{
$element->responseCode = new SoapVar("INVALID_SESSION", XSD_STRING, '','','');
return new SoapVar($element, SOAP_ENC_OBJECT,'');
}
}
私はすべての機能とサーバーを次のように定義しました:
$server = new SoapServer("./soap/server.wsdl",
array('uri' => "http://paygoo.com/server.php"));
//Funktionen zum SOAP Server hinzufügen
$server->addFunction('GetUserInfo');
$server->addFunction('TransferFromWallet');
$server->addFunction('TransferToWallet');
//Hier wird die Abfrage abgearbeitet
$server->handle();
私のテストクライアントは次のようになります。
<?php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set("soap.wsdl_cache_enabled", 0);
$requesttype = $_REQUEST['soapRequest']; //Art des Requests Variable wird gesetzt.
$sessionID = $_REQUEST['sessionID']; //session_id Variable wird gesetzt.
$UID = $_REQUEST['UID']; //UserID Variable wird gesetzt
$amount = $_REQUEST['balance']; //Zu transferierendes Guthaben Varialbe wird gesetzt
//$client = new SoapClient('http://paygoo.com/soap/server.wsdl'); //{url} wie immer ersetzen
//$sessionID = 'ae3a12e662884604c069b4dfc5a13afd';
$wsdl = 'http://paygoo.com/soap/server.wsdl';
$client = new SoapClient($wsdl);
if($requesttype=="GetUserInfo")
{
//$parms = array('sessionID' => $sessionID);
$result = $client->GetUserInfo($sessionID);
}
if($requesttype=="TransferFromWallet"){
//$parms = array('sessionID' => $sessionID, 'UID' => $UID, 'amount' => $amount);
$result = $client->TransferFromWallet($sessionID, $UID, $amount);
}
if($requesttype=="TransferToWallet"){
//$parms = array('sessionID' => $sessionID, 'UID' => $UID, 'amount' => $amount);
$result = $client->TransferToWallet($sessionID, $UID, $amount);
}
?>
<h1>Result</h1>
<pre> <?php var_dump($result) ?> </pre>
SOAP サーバーはパラメータ sessionID、UID、および amount を受け取りません。
編集:タグ
でパラメーターを定義しました。<types>
このような:
<wsdl:types>
<xsd:schema elementFormDefault='qualified' targetNamespace='http://paygoo.com/soap/server.wsdl'>
<xsd:element name='transferRequest'>
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs='0' maxOccurs='1' name='sessionID' type='xsd:string'/>
<xsd:element minOccurs='0' maxOccurs='1' name='UID' type='xsd:string'/>
<xsd:element minOccurs='0' maxOccurs='1' name='amount' type='xsd:decimal'/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name='transferResponse'>
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs='0' maxOccurs='1' name='ResponseCode' type='xsd:string'/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</wsdl:types>
このリクエストを送信した場合:
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:xmethodsWallet">
<soapenv:Header/>
<soapenv:Body>
<urn:TransferFromWallet soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<transferRequest>
<sessionID>c230f895fb98ab9159f51fd0297e236d</sessionID>
<UID>975</UID>
<amount>1</amount>
</transferRequest>
</urn:TransferFromWallet>
</soapenv:Body>
</soapenv:Envelope>
私の関数TransferFromWallet
はパラメータを受け取りませんでした。
クライアントで実行する__getFunctions
と__getTypes
、次の応答が返されます。
Funktionen
array(3) {
[0]=>
string(43) "string GetUserInfo(string $userinfoRequest)"
[1]=>
string(69) "transferResponse TransferFromWallet(transferRequest $transferRequest)"
[2]=>
string(67) "transferResponse TransferToWallet(transferRequest $transferRequest)"
}
Typen
array(2) {
[0]=>
string(75) "struct transferRequest {
string sessionID;
string UID;
decimal amount;
}"
[1]=>
string(49) "struct transferResponse {
string ResponseCode;
}"
}
関数でパラメーターを受信しない理由を誰か教えてもらえますか?