Php http сервис 1с

Web-сервисы из 1С в PHP или грабли, на которые я наступил.

И получил от 1С при подключении: «Неверный формат», хотя на http://soapclient.com/SoapTest.html и формат прочитали и запрос выполнили. И пошел я другим путем. Воспользовался nuSOAP (мало ли я wsdl писать не умею):

// Подключаем код NuSOAP require_once('lib/nusoap.php'); // Создаем экземпляр сервера $server = new soap_server(); $server->configureWSDL('AWK','http://it.selenia.ru'); $server->register('pregMatch', array('str' => 'xsd:string', 'tmpl' => 'xsd:string'), array('result' => 'xsd:string'), 'http://it.selenia.ru', 'http://it.selenia.ru#pregMatch', 'rpc', 'encoded', 'Уфф. '); // Определяем метод как функцию PHP function pregMatch($str, $tmpl) < $res_str = ""; preg_match($tmpl, $str, $res); foreach( $res as $line ) < $res_str .= "" . $line . ""; >$res_str .= ""; return $res_str; > // Используем HTTP-запрос чтобы вызвать сервис $HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : ''; $server->service($HTTP_RAW_POST_DATA); ?>

Но опять, при подключении http://it.selenia.ru/services.php?wsdl — «Неверный формат». Не буду вас долго мучить и приведу работающий код:

// Подключаем код NuSOAP require_once('lib/nusoap.php'); // Создаем экземпляр сервера $server = new soap_server(); $server->configureWSDL('AWK','http://it.selenia.ru'); $server->wsdl->addComplexType( 'ArrayOfString', 'complexType', 'array', 'all', '', array( 'dn' => array('name' => 'dn', 'type' => 'xsd:string', 'minOccurs' => '0', 'maxOccurs' => 'unbounded') ) ); $server->register('pregMatch', array('str' => 'xsd:string', 'tmpl' => 'xsd:string'), array('result' => 'tns:ArrayOfString'), 'http://it.selenia.ru', 'http://it.selenia.ru#pregMatch', 'rpc', 'encoded', 'Уфф. '); // Определяем метод как функцию PHP function pregMatch($str, $tmpl) < preg_match($tmpl, $str, $res); return $res; >// Используем HTTP-запрос чтобы вызвать сервис $HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : ''; $server->service($HTTP_RAW_POST_DATA); ?>

А теперь можно поразмыслить на тему: «Где еще, кроме SQL, напортачил 1С?» P.S. По мотивам комментариев. Если вы думаете, что после этого удалось нормально пользоваться web-сервисом, то вы ошибаетесь. Были и еще пляски с бубном.
И огромную благодарность я выражаю всем, кто принял участие в тестировании. Отдельная благодарность Трактор и dushelov за их помощь в получении конечного положительного результата. Итак, код, который можно нормально использовать:

configureWSDL('AWK','[url]http://it.selenia.ru[/url]','','document'); $server->decode_utf8 = false; $server->soap_defencoding = 'UTF-8'; //Определяем массив $server->wsdl->addComplexType( 'ArrayOfString', 'complexType', 'array', '', 'SOAP-ENC:Array', array(), array( array('ref'=>'SOAP-ENC:Array', 'wsdl:arrayType' => 'SOAP-ENC:string[]', 'arrayType' => 'SOAP-ENC:string[]', 'nillable'=>'true' )), 'SOAP-ENC:string' ); // Регистрируем метод $server->register('pregMatch', array('str' => 'xsd:string', 'tmpl' => 'xsd:string'), array('return' => 'tns:ArrayOfString'), '', '', 'document', 'literal'); // Определяем метод как функцию PHP function pregMatch($str, $tmpl) < if (preg_match('@^(.).*\1.?$@i',$tmpl) == 0) < return new soap_fault('SERVER', '', 'bad template',$tmpl); >else < preg_match($tmpl, $str, $res); >return $res; > // Используем HTTP-запрос чтобы вызвать сервис $HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : ''; $server->service($HTTP_RAW_POST_DATA); ?>

Баги есть в релизе 8.2.9.356 — в 8.2.10.73 они исправлены. И еще. Если вы при подключении получите 407 ошибку, то скорее всего в этом виноват прокси-сервер. Я из-за него долго не мог получить результат, так как 1С просто вылетала. Спасибо Visual Studio — оно дало и описание ошибки и направление его исправления. Если у вас стоит SQUID, то лечится это добавлением сторочки в squid.conf (ignore_expect_100 on). На этом вроде бы все.

Читайте также:  All shopping html cat

Источник

Отправка и прием данных 1C на PHP-сайте

Обычно взаимодействие происходит следующим образом — программист 1С предоставляет несколько URL для фиксации различных событий (заказ, оплата и т.д.) и логин/пароль к ним. Данные обычно передаются в виде JSON-массива.

Пример отправки заказа через CURL:

// Отправка заказа в 1C $order = array(); $order['deal_id'] = '123'; $order['deal_date'] = time(); $order['deal_name'] = 'Иван Иванов'; $order['deal_email'] = 'mail@example.com'; $order['deal_phoneNumber'] = '+79031234567'; $order['deal_price'] = '100.00'; $array = json_encode($order, JSON_UNESCAPED_UNICODE); $ch = curl_init('http://адрес_сайта/метод'); curl_setopt($ch, CURLOPT_USERPWD, 'Логин:Пароль'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $array); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $html = curl_exec($ch); curl_close($ch);

Для того чтобы облегчить отладку, можно сделать запись отправленных и полученных данных в лог-файл, добавив строки:

// Запись отправленных и полученных данных в лог-файл $log = date('Y-m-d H:i:s') . "\r\n"; $log .= print_r($order, true) . "\r\n" . print_r($html, true); file_put_contents(__DIR__ . '/log.txt', $log . PHP_EOL, FILE_APPEND);

