为了账号安全,请及时绑定邮箱和手机立即绑定

SoapFault:元素 http://schemas.xmlsoap.org/soap/

SoapFault:元素 http://schemas.xmlsoap.org/soap/

PHP
jeck猫 2021-12-24 16:09:15
我是 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
查看完整描述

2 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

我相信应该有一个与您正在调用的 SOAP API 相关联的证书安全性(.pem 文件)。一旦您将证书路径与 SOAP 请求一起传递,它应该可以工作。

要在您的 SOAP 请求中添加证书,您只需要像下面的代码一样修改您的 SOAP 调用。

$client = new SoapClient( 'https://path-to-wsdl', array( 'trace' => 1, local_cert' => dirname(__FILE__) . '/certificatefile.pem'; ) );


查看完整回答
反对 回复 2021-12-24
?
Qyouu

TA贡献1786条经验 获得超11个赞

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

https://github.com/wsdl2phpgenerator/wsdl2phpgenerator

它将从您的 wsdl 文件中生成 PHP 类。使用这些类将更容易遵循如何构建请求的结构以及您需要发送的内容。


查看完整回答
反对 回复 2021-12-24
  • 2 回答
  • 0 关注
  • 213 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信