我的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"并使用方法"登录"和" 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);
}
如果有人有任何想法,请与我分享。
等待任何回复。
提前多多感谢:)
答案 0 :(得分:0)
我知道这已经很老了,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])
)
);
我其余的代码足够相似,因此,如果进行了上述更改,它应该可以工作。我还要避免发布真实的用户名和密码,顺便说一句。