php - PHP - SOAP API 认证
问题描述
当我尝试使用身份验证调用 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 才能工作。谢谢。
解决方案
您需要设置一个 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
推荐阅读
- python - 气流 GKEPodOperator xcom_push 返回无
- flutter - 如果我以前的应用程序在 android studio 上运行,为什么我不能在 vs code 终端/cmd 中运行我的颤振应用程序?
- javascript - 为什么内容安全策略不起作用?
- microsoft-translator - 自定义翻译器如何处理 TMX 中的内联
- javascript - 无法访问 Facebook Graph Api 响应的数据 - reactJs
- java - random.longs(ARRAY_SIZE, 0, 100000) 返回长流,我想将此流转换为长数组。怎么做?
- android - 推送通知不适用于牛轧糖和奥利奥到同一时间
- web-scraping - 使用 IMPORTHTML 将数据从 ebay 导入到谷歌电子表格
- python - 如何从交互式 shell 中提取命令输出?
- css - 在 Shadow DOM 中,覆盖 CSS body *