PHP和SOAP。换信封

PHP和SOAP。换信封,php,soap,envelope,Php,Soap,Envelope,关于PHP和SOAP有很多问题。但我没有找到关于我的情况的答案 所以。我使用PHP SoapClient和WSDL来实现它。对象发送以下消息: <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.site.com"><SOAP-ENV:Body> 但我需要这个: <soap:Envelope xmlns:soap=

关于PHP和SOAP有很多问题。但我没有找到关于我的情况的答案

所以。我使用PHP SoapClient和WSDL来实现它。对象发送以下消息:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.site.com"><SOAP-ENV:Body>

但我需要这个:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body>

问题。如何使用标准PHP类SoapClient实现这一点


谢谢。

我在php.net中搜索答案

<?php
class MSSoapClient extends SoapClient {

    function __doRequest($request, $location, $action, $version) {
        $namespace = "http://tempuri.com";

        $request = preg_replace('/<ns1:(\w+)/', '<$1 xmlns="'.$namespace.'"', $request, 1);
        $request = preg_replace('/<ns1:(\w+)/', '<$1', $request);
        $request = str_replace(array('/ns1:', 'xmlns:ns1="'.$namespace.'"'), array('/', ''), $request);

        // parent call
        return parent::__doRequest($request, $location, $action, $version);
    }
}

$client = new MSSoapClient(...);
?>


此代码在请求中更改信封。并且需要ASP SOAP服务器。

我认为这意味着您的WSDL不正确?您是否也创建了SOAP服务器部件?不,WSDL是正确的,因为其他库(用于C#的ActiveX控件)可以很好地使用它并发送真正的命名空间。我无法更改SOAP服务器。我需要使用它来访问服务功能。如果您认为这会导致与SOAP服务通信出现问题,那么这可能是一个错误的假设。您的错误可能与您的邮件中缺少属性有关,就像刚才发生在我身上一样。