PHP SOAP 客户端在函数调用中需要身份验证
PHP SOAP client with authentication required in function call
我对使用 SOAP 完全陌生,我希望创建一些连接到现有服务的客户端软件,该服务不为 PHP 提供 resources/demo。我想确定我的代码是否有问题,或者这可能是系统问题(我在 Windows Server 2008 上创建了一个 Apache2.4/PHP7.2.7 R2 环境)。
我已经花了几个小时来测试东西并浏览这里的许多其他 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 块在尝试调用函数 returns 时出现异常 "looks like we got no XML document"。
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 服务器端?
我强烈建议您使用 WSDL 到 PHP 生成器,因为它可以让您毫无疑问地构建请求(至少取决于您的 PHP 知识水平)。
尝试 PackageGenerator 项目。您必须安装它然后生成 PHP SDK。生成的 SDK 使用 composer 并包含发送任何请求所需的所有 类 和方法。查看自动生成的 tutorial.php 文件,这是一个很好的起点。
我对使用 SOAP 完全陌生,我希望创建一些连接到现有服务的客户端软件,该服务不为 PHP 提供 resources/demo。我想确定我的代码是否有问题,或者这可能是系统问题(我在 Windows Server 2008 上创建了一个 Apache2.4/PHP7.2.7 R2 环境)。
我已经花了几个小时来测试东西并浏览这里的许多其他 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 块在尝试调用函数 returns 时出现异常 "looks like we got no XML document"。
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 服务器端?
我强烈建议您使用 WSDL 到 PHP 生成器,因为它可以让您毫无疑问地构建请求(至少取决于您的 PHP 知识水平)。
尝试 PackageGenerator 项目。您必须安装它然后生成 PHP SDK。生成的 SDK 使用 composer 并包含发送任何请求所需的所有 类 和方法。查看自动生成的 tutorial.php 文件,这是一个很好的起点。