如何将params插入soap-api-php-soap


how to insert params to soap api - php soap

我想连接API-发送请求并获取数据。

首先,我得到了所有可用的功能:

$client = new SoapClient('https://website.com/api.asmx?wsdl');
print_r($client->__getFunctions());

我显示阵列,像这样:

[0] => CheckExampleResponse CheckExample(CheckExample $parameters)

所以,我必须使用这种方式:

$client->CheckExample($params);

但是,我不知道如何发送这个XML:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xs="XmlServices">
    <soapenv:Header/>
    <soapenv:Body>
        <xs:GetExample>
            <xs:request>
                <xs:Credentials>
                    <xs:UserName>?</xs:UserName>
                    <xs:Password>?</xs:Password>
                    <xs:PostlId>?</xs:HotelId>
                </xs:Credentials>
                <xs:DataTest>2015-01-01T00:00:00</xs:DataTest>
                <xs:DataTest2>2015-01-02T23:59:59</xs:DataTest2>
                <xs:StatusTest>publish</xs:StatusTest>
            </xs:request>
        </xs:GetExample>
    </soapenv:Body>
</soapenv:Envelope>

当我将这个XML字符串作为参数传递给CheckExample时,我会得到这样的错误:"请求参数不能为null。"

谢谢。

GetExample方法也应该出现在__getFunctions调用中。那么这应该起作用:

<?php
$client = new SoapClient('https://website.com/api.asmx?wsdl');
$soapmessage = [
    'request' => [
        'Credentials' => [
            'UserName' => '?',
            'Password' => '?',
            'PostlId' => '?'
        ],
        'DataTest' => '2015-01-01T00:00:00',
        'DataTest2' => '2015-01-02T23:59:59',
    ]
];
$result = $client->GetExample($soapmessage);
print_r($result);

当您将SOAP函数作为SoapClient的方法进行调用时,实际上是在调用SoapClient::__soapCall()函数,并将函数名称作为第一个参数进行传递。因此,了解这个函数的参数是很好的。

您可以看到,要传递参数,需要传递一个数组。这必须与SOAP服务器所期望的相匹配;详细信息可以在WSDL中找到,并且不会通过对SoapClient::__getFunctions()的调用来显示。如果您不想读取WSDL,那么SOAP服务提供者还应该提供API文档来确定正确的值。

值得记住的是,即使SOAP函数不需要任何参数,也必须向PHP函数传递一个空数组。