php-soap/wsdl

处理WSDL

维护者

详细信息

github.com/php-soap/wsdl

源代码

问题

资助包维护!
开放集体

安装: 1,339,854

依赖项: 4

建议者: 0

安全: 0

星标: 16

关注者: 3

分支: 4

开放问题: 1

1.10.0 2024-08-21 12:06 UTC

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;