通过PHP调用WSDL SOAP - 忽略参数

时间:2017-01-25 01:51:24

标签: php web-services soap wsdl soap-client

我试图从远程WSDL Web服务中使用某些过滤器。尝试这样做时我没有错误,但我得到的只是数据的完整列表,这些参数被忽略。

致电$client->__getFunctions()检索空白页面,因此我不知道该怎么做。

这是XML:

<s:element name="Entities">
    <s:complexType>
        <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="Format" type="s:string"/>
            <s:element minOccurs="0" maxOccurs="1" name="wherefilter" type="s:string"/>
            <s:element minOccurs="0" maxOccurs="1" name="ordercondition" type="s:string"/>
        </s:sequence>
    </s:complexType>
</s:element>

这就是我尝试用PHP做的事情:

public static function fetch($name = 'Entities')
{
    $base = 'http://tempuri.org/';

    $client = new \SoapClient(null, [
        'location'   => '...',
        'uri'        => '...',
        'trace'      => 1,
        'exceptions' => true
    ]);

    $params = ['Format' => 'JSON'];

    try {
        // $params is being ignored
        $data = $client->__soapCall($name, $params, ['soapaction' => $base . $name]);

        return $data;
    }
    catch (\SoapFault $ex) {
        abort(403, $ex); 
    }
    catch (Exception $ex) {
        die($ex);
    }
}

任何关于我做错事的提示都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

在环绕互联网寻找答案之后,我不得不重新构建代码以使其成功。我不完全确定为什么旧的设置不起作用,但这就是它现在的工作方式:

public static function fetch()
{
    $options = [
        'trace'         => 1,
        'exceptions'    => true
    ];

    $client = new \SoapClient('my_soap_url.asmx?WSDL', $options);

    try {
        $input = new \stdClass();
        $input->Format = "JSON";

        $data = $client->Entities($input);

        return reset($data);
    }
    catch (Exception $ex) {
        echo 'Caught exception: ',  $e->getMessage(), PHP_EOL . PHP_EOL;
        echo 'REQUEST:' . $client->__getLastRequestHeaders() . $client->__getLastRequest() . PHP_EOL . PHP_EOL;
        echo 'RESPONSE:' . $client->__getLastResponseHeaders() . $client->__getLastResponse();   
    }
}