2017-11-18 27 views
1

最近、ホテル管理サービスのSOAP APIにアクセスできました。彼らはまた、彼らのドキュメントの機能や機能ごとに必要なパラメータのリストを提供してきたPHPでWSDLのないSOAP APIとのやりとり

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">  
<soapenv:Header>  
    <Auth xmlns="http://xxxx/xxxxAPI">   
    <FromSystemId ID="1">CompanyName</FromSystemId>   
    <UserName>username</UserName>   
    <Password>password</Password>  
    </Auth>  
</soapenv:Header>  
<soapenv:Body>  
    <GetRegions Timestamp="2016-04-11" Version="1.0" Lang="en" 
    xmlns="http://xxxx/xxxxAPI"> 
    <Country Code="GB" /> 
    </GetRegions>  
</soapenv:Body> 
</soapenv:Envelope> 

:彼らは要求の基本的な例を示した文書を提供してきました。しかし、私は前にsoap APIを使ったことがないので、リクエストを実行する方法について混乱しています。彼らもWSDLを提供していませんが、これは問題ですか?とにかく

は、ここで私はこのことについて正しい道を行くアム要求

$soapURL = "http://xxxx/xxxxAPI" ; 
$soapParameters = Array('login' => "username", 'password' => "password") ; 
$soapFunction = "getRegions"; 
$soapFunctionParameters = Array('countrycode' => 'GB'); 

$soapClient = new SoapClient($soapURL, $soapParameters); 

$soapResult = $soapClient->__soapCall($soapFunction, 
$soapFunctionParameters) ; 

if(is_array($soapResult) && isset($soapResult['someFunctionResult'])) { 
    // Process result. 
} else { 
    // Unexpected result 
    if(function_exists("debug_message")) { 
     debug_message("Unexpected soapResult for {$soapFunction}: ".print_r($soapResult, TRUE)) ; 
    } 
} 

を試してみて、実行する考えどのようにでしょうか?私は私の認証を受けていないので、私は今これをテストすることができませんが、今すぐ始めたいと思っています。

助けがあれば助かります。

+0

ルック:https://php.net/manual/en/book.soap.php –

答えて

2

ここに小さな例があります。

$opts = array(
    'location' => 'http://xxxx/xxxxAPI', 
    'uri' => 'urn:http://test-uri/' 
); 

$client = new SOAPClient(null, $opts); 

$headerData = array(
    'FromSystemId' => 'CompanyName', 
    'UserName' => 'username', 
    'Password' => 'password', 
); 

// Create Soap Header. 
$header = new SOAPHeader('http://xxxx/xxxxAPI', 'Auth', $headerData); 

// Set the Headers of Soap Client. 
$client->__setSoapHeaders($header); 


$result = $client->__soapCall('getRegions', array('GB')); 

// $return = $client->__soapCall('getRegions', array(new SoapParam(new SoapVar('GB', XSD_STRING), 'countryCode'))); 

var_dump($result); 

彼らはまた、この問題は、WSDLを提供していないん?

HEADER属性を追加できるようにするには、WSDLに記述する必要があります。 WSDLに存在しない場合は、属性として表示されるのではなく、<item><key/><value/></item>の要素として表示されます。

Tipp:リクエストがどのようにしてWSDLがないか分かっている場合は、HTTPヘッダーとXML本体を手動で生成し、CURLまたはGuzzleで要求を実行してください。がつがつ食うと

例:PHPのSOAP拡張に

$soapContent = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">  
<soapenv:Header>  
    <Auth xmlns="http://xxxx/xxxxAPI">   
    <FromSystemId ID="1">CompanyName</FromSystemId>   
    <UserName>username</UserName>   
    <Password>password</Password>  
    </Auth>  
</soapenv:Header>  
<soapenv:Body>  
    <GetRegions Timestamp="2016-04-11" Version="1.0" Lang="en" 
    xmlns="http://xxxx/xxxxAPI"> 
    <Country Code="GB" /> 
    </GetRegions>  
</soapenv:Body> 
</soapenv:Envelope>'; 

$client = new GuzzleHttp\Client([ 
    'headers' => [ 'SOAPAction' => '"urn:http://xxxx/xxxxAPI/#getRegions"' ] 
]); 

$response = $client->post('http://xxxx/xxxxAPI', 
    ['body' => $soapContent] 
); 

echo $response; 
+0

は、素敵な答えをありがとうございました。 –

関連する問題