Пример лога:

2022-06-21 13:33:32 Array ( [deal_id] => 123 [deal_date] => 1654685230 [deal_name] => Иван Иванов [deal_email] => mail@example.com [deal_phoneNumber] => +79031234567 [deal_price] => 100.00 ) [ < "ДокументОтчет": "9553ef96-f24d-11ec-812e-1cc47aabb0b2" >]

Источник

Интеграция PHP и 1С

Анна Викулина

Всегда актуальная информация на сайте. Интеграция с любыми CMS: Битрикс, UMI, WordPress, Joomla, Drupal, Tilda и другие.

Интеграция 1С с Битрикс

Актуальные цены на сайте. Моментальное отображение заказов в 1С. Интеграция со службой доставки и маркетплейсами.

Несмотря на имеющийся, довольно богатый функционал продуктов 1С, бывают ситуации, когда приходится прибегать к их интеграции со сторонними приложениями.

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

Чтобы не дублировать вручную информацию о заказах в 1С, многие прибегают к обмену данных при помощи скриптов на PHP

А это означает, что программистам 1С было бы неплохо хотя бы представлять, как вызывать скрипты на этом языке программирования.

Читайте также:  Try внутри try python

Примеры работы с PHP

Основный объектом платформы 1С 8.3 для работы со скриптами на сайтах является «HTTPСоединение». Именно через него проходит авторизация и определяется, какой механизм на сайте нам нужно запускать. В качестве параметров в новый объект для соединения с сайтом нужно передать следующие данные:

  • Адрес сайта и наименование скрипта на PHP;
  • Имя пользователя для авторизации и получения доступа к данным;
  • Пароль вышеуказанного пользователя.
 HTTP = новый HTTPСоединение("_АдресСайта_/ImportPrice1С.php",,ЛогинПользователя,ПарольПользователя,,); 

После выполнения этой строки кода, чтобы работать дальше, необходимо проверить, смогла ли 1С подключиться и авторизоваться для выполнения скрипта. Для этого воспользуемся методом «Получить()», который должен нам вернуть слово «success» в случае положительного результата. Удобнее записать это слово в файл, чтобы была возможность проанализировать ход выполнения программы.

Для этого мы используем еще один параметр, в который нужно положить путь с именем файла:

 HTTP.Получить("_АдресСайта_/ImportPrice1С.php?mode=checkauth",ФайлДляПроверки); 

После того как мы записали ответ с сервера об успехе подключения, можно описывать непосредственно выполнение скрипта PHP. Естественно, необходимо предусмотреть проверку успешности подключения, поэтому придется считывать сообщение из записанного файла. Это можно реализовать при помощи объекта «ТекстовыйДокумент()». Если слово «success» найдено в файле, то можно запускать скрипт PHP прямо из 1С:

 ОтветССервераВФайле = Новый Файл(ФайлДляПроверки); Если ОтветССервераВФайле.Существует() Тогда ОтветИзФайла = Новый ТекстовыйДокумент(); ОтветИзФайла.Прочитать(ФайлДляПроверки); Если ОтветИзФайла.КоличествоСтрок()>0 Тогда ОтветСервераНаЗапрос = ОтветИзФайла.ПолучитьТекст(); Если ОтветСервераНаЗапрос = "success" тогда HTTP.Получить("_АдресСайта_/ImportPrice1С.php?mode=query", ФайлДляПроверки); КонецЕсли; Иначе Сообщить("В файле отсутствует ответ с сервера"); КонецЕсли; КонецЕсли; 

Как вы могли убедиться на примере, взаимодействие PHP и 1С не должно вызвать больших затруднений, если отсутствуют особые виды защиты. Знание вышеперечисленных механизмов может помочь вам в реализации обмена информацией между 1С и сайтом. Возможны ситуации, когда выгоднее реализовать получение информации через 1С скриптом PHP, чем настраивать выгрузку в определенный формат файла.

Источник

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

Читайте также:  Рисование в питоне график

Пример организации взаимодействия сайта на PHP с 1С через SOAP

License

ivan1993spb/php-1c-example

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

Пример взаимодействия сайта с 1С через SoapClient

PHP, 1С, SOAP, SoapClient, Обмен.

В данном репозитории собран пример организации взаимодействия сайта на PHP с 1С через SOAP.

Описаны PHP-классы для работы системы в продакшене, для локальной разработки (моки) и для тестирования.

В 1С существует возможность добавлять веб-сервисы. Веб-сервисы 1С могут выполнять какие-то действия на стороне 1С. Веб-сервисы могут быть вызваны из вне через SOAP с помощью PHP. В PHP обращение к веб-сервисам через SOAP осуществляется с помощью SoapClient.

Для иллюстрации взаимодействия 1С и PHP написан клиент на PHP и описан функционал, который (в данном примере) предоставляет 1С через веб-сервисы. Смотрите описание функционала здесь.

  • Client1C — класс-обертка для SoapClient для вызова веб-сервисов 1С;
  • Client1CWrapper — удобный класс-обертка для Client1C .

Для тестирования логики, которая использует веб-сервисы 1С, а также для локальной разработки доступны классы:

  • DumbClient1C — mock-объект, выполняет все действия, которые должен выполнять 1С, локально;
  • FailureClient1C — mock-объект, не выполняет никаких действий, а при каждом вызове выбрасывает исключение MethodInvocationException , как буд-то сервер 1С недоступен. Удобно использовать для проверки ситуации, в которой 1С не работает, а сайт работает и доступен для клиентов.

About

Пример организации взаимодействия сайта на PHP с 1С через SOAP

Источник

Оцените статью