SoapFault:元素http://schemas.xmlsoap.org/soap/envelope/:Body上没有id属性(代码wsse:InvalidSecurity)

mbn*_*mbn 10 php client soap

我是SOAP的新手,正在尝试使用PHP的内置SoapClient连接到SOAP服务器。我几天来一直收到此错误,但找不到任何解决方案。

这是针对Linux服务器的。我尝试将SoapHeaders包含在时间戳中,并向请求中添加不同的参数,但是仍然没有成功。

这是我的代码:

    $params = array(
        'X' => array(
            'Y' => '0',
            'Z' => '1',
            'Q' => array(
                'W' => array(
                    'E' => '1'
                )
            ),
            'R' => array(
                'T' => 3,
                'Y' => array(
                    'U' => 'x',
                    'I' => 'y'
                )
            ),
            'O' => array(
                'P' => '2'
            )
        ),
        'A' => array(
            'S' => array(
                'D' => 'H',
                'F' => 'J',
                'G' => 'K'
            )
        )
    );

    $client = new SoapClient( 'https://path-to-wsdl', array( 'trace' => 1 ) );

    $timestamp = gmdate("Y-m-d\TH:i:s\Z");
    $timestamp_expires = gmdate("Y-m-d\TH:i:s\Z", strtotime( '+1 hour' ) );


    $authHeader = new stdClass();
    $authHeader->Timestamp->Created = $timestamp;
    $authHeader->Timestamp->Expires = $timestamp_expires;
    $Headers[] = new SoapHeader('http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd', 'Security', $authHeader,TRUE);

    // $client->__setSoapHeaders($Headers);

    try
    {
        $response = $client->SoapFunction( $params );
    }
    catch( SoapFault $fault )
    {
        echo 'Request : <br/><xmp>',
        $client->__getLastRequest(),
        '</xmp><br/><br/> Error Message : <br/>',
        $fault->getMessage();

        die;
    }
Run Code Online (Sandbox Code Playgroud)

我期望服务器响应,但是收到以下错误代码:

元素http://schemas.xmlsoap.org/soap/envelope/:Body上没有id属性

编辑:

wsse:InvalidSecurity

小智 -1

authHeader 可能不是 stdClass。尝试使用这个工具:

https://github.com/wsdl2phpgenerator/wsdl2phpgenerator

它将从您的 wsdl 文件生成 PHP 类。使用这些类可以更轻松地了解如何构建请求以及您到底需要发送什么内容的结构。