ASP.net への SOAP 呼び出しに php を使用しようとしています (それがサーバーであると確信しています)。
リクエストの送信に問題があります。これが wsdl の重要な部分だと思います。(私は SOAP の経験がないことに注意してください)。
<s:element name="GetAssetDetails">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="request" nillable="true" type="tns:AssetDetailsRequest"/>
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="AssetDetailsRequest">
<s:complexContent mixed="false">
<s:extension base="tns:RequestBase">
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="AssetGuid" nillable="true" type="s1:guid"/>
<s:element minOccurs="1" maxOccurs="1" name="AssetId" nillable="true" type="s:int"/>
<s:element minOccurs="0" maxOccurs="1" name="AssetName" type="s:string"/><s:element minOccurs="1" maxOccurs="1" name="RequestedInfos" nillable="true" type="tns:AssetInfos"/>
</s:sequence>
</s:extension>
</s:complexContent>
</s:complexType>
次の XML は正しい応答を返しています (テストとして __doRequest を上書きし、これを完全な xml 要求として配置しました)。
$request = '<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<GetAssetDetails xmlns="http://xxxx/...">
<request>
<AssetName>arg1</AssetName>
<RequestedInfos>option1 option2</RequestedInfos>
</request>
</GetAssetDetails>
</soap12:Body>
</soap12:Envelope>';
したがって、実際には AssetGuid は必要ありません。ただし、WSDL には、そうしなければならないと書かれているようです (ただし、これを正しく解釈できるかどうかはわかりません)。
今私がすること:
$ap_param = array(
// 'AssetGuid' => 'EUAUDYEHDOUIDFHADHSJLKW', // Tried with and without this, random value
'AssetName' => 'arg1',
'RequestedInfos' => 'option1 option2'
);
$info = $soapClient->__call("GetAssetDetails", array($ap_param));
ただし、ネットワーク経由で送信される XML では、リクエスト タグは空です。
<?xml version="1.0" encoding="UTF-8"?>
<soap12:Envelope xmlns:soap12="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns1="http://xxx/..."
<soap12:Body>
<GetAssetDetails>
<request xsi:nil="true"/>
</GetAssetDetails></soap12:Body>
</soap12:Envelope>
応答は次のとおりです。
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<soap:Fault>
<soap:Code><soap:Value>soap:Sender</soap:Value></soap:Code>
<soap:Reason><soap:Text xml:lang="en">Unable to handle request without a valid action parameter. Please supply a valid soap action.</soap:Text></soap:Reason>
<soap:Detail />
</soap:Fault>
</soap:Body>
</soap:Envelope>
リクエスト要素が空で、パラメーターを保持していないという私が間違っていることを誰かが知っていますか?
前もって感謝します!