以下是我为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”) 。我怎样才能做到这一点?
答案 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...
/* ... */
}