PHP - SOAP API 身份验证

时间:2021-06-07 19:47:50

标签: php soap

尝试调用带有身份验证的api方法时遇到一些问题。

 $auth = (object) array(
                'user'=>'username',
                'password'=>'password',
                'company'=> 'companyname'
          );
         
    $url = 'https://webservices.gocadservices.com/NVS?wsdl';
    
    $soap = new SoapClient('https://webservices.gocadservices.com/NVS?wsdl',$auth);
    echo $soap->nop();

我收到一个错误:用户参数为空或丢失。

我的问题:如何发送这样的请求 xml :

<?xml version='1.0' encoding='UTF-8'?> 
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
<soapenv:Header> 
<xs:nvheader xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
<xs:nvcommand> 
    <xs:user>
          username
    </xs:user> 
    <xs:password>
         mot de passe
     </xs:password> 
     <xs:company>
          companyname
      </xs:company> 
</xs:nvcommand> 
</xs:nvheader> 
</soapenv:Header> 
</soapenv:Envelope> 

我必须有这个结构,这样 API SOAP 才能工作。 谢谢。

1 个答案:

答案 0 :(得分:1)

您需要为此设置一个 SOAP 标头:

 $nvcommand = (object)[
'user' => 'username',
'password' => 'password',
'company' => 'company'];

$authHeader = new SoapHeader('namespace','nvcommand', $nvcommand);

$soapClient = new SoapClient('http://localhost:44333/SoapService.com?wsdl', $soapOptions);
$soapClient->__setSoapHeaders($authHeader);

$return = $soapClient->__soapCall('HelloWorld',[]);

这将发送一个 SOAP 标头

<env:Header>
    <ns2:nvcommand>
        <user>username</user>
        <password>password</password>
        <company>company</company>
    </ns2:nvcommand>
</env:Header>

连同请求。 SoapClient ctor 中的选项数组不用于传递身份验证信息。请参阅 https://www.php.net/manual/de/soapclient.construct.php