1 Отредактировано Артур (29.10.2017 17:38:24)

Тема: Соединение с 1С

Уже пару лет у нас не работает выгрузка на сайт напрямую из 1С. Обращался к Вам и Вы посоветовали  разбираться с нашей 1С. Но проблема думаю не в 1С, т.к. пробовали из разных конфигураций (УТ и Розница), с разных релизов и т.п. Ошибка всегда одна: "Не удалось установить соединение. Авторизация не выполнена...".

Сегодня я наконец то пробежался отладчиком и нашел ответ сервера:

<br />
<b>Notice</b>:  Undefined index: http_authorization in <b>/var/www/u0099106/public_html/test/modules/exchange/model/basicauth.inc.php</b> on line <b>58</b><br />
<br />
<b>Notice</b>:  Undefined index: http_authorization in <b>/var/www/u0099106/public_html/test/modules/exchange/model/basicauth.inc.php</b> on line <b>74</b><br />
failure
�������� e-mail ��� ������

На строках 58 и 74 файла basicauth.inc.php находиться следующее:
    } elseif (preg_match('/^Basic\s+(.*)$/i', $_GET['http_authorization'], $user_pass)) {
Отрезок кода целиком:

    * Добавить пользователя
    * @return void
    */
    public function addUser($name, $pass)
    {
        $this->users[$name] = $pass;
    }
    
    /**
    * Получить имя пользователя
    * @return string
    */
    public function getUser()
    {
        $user = false;
        if (isset($_SERVER['PHP_AUTH_USER'])) {
            $user = $_SERVER['PHP_AUTH_USER'];
        } elseif (preg_match('/^Basic\s+(.*)$/i', $_GET['http_authorization'], $user_pass)) {
            list($user, $pass)=explode(':',base64_decode($user_pass[1]));
        }        
        
        return $user;
    }

    /**
    * Получить пароль
    * @return string
    */
    public function getPass()
    {
        $pass = false;
        if (isset($_SERVER['PHP_AUTH_PW'])) {
            $pass = $_SERVER['PHP_AUTH_PW'];
        } elseif (preg_match('/^Basic\s+(.*)$/i', $_GET['http_authorization'], $user_pass)) {
            list($user, $pass)=explode(':',base64_decode($user_pass[1]));
        }        
                
        return $pass;
    }
    

Возможно ошибка связана с хостнгом? Подскажите пожалуйста. Раньше (пару лет назад) все работало.

Повысить оценку Понизить оценку

Re: Соединение с 1С

В данном куске кода проверяется прислала ли 1С данные по имени пользователя для авторизации (PHP_AUTH_USER). Т.е. судя по всему в заголовках он не присутствует. И если он не найден, то мы проверяем нет в ли в GET параметрах запроса сведений для авторизации. И ошибка Ваша говорит о том, что даже в GET параметре сведения для авторизации не приходят.

3

Re: Соединение с 1С

Закусило Александр пишет:

В данном куске кода проверяется прислала ли 1С данные по имени пользователя для авторизации (PHP_AUTH_USER). Т.е. судя по всему в заголовках он не присутствует. И если он не найден, то мы проверяем нет в ли в GET параметрах запроса сведений для авторизации. И ошибка Ваша говорит о том, что даже в GET параметре сведения для авторизации не приходят.

Куда копать?))

Повысить оценку Понизить оценку

Re: Соединение с 1С

Копать в 1С почему не передаёт заголовки HTTP авторизации или смотреть почему не передаются данные авторизации в GET параметре http_authorization, также в 1С.

Например в GET параметре передаются к примеру такие данные:

Basic имяпользователя:парользашифрованныйвbase64

5

Re: Соединение с 1С

Закусило Александр пишет:

Копать в 1С почему не передаёт заголовки HTTP авторизации или смотреть почему не передаются данные авторизации в GET параметре http_authorization, также в 1С.

Например в GET параметре передаются к примеру такие данные:

Basic имяпользователя:парользашифрованныйвbase64

И все же, проблема ведь единичная. А я пробовал в Рознице, в УНФ, в УТ, в чистой конфигурации, в рабочей конфигурации, в старых версиях, в новых версиях. И везде абсолютно одна и также проблема.... Моя 1С ведь ничем не отличается.

Повысить оценку Понизить оценку

6

Re: Соединение с 1С

Доброго дня, создайте,пожалуйста, обращение в поддержку ( https://helpdesk.readyscript.ru/ticket/create/ ).
Приложите доступы к файлам и папкам сайта через ftp, повторно рассмотрим вашу проблему и поможем найти решение.

Повысить оценку Понизить оценку

7 Отредактировано Закусило Александр (31.10.2017 13:03:08)

Re: Соединение с 1С

Дайте пожалуйста содержимое файле .htaccess в корне сайта и версии конфигурации и платформы. А также напишите в поддержку как указано выше.

8

Re: Соединение с 1С

Закусило Александр пишет:

Дайте пожалуйста содержимое файле .htaccess в корне сайта и версии конфигурации и платформы. А также напишите в поддержку как указано выше.

.htaccess

Options +FollowSymlinks
AddDefaultCharset Off
SetEnv PHPRC "/var/www/u0099106/public_html/test/"

<IfModule mod_php5.c>
php_flag magic_quotes_gpc off
php_flag magic_quotes_runtime off
php_flag register_globals off
php_flag display_errors on
</IfModule>

<IfModule mod_dir.c>
DirectoryIndex index.php index.htm index.html
</IfModule>

<IfModule mod_rewrite.c>
RewriteEngine On
#RewriteBase /

RewriteRule ^(robots.txt)$ $1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>

#Запрещаем открывать файлы напрямую
<Files ~ "(\.inc\.php|\.tpl|\.tpl\.php|\.auto\.php)$">
Order allow,deny
Deny from all
</Files>

Повысить оценку Понизить оценку

9

Re: Соединение с 1С

Добавил в этот файл строчку

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]

И соединение прошло. Может еще что-то нужно сделать?

Повысить оценку Понизить оценку

Re: Соединение с 1С

Нет. Больше ничего не нужно. Видимо у Вас совсем старый файл стоял, ещё с "лохматых годов". Это была обязательная строчка для 1С т.к. она разбирает авторизацию.