【发布时间】:2018-07-04 22:30:51
【问题描述】:
我对使用 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());
第一个尝试块完成,有或没有凭证数组。尝试调用函数时的第二个尝试块返回异常“看起来我们没有 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 服务器端?
【问题讨论】:
标签: php apache soap soap-client