【问题标题】:PHP SOAP client with authentication required in function call函数调用中需要身份验证的 PHP SOAP 客户端
【发布时间】: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


    【解决方案1】:

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

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

    【讨论】:

    • 好的,我会看看那个,看看我能用它做什么。我从头开始用肥皂,所以可能是我需要的工具。
    猜你喜欢
    • 1970-01-01
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 2016-06-20
    • 2015-05-03
    • 1970-01-01
    相关资源
    最近更新 更多