【问题标题】:How to generate a PHP soap client code?如何生成 PHP 肥皂客户端代码?
【发布时间】:2016-03-01 08:45:00
【问题描述】:

有没有办法从 WSDL 文件生成 PHP Soap 客户端?

我的意思是 .net 中的 wsdl.exesvcutil.exe 之类的东西,它们为可以作为服务客户端的类生成代码,而不是类似:

$WSDL     = new SOAP_WSDL($wsdl_url); 
$client   = $WSDL->getProxy(); 

我的问题是我希望 PHP 客户端能够使用服务,即使该服务没有公开其 WSDL。

【问题讨论】:

    标签: php soap wsdl soap-client


    【解决方案1】:

    我发现生成器真的很有用

    https://github.com/wsdl2phpgenerator/wsdl2phpgenerator

    说明(来自 github):

    也适用于网络托管的 wsdl

    例如

    php wsdl2phpgenerator-2.3.0.phar -i http://someurl/input.wsdl -o tmp/my/directory/wsdl
    

    【讨论】:

    • 有史以来最好的解决方案:您不必使用 composer,它会生成一个包含所有需要的类以及如何使用它们来调用远程方法的文件夹
    【解决方案2】:

    您可以改用包SOAP_WSDL(http://pear.php.net/reference/SOAP-0.9.4/SOAP/SOAP_WSDL.html#methodgenerateProxyCode)方法中提供的方法[generateProxyCode]并将其保存到文件中:

    $WSDL     = new SOAP_WSDL($wsdl_url); 
    $php      = $WSDL->generateProxyCode();
    file_put_contents('wsdl_proxy.php', '<?php ' . $php . ' ?>');
    
    require 'wsdl_proxy.php';
    

    【讨论】:

    • 关于示例代码的两个注意事项:您需要在 require_once("SOAP/WSDL.php"); 中包含 PEAR 类;并且方法不是 $WSDL->getProxyCode();但是 $WSDL->generateProxyCode();
    【解决方案3】:

    有一个应用程序,它叫做 wsdl2phpgenerator:

    http://code.google.com/p/wsdl2phpgenerator/

    针对 WSDL 文件运行它,它将基于 WSDL 服务生成类。

    【讨论】:

    【解决方案4】:

    只是为了帮助其他看到这篇文章并认为“我到底是如何使用这个 SOAP_WSDL 东西工作的?”的人。 (像我一样)

    打开命令行并进入你的php目录(在这个例子中我安装了XAMPP Lite)

    在 php 目录中,我运行了 pear.bat 脚本。在此之后,我可以通过 cmd 行输入以下内容

    pear -V(提供您的安装版本)

    梨列表

    如果您键入以上内容但没有看到 SOAP,您需要从 cmd 行执行以下操作:

    • pear install Net_DIME-1.0.1

    • pear install Mail_Mime-1.5.2

    • pear install Mail-1.2.0b1

    • pear 安装 SOAP-0.12.0

    现在,在您安装这些包并执行另一个“梨列表”后,您应该会看到列出的 SOAP。

    如果是这样,您可以包含对在 SOAP 下的 pear 目录中下拉的 php 文件的引用。

    此路径的一个示例可能是 C:\xampplite\php\PEAR\SOAP

    【讨论】:

      【解决方案5】:

      我用的是wsdl2php,一个简单的PEAR工具;看来项目已经死了,但你仍然可以在这里下载最新版本:http://sourceforge.net/projects/wsdl2php/

      它需要使用 PHP 5 和 PEAR 的开发机器,并且您必须使用此 PEAR 命令安装它:

      sudo pear install wsdl2php-0.2.1-pear.tgz
      

      之后,您可以使用以下命令生成 PHP 类文件:

      wsdl2php <WSDL_URL>
      

      它生成一个扩展 SoapClient 的主类,以及许多其他表示请求、响应和复杂对象的类,因此在像 NetBeans 这样的带有“智能感知”的 IDE 中开发时非常有用。

      【讨论】:

      • 我们如何在windows中安装相同的?
      【解决方案6】:

      我已尝试使用此处列出的所有内容。

      找到另一个选择:https://github.com/mikaelcom/WsdlToPhp

      与以前相比的优点:

      • 没有依赖关系。 生成器和创建的客户端。

      • inout 参数的类。

      • 已创建客户端的使用示例。 当然没那么重要。但有时非常有用

      • 代码更少(与 SOAP_WSDL 相比)

      缺点:

      • 答案和任何复杂的子类型都被包装到另一个包含技术信息的对象中。

      【讨论】:

      • 感谢您的详细反馈。您能否向我发送有关您的评论的更多详细信息“答案和任何复杂的子类型都被包装到另一个包含技术信息的对象中。”在contact@wsdltophp.com,非常感谢,谢谢
      • 实际上是不正确的。在 .NET 中,您可以获得与服务对象完全相同的对象。但就我而言,当我从 .NET 服务获得 PHP 响应时,我有“额外的”包装器。它们实际上存在于 WSDL 中,但 .NET 不知何故“知道”某些类仅用于技术需求并在结果中将其删除。
      • 谢谢,如果你有一些例子,那就太好了,否则我会搜索是否可以避免。
      猜你喜欢
      • 1970-01-01
      • 2018-04-27
      • 2019-01-27
      • 1970-01-01
      • 2011-07-07
      • 2016-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多