php - 如何在 PHP 中将 SOAP 标头和正文作为参数传递
问题描述
我正在尝试将标头和正文传递给 SOAP 请求。由于错误的做法,我收到了连接错误。当我使用 SOAP UI 尝试相同的操作时,我得到了正确的响应。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:adp="http://abcddetails.com/">
<soapenv:Header>
<adp:UserIdentifierSoapHeaderIn>
<!--Optional:-->
<adp:UserName>USER1</adp:UserName>
<!--Optional:-->
<adp:Password>PASS</adp:Password>
</adp:UserIdentifierSoapHeaderIn>
</soapenv:Header>
<soapenv:Body>
<adp:getVehicleDetails>
<!--Optional:-->
<adp:request>
<adp:SystemCode>101</adp:SystemCode>
<!--Optional:-->
<adp:UserID>101</adp:UserID>
<!--Optional:-->
<adp:PlateInfo>
<adp:PlateNo>44444</adp:PlateNo>
<adp:PlateOrgNo>1</adp:PlateOrgNo>
<adp:PlateColorCode>48</adp:PlateColorCode>
<adp:PlateKindCode>1</adp:PlateKindCode>
<adp:PlateTypeCode>1</adp:PlateTypeCode>
<adp:PlateSourceCode>3</adp:PlateSourceCode>
</adp:PlateInfo>
</adp:request>
</adp:getVehicleDetails>
</soapenv:Body>
</soapenv:Envelope>
以下是我的代码:
<?php
echo "Hello world";
echo "ADDED the below two lines"
ini_set('soap.wsdl_cache_enabled',0);
ini_set('soap.wsdl_cache_ttl',0);
$wsdl = "https://abcddetails.com/getSoapDetails.asmx?WSDL";
$client = new SoapClient($wsdl, array('trace'=>1));
$auth = array(
'Username'=>'USER1',
'Password'=>'PASS',
);
$header = new SOAPHeader($wsdl, 'UserIdentifierSoapHeaderIn', $auth);
$client->__setSoapHeaders($header);
echo "Header Passed... Body starts";
// web service input params
$request_param = array(
'getCarDetails' => array(
'request' => array(
'SystemCode' => 101,
'UserID' => 101),
'PlateInfo' => array(
'PlateNo' => 44444,
'PlateOrgNo' => 1,
'PlateColorCode' => 48,
'PlateKindCode' => 1,
'PlateTypeCode' => 1,
'PlateSourceCode' => 3 )
)
);
$responce_param = null;
try
{
$responce_param = $client->__soapCall('getCarDetails', ['parameters' => $request_param]);
}
catch (Exception $e)
{
echo "<h2>Exception Error!</h2>";
echo $e->getMessage();
}
print_r($responce_param);
?>
错误信息是
无法连接到主机
但如上所述,相同的 xml 请求通过 Soap UI 应用程序给出了正确的响应。这里可能是什么问题?我怀疑标题分配,是这样,还是在其他地方?
解决方案
实例化时尝试将这些添加到您的客户端。过去我有它从 wsdl 缓存并且并不总是连接,但这有帮助。跟踪和异常不是必需的,但有助于 IMO。
array('trace' => 1, 'cache_wsdl'=>WSDL_CACHE_NONE, 'exceptions' => true)
推荐阅读
- javascript - 关闭菜单后如何将汉堡图标放在首位
- javascript - 错误“找不到分隔符,发现意外数据。尾随数据”
- string - 如何在 Erlang 中将重音字符串转换为常规字符串?
- sql-server - 机器生成的许多 odb 文件将其数据导出到 SQL Server 数据库
- java - 在配置的最大连接数连接后,如何防止传入连接的 Akka TCP 流连接?
- listview - 刷卡删除recyclerview中的行
- html - 使 SASS 中的顶部导航具有响应性
- laravel - Laravel - 将所有路由请求指向单个视图或功能
- java - 如何在@Async 方法中测试异常?
- mysql - MySQL 查询在 mysql 工作台中有效,但在 python 脚本中无效