php-soap / wsdl
处理WSDL
1.10.0
2024-08-21 12:06 UTC
Requires
- php: ~8.1.0 || ~8.2.0 || ~8.3.0
- ext-dom: *
- azjezz/psl: ^2.1
- league/uri: ^7.0
- league/uri-components: ^7.0
- php-soap/xml: ^1.4
- symfony/console: ^5.4 || ^6.0 || ^7.0
- veewee/xml: ~2.2 || ~3.0
Requires (Dev)
- phpunit/phpunit: ^9.5
- psalm/plugin-symfony: ^5.0
- vimeo/psalm: ^5.9.0
README
本包提供处理WSDL的工具和助手。
想要帮忙?💚
想了解更多关于此项目未来的信息?查看我们将要工作的下一个大型项目列表。
安装
composer require php-soap/wsdl
WSDL加载器
一个WSDL加载器可以加载WSDL文件的全部内容。
Psr18Loader
对于加载WSDL,您可能想要使用PSR-18客户端来完成困难的HTTP工作。您必须包含php-soap/psr18-transport才能使用此加载器。
composer require php-soap/psr18-transport
use Http\Client\Common\PluginClient; use Soap\Psr18Transport\Wsdl\Psr18Loader; $loader = Psr18Loader::createForClient( $wsdlClient = new PluginClient( $psr18Client, ...$middleware ) ); $contents = $loader('http://some.wsdl');
StreamWrapperLoader
使用任何启用的流包装器加载WSDL的内容。它可以是文件、http等。
use Soap\Wsdl\Loader\StreamWrapperLoader; $loader = new StreamWrapperLoader( stream_context_create([ 'http' => [ 'method' => 'GET', 'header'=>"User-Agent: my loader\r\n", ], ]) ); $contents = $loader($wsdl);
FlatteningLoader
如果您的WSDL文件包含WSDL或XSD导入,则可以使用此加载器。它将内部使用其他加载器加载所有部分。此加载器的结果是完全扁平化的WSDL文件,您可以将它存储在本地文件系统上,例如缓存。
use Soap\Wsdl\Loader\FlatteningLoader; use Soap\Wsdl\Loader\StreamWrapperLoader; $loader = new FlatteningLoader(new StreamWrapperLoader()); $contents = $loader($wsdl);
CallbackLoader
如果您想要更多控制WSDL的加载方式,则可以使用此加载器。它可以用来装饰另一个加载器,添加调试语句,应用自定义加载逻辑等。
use Soap\Wsdl\Loader\CallbackLoader; $loader = new CallbackLoader(static function (string $location) use ($loader, $style): string { $style->write('> Loading '.$location . '...'); $result = $loader($location); $style->writeln(' DONE!'); return $result; }) $contents = $loader($wsdl);
WSDL CLI工具
wsdl-tools 1.0.0
Available commands:
completion Dump the shell completion script
flatten Flatten a remote or local WSDL file into 1 file that contains all includes.
help Display help for a command
list List commands
validate Run validations a (flattened) WSDL file.
扁平化
./bin/wsdl flatten 'https://your/?wsdl' out.wsdl
此命令将下载提供的WSDL位置。如果检测到任何导入,它也将下载这些内容。最终结果存储在单个WSDL文件中。
验证
./bin/wsdl validate out.wsdl
此命令对提供的WSDL文件执行一些基本的验证。如果您的WSDL包含任何导入,您必须首先将WSDL扁平化成一个单一文件。
扩展
通过安装来自php-soap
的附加包,将为WSDL工具添加更多命令。
- wsdl-reader:将安装检查命令,这些命令将给出您WSDL内部所有信息的可读版本。
自定义WSDL加载器
默认情况下,所有CLI工具都使用StreamWrapperLoader。所有CLI工具都有一个--loader=file.php
选项,可以用来应用自定义WSDL加载器。如果您想要在认证之后找到WSDL或者想要控制HTTP级别,这可能会很有用。
示例自定义PHP加载器
<?php use Soap\Wsdl\Loader\StreamWrapperLoader; return new StreamWrapperLoader( stream_context_create([ 'http' => [ 'method' => 'GET', 'header'=> sprintf('Authorization: Basic %s', base64_encode('username:password')), ], ]) );
WSDL验证器
本包包含一些工具,可用于验证WSDL文件的格式。它内部使用了veewee/xml DOM验证器的力量。
SchemaSyntaxValidator
验证所有定义的模式,并返回所有问题的列表。
use Soap\Wsdl\Loader\StreamWrapperLoader; use Soap\Wsdl\Xml\Validator; use VeeWee\Xml\Dom\Document; $wsdl = Document::fromXmlString((new StreamWrapperLoader())($file)); echo "Validating Schemas".PHP_EOL; $issues = $wsdl->validate(new Validator\SchemaSyntaxValidator()); echo ($issues->count() ? $issues->toString() : '🟢 ALL GOOD').PHP_EOL;
WsdlSyntaxValidator
验证WSDL文件,并返回所有问题的列表。
use Soap\Wsdl\Loader\StreamWrapperLoader; use Soap\Wsdl\Xml\Validator; use VeeWee\Xml\Dom\Document; $wsdl = Document::fromXmlString((new StreamWrapperLoader())($file)); echo "Validating WSDL:".PHP_EOL; $issues = $wsdl->validate(new Validator\WsdlSyntaxValidator()); echo ($issues->count() ? $issues->toString() : '🟢 ALL GOOD').PHP_EOL;