= Модуль автоматической кассы (режим POS-терминала) = == Терминология == Терминал сканирования - касса или иной программный комплекс на базе 1С для сканирования товаров и формирования заказа. Процессинговый сервер — сервер на базе ПО 1С. Предназначен для приема отчетной информации от расчетного терминала. == Конфигурация модуля == Конфигурация модуля выполняется в меню POS-терминал режима конфигурирования. Доступны следующие параметры: * Использовать модуль POS - активирует работу модуля. * Заголовок - наименование иконки (при использовании нескольких модулей) * ID терминала - строка идентификации термина на процессинговом сервере. * Терминал сканирования->требовать и проверять логин и пароль - активирует авторизацию терминала сканирования по логину и паролю. * Процессинговый сервер->url сервера - url сервера для взаимодействию по протоколу SOAP вида https:/// , без пути или параметров запроса. * Процессинговый сервер->Использовать логин и пароль - активирует авторизацию на процессинговом сервере по указанным логину и паролю. == Программирование и настройка терминала сканирования == Терминал сканирования осуществляет взаимодействие с расчетным терминалом, инициируя и контролируя процесс оплаты. Взаимодействие осуществляется посредством протокола SOAP с использованием стандартных средств 1C. Используются следующие операции: '''Pay — инициирует процесс оплаты. Аргументы: * уникальный номер операции (строка) * сумма к оплате в копейках (целое число) * реестр заказа, список из элементов: артикул (id), наименование (name), количество (count), цена (price). (структура Реестр заказа) Возвращаемое значение: '''Результат операции: 0 - операция принята к исполнению, -1 — неверные параметры, -2 терминал занят другой операцией, -3 - сессия с таким номером операции уже существует Уникальный номер операции должен генерироваться для каждой платежной сессии. Расчетный терминал учитывает уникальность операций на предмет повторного запуска сессии в течении суток, возвращая для дубликатов ответ -3 - сессия с таким номером операции уже существует. Paypoll - опрос состояния платежа Аргументы: * уникальный номер операции (строка) Возвращаемое значение: * Статус операции/результат платежа (целое число). Статусы: -1 — неверные параметры, -4 - сессия не найдена, 0 - успешно оплачена, 1 - в процессе оплаты, 2 - отменена ''' Пример кода {{{ &НаСервере Функция ЗапросPay () // Указывается ip-адрес терминала Определения = Новый WSОпределения ("http://192.168.1.102:8080/?wsdl", "stamp", "stampsoft"); Прокси = Новый WSПрокси (Определения, "http://www.stampsoft.ru/pos", "pos", "pos"); Прокси.Пользователь = "stamp"; Прокси.Пароль = "stampsoft"; СтрокаТип = Прокси.ФабрикаXDTO.Пакеты.Получить ("http://www.w3.org/2001/XMLSchema").Получить("string"); ЦелоеТип = Прокси.ФабрикаXDTO.Пакеты.Получить ("http://www.w3.org/2001/XMLSchema").Получить("int"); // Метка времени в качестве уникального номера операции УникальныйНомерОперации = Прокси.ФабрикаXDTO.Создать(СтрокаТип, ТекущаяДата ()); Сумма = Прокси.ФабрикаXDTO.Создать(ЦелоеТип, 1000); // 1000 коп // Строка заказа из реестра заказа СтрокаЗаказаТип = Прокси.ФабрикаXDTO.Пакеты.Получить ("http://www.stampsoft.ru/pos").Получить("orderitem"); СтрокаЗаказа0 = Прокси.ФабрикаXDTO.Создать(СтрокаЗаказаТип); СтрокаЗаказа0.id = "id0"; СтрокаЗаказа0.name = "name0"; СтрокаЗаказа0.count = 1; СтрокаЗаказа0.cost = 100; СтрокаЗаказа1 = Прокси.ФабрикаXDTO.Создать(СтрокаЗаказаТип); СтрокаЗаказа1.id = "id1"; СтрокаЗаказа1.name = "name1"; СтрокаЗаказа1.count = 2; СтрокаЗаказа1.cost = 200; // Заказ (реестр) ЗаказТип = Прокси.ФабрикаXDTO.Пакеты.Получить ("http://www.stampsoft.ru/pos").Получить("order"); Заказ = Прокси.ФабрикаXDTO.Создать(ЗаказТип); Заказ.orderitem.Добавить (СтрокаЗаказа0); Заказ.orderitem.Добавить (СтрокаЗаказа1); Значение = Прокси.Pay (УникальныйНомерОперации, Сумма, Заказ); Возврат Значение КонецФункции &НаСервере Функция ЗапросPayPoll () Определения = Новый WSОпределения ("http://192.168.1.102:8080/?wsdl", "stamp", "stampsoft"); Прокси = Новый WSПрокси (Определения, "http://www.stampsoft.ru/pos", "pos", "pos"); Прокси.Пользователь = "stamp"; Прокси.Пароль = "stampsoft"; ТипПараметра = Прокси.ФабрикаXDTO.Пакеты.Получить ("http://www.w3.org/2001/XMLSchema").Получить("string"); Параметр = Прокси.ФабрикаXDTO.Создать(ТипПараметра, "uid0"); Значение = Прокси.PayPoll (Параметр); Возврат Значение КонецФункции }}} == Программирование и настройка процессингового сервера == Расчетный терминал взаимодействует с процессинговым сервером 1С по протоколу SOAP, задействуя встроенный механизм веб-сервисов 1С. Для настройки веб-сервиса: * Установите веб-сервер (apache2 или IIS), руководствуясь документацией веб-сервера и 1С. * Импортируйте пакет XDTO пакет pos.xsd (прикреплён к статье): в конфигурации Общие->XDTO-пакеты->(правой кнопкой)Импорт XML-схемы->укажите файл pos.xsd. Полученный объект (ПакетXDTO1) переименуйте в pos. * Добавьте веб-сервис зщы: в конфигурации Общие->Web-сервисы->->(правой кнопкой)добавить. Переименуйте веб-сервис в pos. * Во вкладке Прочее веб-сервиса stamp выберите дополнительные пакеты XDTO: установите галочку напротив http://www.stampsoft.ru/pos * Во вкладке операции веб-сервиса добавьте указанные ниже операции и параметры к каждой операции. В параметрах каждой операции укажите имя метода такое же, как и имя операции. В параметрах каждой операции также укажите тип возвращаемого значения. Стандартные типы выбраются из пакета http://www.w3.org/2001/XMLSchema (boolean, string, int), остальные - из пакета http://www.stampsoft.ru/pos (order) '''Операции Register (Имя - Register, имя операции - Register). Операция регистрации платежа. Тип возвращаемого значения: boolean. Параметры: * terminal_id (string) - номер расчетного терминала (из конфигурации) * uid (string) - уникальный номер сессии/платежа * amount (int) - сумма к оплате, запрошенная терминалом сканирования * pay_amount (int) - принятая сумма к оплате * charge_amount (int) - сумма сдачи * rest_amount(int) - сумма невыданной сдачи * pay_type (int) - тип платежа (0 - наличные, 1 - карты) * order (order из http://www.stampsoft.ru/pos) - заказ * time (int) - время операции (unixtime)