j3rrey / wsdl2phpgenerator
用于从 wsdl 文件生成 PHP 类的简单类库。
Requires
- php: >=5.3.0
- ext-soap: *
- symfony/options-resolver: ~2.6|~3.0
- symfony/polyfill-iconv: ^1.2
Requires (Dev)
- kasperg/phing-github: 0.2.*
- phing/phing: ~2.7
- php-vcr/php-vcr: 1.2.6 - 1.2.7|^1.3.1
- php-vcr/phpunit-testlistener-vcr: ~1.1.2
- phpunit/phpunit: ~4.4
- psr/log: ~1.0
- symfony/yaml: ~2.1
README
快速修复 PHP7.2 的计数错误。只需将参数实例化为数组即可,一切如预期工作。
wsdl2phpgenerator
简单的 WSDL 到 PHP 类的转换器。接收 WSDL 文件并输出可直接使用的类文件。
使用 MIT 许可证。
公告:我们正在寻找一名或两名具有提交权限的协维护者,以帮助推进此项目,审查拉取请求并响应问题。如果您为此项目做出了贡献,或者在开源社区中活跃参与,并有可供审查的 GitHub 个人资料,请通过 @kasperg 表达您的兴趣。
新主要版本:3.0
wsdl2phpgenerator 的新主要版本 3.0 已发布。
这引入了对配置和生成代码的更改。这些更改使其更灵活,更容易包含在其他项目中,促进贡献并减少维护。
2.x 用户建议阅读 3.0 中的新功能概述。
贡献者
最初由 @walle 开发,并包含了来自 @vakopian、@statikbe、@ecolinet、@nuth、@chriskl、@RSully、@jrbasso、@dypa、@Lafriks、@SamMousa、@xstefanox、@garex、@honzap、@jk、@sheeep、@colinodell、@red-led、@ivol84、@wasinger、@devlead、@NoUseFreak、@HighOnMikey、@theHarvester、@fduch、@methodin、@nkm、@jongotlin、@yethee、@rindeal、@vtsao、@xoeoro、@lunetics、@peter-vanpoucke、@jabiinfante、@renatomefi 和 @kasperg 等人的错误修复和改进。
欢迎提交拉取请求。请阅读 我们关于贡献的指南。
邮件列表
该项目有一个邮件列表,位于 https://groups.google.com/forum/#!forum/wsdl2phpgenerator
安装
将 wsdl2phpgenerator 添加到您的 Composer 项目
composer require wsdl2phpgenerator/wsdl2phpgenerator
该项目还将作为一个命令行应用程序提供,可以下载为 phar 文件。
使用方法
要生成类,请创建一个 Generator
实例并传入一个 Config
实例。
$generator = new \Wsdl2PhpGenerator\Generator(); $generator->generate( new \Wsdl2PhpGenerator\Config(array( 'inputFile' => 'input.wsdl', 'outputDir' => '/tmp/output' )) );
生成代码后,相应地配置您现有的自动加载器。生成的代码还附带了一个简单的 autoload.php
文件,可以直接包含。这将为生成的类注册一个简单的自动加载器。
示例用法
以下示例将在单个过程中从 Web 服务生成代码,加载生成的类,调用 Web 服务并返回结果。
$generator = new \Wsdl2PhpGenerator\Generator(); $generator->generate( new \Wsdl2PhpGenerator\Config(array( 'inputFile' => 'http://www.webservicex.net/CurrencyConvertor.asmx?WSDL', 'outputDir' => '/tmp/CurrencyConverter' )) ); require '/tmp/CurrencyConverter/autoload.php'; // A class will generated representing the service. // It is named after the element in the WSDL and has a method for each operation. $service = new \CurrencyConvertor(); $request = new \ConversionRate(\Currency::USD, \Currency::EUR); $response = $service->ConversionRate($request); echo $response->getConversionRateResult();
请注意,这不是推荐的用法。通常代码生成和Web服务调用将是两个独立的过程。
选项
生成器支持一系列选项,可以在配置中设置。
inputFile
生成类时要使用的WSDL的路径或URL。
outputDir
放置生成的类的目录。如果该目录不存在,则将其创建。
namespaceName
用于生成类的命名空间。如果没有设置,则生成的类将没有命名空间。
示例用法
以下配置将使来自CDYNE Weather Web服务的生成代码位于CDyne\Weather
命名空间下
$generator = new \Wsdl2PhpGenerator\Generator(); $generator->generate( new \Wsdl2PhpGenerator\Config(array( 'inputFile' => 'http://wsf.cdyne.com/WeatherWS/Weather.asmx?wsdl', 'outputDir' => '/tmp/weather', 'namespaceName' => 'CDyne\Weather' )) );
classNames
要生成的类名的逗号分隔列表或数组。WSDL中的所有其他类都将被忽略。
此选项已过时,将在4.0.0版本中删除。请改用operationNames
。
示例用法
以下配置将只从Amazon EC2 Web服务生成AmazonEC2
和CopyImageType
类。
$generator = new \Wsdl2PhpGenerator\Generator(); $generator->generate( new \Wsdl2PhpGenerator\Config(array( 'inputFile' => 'https://s3.amazonaws.com/ec2-downloads/2013-10-01.ec2.wsdl', 'outputDir' => '/tmp/amazon', 'classNames' => 'AmazonEC2, CopyImageType' )) );
operationNames
要生成的服务操作的逗号分隔列表或数组。这将只生成所选操作所需的类型。生成的服务类将只包含所选操作。
示例用法
以下配置将为ReplaceRouteTableAssociation
和RequestSpotInstances
操作生成操作和类型。
$generator = new \Wsdl2PhpGenerator\Generator(); $generator->generate( new \Wsdl2PhpGenerator\Config(array( 'inputFile' => 'https://s3.amazonaws.com/ec2-downloads/2013-10-01.ec2.wsdl', 'outputDir' => '/tmp/amazon', 'operationNames' => 'ReplaceRouteTableAssociation, RequestSpotInstances' )) );
sharedTypes
如果启用,这将使具有相同标识符的所有类型使用相同的类,并且只生成一次。默认解决方案是在名称前添加数字以避免名称冲突。
constructorParamsDefaultToNull
如果启用,则将所有构造函数中所有参数的默认值设置为null
。如果使用此选项,则必须使用访问器设置属性。
proxy
指定在访问WSDL和其他外部资源时要使用的代理。应使用此选项而不是[PHP SoapClient
支持的代理选项](https://php.ac.cn/manual/en/soapclient.soapclient.php),因为wsdl2phpgenerator使用了比SOAP客户端更多的信息。
支持的格式如下
- 具有以下键的数组
host
、port
、login
和password
,与[PHPSoapClient
支持的代理选项](https://php.ac.cn/manual/en/soapclient.soapclient.php)相匹配 - 类似URL的字符串
当访问WSDL以生成代码和后续对SOAP服务的请求时,将使用代理信息。
示例用法
以下配置将使用代理访问Google DoubleClick Ad Exchange Buyer SOAP API
$generator = new \Wsdl2PhpGenerator\Generator(); $generator->generate( new \Wsdl2PhpGenerator\Config(array( 'inputFile' => 'https://ads.google.com/apis/ads/publisher/v201306/ActivityService?wsdl', 'outputDir' => '/tmp/amazon', 'proxy' => 'tcp://user:secret@192.168.0.1:8080' )) );
soapClientClass
用于生成服务的基本类。这应该是PHP SoapClient
的子类。
可以使用的第三方SOAP客户端实现示例
请注意,确保在代码生成和调用Web服务时基类可用是周围代码的责任。
示例用法
以下配置将使用BeSimple SOAP客户端作为基类
$generator = new \Wsdl2PhpGenerator\Generator(); $generator->generate( new \Wsdl2PhpGenerator\Config(array( 'inputFile' => 'input.wsdl', 'outputDir' => '/tmp/output', 'soapClientClass' => '\BeSimple\SoapClient\SoapClient' )) );
soapClientOptions
将配置选项数组传递给 SoapClient。在访问 WSDL 生成代码以及后续请求 SOAP 服务时作为默认值使用。PHP 文档中有支持的选项列表。
可以通过使用更高级的 SoapClient
实现来扩展客户端的选项列表。
请注意,wsdl2phpgenerator 预期 features
选项包含 SOAP_SINGLE_ELEMENT_ARRAYS
。这确保了即使序列只包含一个元素,类型提示也是一致的。如果显式地在 soapClientOptions
中设置了 features
选项,则也必须显式添加 SOAP_SINGLE_ELEMENT_ARRAYS
。
示例用法
以下配置将启用基本身份验证并设置连接超时为 60 秒。
$generator = new \Wsdl2PhpGenerator\Generator(); $generator->generate( new \Wsdl2PhpGenerator\Config(array( 'inputFile' => 'input.wsdl', 'outputDir' => '/tmp/output', 'soapClientOptions' => array( 'authentication' => SOAP_AUTHENTICATION_BASIC, 'login' => 'username', 'password' => 'secret', 'connection_timeout' => 60 )) ));
版本控制
该项目旨在使用语义版本控制。以下构成了公共 API
\Wsdl2PhpGenerator\GeneratorInterface
\Wsdl2PhpGenerator\ConfigInterface
- 生成的代码
对这些的向后不兼容更改意味着主版本号将增加。新增功能和错误修复增加次要和补丁版本。