SoapFault:元素 http://schemas.xmlsoap.org/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;

    }

我期待来自服务器的响应,但收到此错误代码:


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


编辑:


代码 wsse:InvalidSecurity


jeck猫
浏览 214回答 2
2回答

Cats萌萌

我相信应该有一个与您正在调用的 SOAP API 相关联的证书安全性(.pem 文件)。一旦您将证书路径与 SOAP 请求一起传递,它应该可以工作。要在您的 SOAP 请求中添加证书,您只需要像下面的代码一样修改您的 SOAP 调用。$client&nbsp;=&nbsp;new&nbsp;SoapClient(&nbsp;'https://path-to-wsdl',&nbsp;array(&nbsp;'trace'&nbsp;=>&nbsp;1,&nbsp;local_cert'&nbsp;=>&nbsp;dirname(__FILE__)&nbsp;.&nbsp;'/certificatefile.pem';&nbsp;)&nbsp;);

Qyouu

authHeader 可能不是 stdClass。尝试使用这个工具:https://github.com/wsdl2phpgenerator/wsdl2phpgenerator它将从您的 wsdl 文件中生成 PHP 类。使用这些类将更容易遵循如何构建请求的结构以及您需要发送的内容。
打开App,查看更多内容
随时随地看视频慕课网APP