веб-сервисы — всегда получать ответ как недопустимый токен сеанса в мыльном клиенте переполнение стека

У меня есть php версии 7.1 на моем локальном хосте. Я внес изменения в мой файл php.ini для запуска SOAP с моего локального хоста.

Мне нужно сгенерировать первичный и вторичный токен сеанса, передав идентификатор входа и пароль клиентскому API SOAP.

Как только токен сеанса аутентифицирован, он вернет некоторый график скорости. Мой код генерирует токены сессии. Но когда я передаю этот ключ токена следующему методу в SOAP Client api, он всегда выдает ошибку типа «Недопустимый токен сеанса» или «Недопустимая аутентификация». Однако те же токены работают хорошо в SOAP UI exe. Я имею в виду, я установил exe SOAP UI и с помощью 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);
}

если у кого-нибудь есть идеи, пожалуйста, поделитесь ими со мной.

В ожидании любого ответа.

Заранее большое спасибо 🙂

3

Решение

Я знаю, что это очень старо, и, скорее всего, ОП понял это. Но в случае, если кто-нибудь еще придет, я смог заставить его работать с двумя небольшими изменениями.

Первый,

$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])
)
);

Остальная часть моего кода достаточно похожа, поэтому, если вышеупомянутые изменения сделаны, он должен работать. Я также воздержался бы от публикации реальных имен пользователей и паролей, кстати.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]