使用PHP SoapClient时,如何将nil =“true”属性添加到SoapVar?

时间:2016-11-02 15:18:27

标签: php xml soap soap-client

以下是我为Soap电话设置我的参数的方法:

$params = array(
    "connectionToken"   => $this->token,
    "inboxName"         => $this->inboxName
);
$wrapper = new \stdClass();
$typedVar = new \SoapVar($value, XSD_STRING, "string", "http://www.w3.org/2001/XMLSchema");
$wrapper->anyType = $typedVar;
$params["fnParameterValues"] = $wrapper;

这为请求创建了正确的XML结构,但是如果$ value = null,那么我需要将属性添加到nil =“true”的anyType节点(实际上更准确: - xsi:nil =“true”) 。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

我知道有些晚了,但是我遇到了同样的问题,我发现的解决方案可能对其他人有帮助。

如果您使用的是WSDL,内置的 PHP SoapServer 应该将此属性自动添加到任何具有null值且定义为nillable的元素中,以适应WSDL定义的元素。

如果需要手动添加属性,唯一的方法似乎是捕获输出并修改XML响应。

您可以使用 Zend SoapServer包装器https://docs.zendframework.com/zend-soap/server/)并对响应(https://docs.zendframework.com/zend-soap/server/#response-post-processing)进行后处理,如下所示:

// Get a response as a return value of handle(),
// instead of emitting it to standard output:
$server->setReturnResponse(true);

$response = $server->handle();

if ($response instanceof SoapFault) {
    // Manage exception
    /* ... */
} else {
    // Post-process response and return it
    // I. e., load response as XML document, add attribute to node...
    /* ... */
}