繁体   English   中英

在php中使用Soap 1.2生成客户端

[英]Generating a client with Soap 1.2 in php

你能告诉我是否有一个工具来生成满足这些要求的soap客户端:

  1. 肥皂1.2
  2. 客户端基于三种不同的服务(所以3 wsdl)
  3. 这些服务有共享类型

我发现了:

http://php.net/manual/en/class.soapclient.php

http://www.php.net/manual/en/soapclient.soapclient.php

我找不到寻找它的东西尤其是最后两点。 任何帮助将不胜感激,因为我无法知道如何从不同的来源创建它以及如何调用特定的服务。

我想弄清楚你可能想做什么。

  • 第一:一个WSDL ===一个服务===一个SoapClient。 您不能在Soap客户端级别混合使用两个WSDL位置,但根据您的应用程序,可能会在更高级别上连接每个服务的结果。

    因此,如果您有三个WSDL,那么您必须实例化三个要使用的SoapClient类。 它不像可以向任何现有Web服务器发出请求的单个通用HTTP客户端。

  • 第二:除非你为SoapClient提供一个类图,否则任何请求的返回值只是stdClass和array的混合。 可能在WSDL中定义了类型,但除非您定义它,否则PHP不会将它们映射到任何类型。

    我建议使用带有您自己定义的类的类映射,这些类与WSDL中的ComplexType定义相匹配。 有一些代码生成器可以用googled来完成这项工作,但是Soap标准很复杂,WSDL的定义也是如此,所以你最终可能会手工完成工作。

    如果数据结构很小,您可以在没有类映射的情况下完美地生存。

  • 第三:如果三个WSDL共享数据类型,这不会以任何方式影响PHP。 由于没有类映射,响应是stdClass和Array,并且Request参数可以是相同的,您将无法从此信息中获得任何好处。

    另一方面,如果你采用类图的方式,我希望共享类型将导致生成相同的类,因此您还会在PHP级别上看到来自服务A的ComplexType与ComplexType的ComplexType相同。服务B.

我无法测试我的解决方案,因为我没有运行2-3个Web服务,但我认为这个解决方案可行(如果我理解正确的话)。 如果你能尝试一下,请告诉我。

<?php
class wstest {
    function __construct($url) {
        $this->soapUrl = $url;
        try{
            $this->client = new SoapClient($this->soapUrl,array('login' => 'wsuser', 'password' => "some_password", "connection_timeout"=>30,'trace'=>true,'keep_alive'=>false,'features' => SOAP_SINGLE_ELEMENT_ARRAYS));
        } catch (Exception $e) {            
            echo $e->getMessage();
        }
    }
};

$con = new wstest("http://firstwebservice.com/?wsdl");

$con2 = new wstest("http://secondwebservice.com/?wsdl");

$con3 = new wstest("http://thirdwebservice.com/?wsdl");
?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM