Токен SOAP / XML возвращает нечитаемые символы из объекта - PullRequest
0 голосов
/ 06 января 2020

На странице utf-8 php у меня возникают проблемы при чтении вывода ответа soap.

Это мой код:

<?php 
header('Content-Type:text/html; charset=UTF-8');
ini_set('display_errors','1');
error_reporting(E_ALL);
class loginInfo
{
    public $loginOperation= array(
        "loginId" => 'username',
        "password" => 'password',
        "thirdPartyId" => 'appname',
        "apiVersion" => '2'
    );
}


$client = new SoapClient("http:/example.com:9280/wsdl/test.wsdl", array('exceptions' => 0, 'trace' => 1,'encoding'=>'UTF-8'));

echo("<pre>");

$loginInfo = new loginInfo();
$response = $client->Login($loginInfo);
$data = $response->loginResult->loginSuccessData;
$primaryToken = $data->token->primary;
$secondaryToken = $data->token->secondary;
$expiration = $data->expiration;
var_dump($data); // token strings unreadable in this dump
echo $primaryToken."\n"; //this line is garbled
echo htmlentities($primaryToken)."\n"; //This line returns blank
echo "RESPONSE:\n" . htmlentities($client->__getLastResponse()). "\n";
?>

И это является текстом ответа со страницы.

object(stdClass)#5 (2) {
  ["token"]=>
  object(stdClass)#6 (2) {
    ["primary"]=>
    string(32) "Ȭ�h�����8��9����PӇ�k0$*���"
    ["secondary"]=>
    string(32) "p­���z��5Y����Z�6�:�"
  }
  ["expiration"]=>
  string(24) "2020-01-04T08:37:06.835Z"
}
Ȭ�h�����8��9����PӇ�k0$*���



RESPONSE:
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<tfm:loginResponse xmlns:tfm="http://www.example.com/test.xsd">
<tfm:loginResult>
<tfm:loginSuccessData>
<tfm:token>
<tcor:primary xmlns:tcor="http://www.example.com/exampleTypes.xsd">yKz/aKuGvZPFOK8e7A8508LT51DTh6JrMAEkAiqbkr4=</tcor:primary>
<tcor:secondary xmlns:tcor="http://www.example.com/exampleTypes.xsd">cMKtkAzwBZl6FsLkkzUHFwZZhx3U5xb7WhDjnTaZOqc=</tcor:secondary>
</tfm:token>
<tfm:expiration>2020-01-04T08:37:06.835Z</tfm:expiration>
</tfm:loginSuccessData>
</tfm:loginResult>
</tfm:loginResponse>
</soapenv:Body>
</soapenv:Envelope>

Обтекание переменной токена в html сущностях полностью удаляет ее со страницы при отображении.

Не совсем уверен, имеет ли это отношение к кодирование, поскольку, насколько я знаю, все должно быть в UTF-8.

1 Ответ

1 голос
/ 06 января 2020

Токены выглядят как двоичные данные в кодировке base64. Клиент SOAP распознает это (WSDL) и автоматически его декодирует. Если вы хотите вывести его в формате HTML / Text (для отладки), попробуйте кодировать его так же:

echo base64_encode($primaryToken)."\n";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...