始终在soap客户端php中作为无效会话令牌获得响应
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了始终在soap客户端php中作为无效会话令牌获得响应相关的知识,希望对你有一定的参考价值。
我的localhost中有php 7.1版。我在php.ini文件中进行了更改,以便从我的localhost运行SOAP。
我需要通过将登录ID和密码传递给SOAP客户端API来生成主会话令牌和辅助会话令牌。
一旦会话令牌被验证,它将返回一些速率图表。我的代码正在生成会话令牌。但是当我将该令牌密钥传递给SOAP Client api中的下一个方法时,它总是给我一个错误,如“无效的会话令牌”或“无效的身份验证”。但是,相同的令牌在SOAP UI exe中运行良好。我的意思是我已经安装了SOAP UI exe并使用wsdl“http://cnx.test.dat.com:9280/wsdl/TfmiFreightMatching.wsdl”并使用方法“Login”和“LookupRate”,它的工作一切正常。我需要的方式。
但每当我在php localhost中使用该令牌时,它总是给我一个SOAP客户端的身份验证错误。
我在下面分享我的代码。
$wsdl = "http://cnx.test.dat.com:9280/wsdl/TfmiFreightMatching.wsdl";
$client = new SoapClient($wsdl, array('trace' => true));
$params = array('loginOperation'=>array('loginId'=>'ryder_cnx1','password'=>'ryder1','thirdPartyId'=>'dl'));
$client->Login($params);
$data = $client->__getLastResponse();
$p = xml_parser_create();
xml_parse_into_struct($p, $data, $vals, $index);
xml_parser_free($p);
$token = [];
foreach ($vals as $key => $value) {
foreach ($value as $key1 => $value1) {
if($key1 == "value")
$token[] = $value1;
}
}
echo "Primary Token = ".$token[0];
echo "<br> Secondary Token = ".$token[1];
//echo "<br> Expiry Date = ".$token[2];
$params_session = array("sessionToken"=> array("primary"=>$token[0], "secondary"=>$token[1]));
$namespace = 'http://www.tcore.com/TcoreTypes.xsd'; // I am not sure about this namespace. Whether its correct or not.
$header = new SoapHeader($namespace,'sessionHeader',$params_session,true);
$client->__setSoapHeaders($header);
$params_data = array('lookupRateOperations'=> array(
'equipment'=>'Vans',
'origin'=>array('postalCode'=>array('country'=>'US','code'=>'30004')),
'destination'=>array('postalCode'=>array('country'=>'US','code'=>'10001'))
));
try{
$result = $client->LookupRate($params_data);
print_r($result);
}catch (SoapFault $exception){
//or any other handling you like
print_r(get_class($exception));
enter code hereprint_r($exception);
}
如果有人有任何想法,请与我分享。
等待任何回复。
非常感谢提前:)
答案
我知道这已经很老了,很可能是OP想出来了。但是,如果有其他人出现,我能够通过两个微小的变化来实现它。
第一,
$namespace = 'http://www.tcore.com/TcoreTypes.xsd';
应该
$namespace = 'http://www.tcore.com/TcoreHeaders.xsd';
第二,
$params_session = array("sessionToken"=> array("primary"=>$token[0], "secondary"=>$token[1]));
应该
$params_session = array(
"sessionToken"=> array(
"primary"=>base64_decode($token[0]),
"secondary"=>base64_decode($token[1])
)
);
我的其余代码足够相似,如果进行了上述更改,它应该可以工作。我也不会发布真实的用户名和密码,顺便说一句。
以上是关于始终在soap客户端php中作为无效会话令牌获得响应的主要内容,如果未能解决你的问题,请参考以下文章