【问题标题】:Zend Soap Server / WSDLZend Soap 服务器/WSDL
【发布时间】:2013-10-26 02:47:18
【问题描述】:

我一直在从事一个项目(我将使用随机数据在这篇文章中保留具体细节),该项目涉及将我们的系统(PHP 5.3.x+)与一个主要的 API(他们提供了一个 SDK)集成公司。他们提供了一个 WSDL,并声称我们需要匹配他们的方法,并提供了输出(由 Soap 服务器生成的 XML)的外观示例。

现在,一切都按预期进行。当我从 SoapUI(我用来测试的一个应用程序)发送 XML 请求时,它会正确处理等等,但是 XML 输出与他们的示例不匹配,我们相信他们说我们必须接近他们的示例。

基本上,我们创建了一个使用服务名称初始化的不可知类,它初始化为通过以下方式使用的非不可知类:

/**
 * The following is used to process Soap Server based on config and any optional settings.
 *
 * @param string $className
 * @param array $options
 * @param object $config
 * @return Zend_Soap_Server
 */
public static function init($className, Array $options = null, $config = null)
{
    // Used to define the class and return object.
    $soap_server        = new Zend_Soap_Server(null, $options);
    $soap_server->setClass($className, null, (isset($config) ? $config : null));
    $soap_server->handle();
    exit;
}

问题本身在于输出的响应。如果他们对所有内容都非常具体,你们会建议我们如何构建 XML 输出?

1.) 我们的方法之一是moneyTransferRequest。当我为此发送 XML 时,它确实找到了方法并对其进行了处理。但是,他们希望它在响应中将方法名称显示为 moneyTransferResponse,但它会输出 moneyTransferRequestResponse。

2.) 我们的输出(对于变量以及作为对象返回的变量)有多个变量,例如我们会说 $money。此字段将返回为:

<money xsi:type="xsd:string">10.0</money>

他们希望它是:

<ns1:money xsi:type="xsd:string">10.0</money>

在回报中。

感谢您对此主题的任何帮助和意见。

【问题讨论】:

    标签: php xml zend-framework soap wsdl


    【解决方案1】:

    SOAP 的关键特性是它使用 XML,XML 可以有多种不同的样式,但含义相同。

    我认为(但我只能猜测,因为您没有提供详细信息)您的两个问题可能不存在。

    1.) 响应 XML 结构的名称应与 WSDL 中提到的名称一致。您正在发布 WSDL,因此您应该检查这两者是否匹配。请注意,重要的入口点是 SOAP 方法 - 此后的所有内容都在 WSDL 本身中定义,只要正确使用提到的名称,任何消费客户端都应该能够弄清楚。

    2.) 这基本上是相同的,但更简单:XML 允许使用命名空间,并且这些命名空间可以在多个位置进行定义,结果实际上并不相同,但每个 XML 解析器都会理解它们是相同的。因此,您应该检查响应的 XML 标头中是否提到了“ns1”所需的命名空间。每个 XML 文档都有一个基本名称空间,它不需要在属于它的每个元素上重复。

    &lt;money&gt; 元素就是这种情况。您的写作风格使用该基本命名空间,他们的写作风格使用命名空间快捷方式ns1 也在 XML 标头中引入,但未声明为基本命名空间。所以只要在两个响应中都有正确的 XML 命名空间的痕迹,我会假设它们是等价的。

    坏消息是您无法更改 PHP SoapServer 生成 XML 的方式。您需要创建自己的 SOAP 服务器实现,我认为这完全是浪费资源。

    【讨论】:

    • 您好,非常感谢您的回复。我终于读完了。我们有点想,除了自己制定符合他们非标准指导方针的回应外,我们无能为力。无论如何,这对我很有帮助并澄清了一些事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多