Получение данных из Web-сервиса 1С в php, с авторизацией логином и паролем на кириллице

В рамках задачи получения данных из 1С средствами web-сервиса, часто возникает потребность авторизации на web-сервисе под учетными данными уже существующих пользователей. Но так как «логины» и «пароли» уже занесены в кириллической раскладке, возникает ошибка авторизации, в то время как логины в латинской раскладке работают корректно.
Это возникает из-за того что кодировка текста (логина и пароля) отличается от той что понимает web-сервис 1С (UTF-8).

Для решения данной проблемы, необходимо при создании экземпляра класса "SoapClient" в "stream_context" передать "правильный" заголовок с данными авторизации "Authorization".

Формирование "правильной" строки авторизации: 

$base64LoginData = base64_encode(iconv(mb_detect_encoding($login, mb_detect_order(), true), "UTF-8", $login).":".iconv(mb_detect_encoding($password, mb_detect_order(), true), "UTF-8", $password)); 

В прикрепленном файле находится пример PHP класса, который выполняет авторизацию и вызов метода web-сервиса с возвратом данных в формате JSON.

 

 Пример использования

 require(‘web_service.php’);

$_SESSION["login"] = "Администратор";
$_SESSION["password"] = "йцукен";

$dataArray = array("Name" => "Имя1", "Data" => "Значение1");
$jsonString = json_encode($dataArray, JSON_UNESCAPED_UNICODE);    
$soapResult = $ws_client->call("GetData", array("RefListMod" => $_POST[‘sys_lref’], "Ref" => $_POST[‘sys_ref’], "Data" => $jsonString));

if ($soapResult["result"])
{
    $soapString = str_replace("
", "", $soapResult["data"]->return);
    $jsonData = json_decode($soapString);
}

 

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *