2016-10-29 6 views
2

サービス依頼をしようとしています。SOAP 1.2関数( "GetReference")はこのサービスに有効なメソッドではありません

ここでのWSDLファイルへのリンクはWSDL

ここでコード

$client = new SoapClient("http://zelsoft.ru/intourxml_v2/BookingService.asmx?WSDL", array(
'soap_version'=> SOAP_1_2, 
'exceptions' => 1, 
)); 

$xml = <<<XML 
<GetReferenceRq> 
    <Login>Zelsoft</Login> 
    <Password>zel123</Password> 
    <Countries>true</Countries> 
    <Regions>true</Regions> 
</GetReferenceRq> 
XML; 


$struct = new SoapVar($xml,XSD_ANYXML,"GetReferenceRq"); 

try{ 
    echo "<pre>"; 
    print_r($client->__getFunctions()); 
    print_r($client->GetReference($struct)); 
    echo "</pre>"; 
} catch(Exception $e){ 
    echo $e->getMessage(); 
} 

だが、私はエラー

Function ("GetReference") is not a valid method for this service 

$client->__getFunctions() 

に取得するには、この方法は、答えを

おかげで存在することを示し

は、私が0にsoap.wsdl_cache_enabled設定することで、この問題を解決しますが、別の問題

私は、このようなコードで

$client = new SoapClient("http://zelsoft.ru/intourxml_v2/BookingService.asmx?WSDL", array(
'soap_version'=> SOAP_1_2, 
'exceptions' => 1, 
)); 

class GetReferenceRq{ 
    public $Login = 'Zelsoft'; 
    public $Password = 'zel123'; 
} 

try{ 
    echo "<pre>"; 
    print_r($client->GetReference(new GetReferenceRq())); 
    echo "</pre>"; 
} catch(Exception $e){ 
    echo $e->getMessage(); 
} 

をリクエストを送信したが、応答

System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.NullReferenceException: Object reference not set to an instance of an object. 
    at Zelsoft.InTourXML.BusinessLogic.Base.GetBaseRqParams(SqlConnection cnn, BaseRq rq) 
    at Zelsoft.InTourXML.BusinessLogic.Base.Connect(BaseRq rq) 
    at Zelsoft.InTourXML.BusinessLogic.Reference.GetReference(GetReferenceRq rq) 
    at Zelsoft.InTourXML.BookingService.GetReference(GetReferenceRq rq) 
    --- End of inner exception stack trace --- 
を取得していますを取得し

を更新しました

答えて

1

GetReferenceRqデータ型にログインまたはパスワードフィールドがないようです。私はこの結論にどのようになったかをお見せしましょう。おそらく、誰かにSOAPのトラブルシューティング方法の手がかりを与えるでしょう。

$client->__getFunctions()出力から、あなたはGetReference用APIの署名を見ることができます:

array(38) { 
    [0]=> 
    string(59) "GetReferenceResponse GetReference(GetReference $parameters)" 

これはタイプGetReferenceであることが必要$parametersと呼ばれる一つのパラメータを、取るGetReference()方法ことを示しています。あなたは、そのデータ型が$client->__getTypes()を行うことによって、どのようなものかを知ることができます。

array(157) { 
    [0]=> 
    string(43) "struct GetReference { 
GetReferenceRq rq; 
}" 
    [1]=> 
    string(569) "struct GetReferenceRq { 
boolean Countries; 
boolean Regions; 
boolean Cities; 
boolean Districts; 
boolean Meals; 
boolean Currencies; 
boolean HotelServices; 
boolean HotelCategories; 
boolean Hotels; 
boolean Genders; 
boolean RoomTypes; 
boolean RoomCategories; 
boolean AccommodationTypes; 
boolean BookingStatuses; 
boolean TransferPointTypes; 
boolean TransferPoints; 
boolean TransferTypes; 
boolean Attractions; 
boolean Languages; 
boolean HotelChains; 
boolean Flights; 
boolean TourTypes; 
boolean TourDirections; 
int CountryId; 
int CityId; 
int TypeId; 
}" 

だから、あなたはあなたのGetReferenceRqが含まれていますクラスを作成する必要があります。 object has no 'Countries' property:あなたは今、新しいエラーを持っているしかし

$client = new SoapClient("http://zelsoft.ru/intourxml_v2/BookingService.asmx?WSDL", array(
'soap_version'=> SOAP_1_2, 
'exceptions' => 1, 
)); 

class GetReference { 
    public $rq; 
} 

class GetReferenceRq{ 
    public $Login = 'Zelsoft'; 
    public $Password = 'zel123'; 
} 

$parameters = new GetReference(); 
$parameters->rq = new GetReferenceRq(); 

try{ 
    echo "<pre>"; 
    print_r($client->GetReference($parameters)); 
    echo "</pre>"; 
} catch(Exception $e){ 
    echo $e->getMessage(); 
} 

:あなたのコードは次のように見てする必要があります。実際、GetReferenceRqタイプにはログインとパスワードのフィールドはありません。代わりに、国、地域などを追加する必要があります。

Webサービスで認証が必要な場合は、その動作を確認するためにドキュメントを参照する必要があります。

関連する問題