PHP SOAP客户端需要在函数调用中进行身份验证

时间:2018-07-04 22:30:51

标签: php apache soap soap-client

我对使用SOAP完全陌生,并且希望创建一些客户端软件来连接到现有服务,该服务不为PHP提供资源/演示。我想确定我的代码是否做错了,或者这可能是系统问题(我已经在Windows Server 2008 R2环境中创建了Apache2.4 / PHP7.2.7)。

我已经花了几个小时来测试事物,并在这里遍历其他许多SOAP / PHP主题,而我要编写自己的线程的区别在于,SoapClient中需要身份验证调用,而是$ client-> __ soapCall(function,params)调用。

首先,这就是我在PHP中所拥有的。

$customerArray = array( $cust1 , $cust2, $cust3 );
$credentials = array(
 'login' => $login,
 'password' => $password,
);  

try{
    $client = new SoapClient($soaplink);//, $credentials);
} catch (Exception $e) {
    echo "<h2>Exception Error in SoapClient</h2>";
    echo $e->getMessage();
}   
var_dump($client->__getFunctions());

try{
    $response = $client->__soapCall("getCustomers", array($customerArray, $credentials));
}catch (Exception $e) {
    echo "<h2>Exception Error in soapCall</h2>";
    echo $e->getMessage();
}   
var_dump($response());

第一个try块完成(带有或不带有凭据数组)。尝试调用该函数时,第二个try块返回异常“看起来我们没有XML文档”。

SOAP服务提供了演示XML文件,用于此功能的文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope 
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soapenv:Body>
        <ns1:getCustomers 
            soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
            xmlns:ns1="http://ws.praxedo.com/2008_07_01/customermodel/service"
        >
            <in0 
                soapenc:arrayType="soapenc:string[3]" 
                xsi:type="soapenc:Array" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
            >
                <in0 xsi:type="soapenc:string">CUSTOMER001</in0>
                <in0 xsi:type="soapenc:string">CUSTOMER002</in0>
                <in0 xsi:type="soapenc:string">CUSTOMER003</in0>
            </in0>
            <in1 
                xsi:type="soapenc:string" 
                xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
            >
                login|password
            </in1>
        </ns1:getCustomers>
    </soapenv:Body>
</soapenv:Envelope>
还提供了

WSDL文件,可能是我需要从中加载文件,但在进行演示后未提供任何结果。我可以在此处包括一些WSDL,但我相信XML提供了所有相关细节?

因此,谁能在我的PHP中看到我在做错什么,还是应该在做我正在做的事情,我需要研究客户端Apache / SOAP服务器端?

1 个答案:

答案 0 :(得分:1)

我强烈建议您使用WSDL to PHP生成器,因为它可以让您毫无疑问地构造请求(至少取决于您的PHP知识水平)。

尝试PackageGenerator项目。您必须先安装它,然后生成PHP SDK。生成的SDK使用composer,并包含发送任何请求所需的所有类和方法。看一下自动生成的tutorial.php文件,这是一个很好的起点。