我正在使用WSDL支持的SOAP Web服務。
WSDL文件位於:http://paygoo.com/soap/server.wsdlSOAP請求參數不到達PHP函數
我的Web服務中有3個函數。 GetUserInfo,TransferFromWallet和TransferToWallet。
函數GetUserInfo工作正常,所以我設計了這樣的另外兩個函數,但另外兩個函數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和金額。
編輯:
我現在定義了<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
didnt recive任何參數。
如果我運行在客戶端__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;
}"
}
誰能告訴我爲什麼我不recive在函數的參數?
不同於論壇的網站,我們不使用「謝謝」,或者「任何幫助表示讚賞」,或簽名上(因此)。請參閱「[應該'嗨','感謝',標語和祝福從帖子中刪除?](http://meta.stackexchange。COM /問題/ 2950 /應喜感謝,標語和 - 稱呼被移除從 - 個)。 –
@John Saunders ...你在評論中提到的鏈接上給出的主要原因是沒有必要額外混亂,這樣人們就可以更容易地看到答案了嗎?也許羣衆應該考慮到,雖然他們可能是有效的陳述,但他們對於適當的問題,恰當的安全程序,不推薦的功能等等意見似乎總是有問題,儘管它們可能是有效的陳述,但它們大多數始終與這個問題無關。一致性人...一致性。 – Mattt