====== MCR-алгоритмы ====== Работа с модулем **SMSPDS** на стороне кассы осуществляется через MCR алгоритмы и ввода с клавиатуры. Пользователь на кассе нажимает функциональную клавишу "Код с клавиатуры" в выбранном заказе. В него он вводит номер телефона (в формате 7ХХХХХХХХХХ) и код. Доступно два сценария работы модуля: * Авторизация пользователя по коду; * Авторизация только по номеру телефона (без кода). MCR алгоритмы создаются в окне **Сервис** -> **Обработка сигналов устройств** -> **MCR алгоритмы**. У всех алгоритмов одинаковые настройки: * **Типы устройств**: Клавиатура; * **Тип алгоритма**: Скрипт вер. 7.0; * **Область**: Интерфейс. **ВНИМАНИЕ**: Если адрес сервера находится на отличном от http://127.0.0.1:11140/, то в скриптах необходимо вручную поменять адреса запросов. ===== Авторизация пользователя по коду ===== Для данного сценария необходимо создать 2 MCR алгоритма в менеджерской r_keeper. Первый алгоритм используется для запроса на генерацию кода и его отправки. Название: "SMSPDS Telephone Generate code". {{ :external:smspds_v2:02_configrk:pasted:20221125-120941.png? }} В него вставить следующий скрипт: var response: String; code_resp: Integer; begin if (Length(Parameter) = 11) then begin code_resp := HTTPGet('http://127.0.0.1:11140/api/v1/accounts/generate-code?phone='+Parameter, response); if code_resp = -1 then begin GUI.ShowMessage('Отсутствует подключение к SMSPDS'); end else if code_resp = 500 then begin GUI.ShowMessage('Неизвестная ошибка сервера'); end else if pos('[ERROR', response) > 0 then begin GUI.ShowMessage(copy(response, 9, Length(response) - 9 )); end else begin GUI.ShowMessage(response); end; end; Result := False; end; Второй алгоритм используется непосредственно для ввода кода пользователю, состоящего из 4-х цифр. Название: "SMSPDS Check code". В свойствах алгоритма установить в поле "Объект" установить алгоритм авторизации карты по ее коду (алгоритм "Персональная дисконтная система(ПДС)"). {{ :external:smspds_v2:02_configrk:pasted:20221125-120957.png? }} В сам алгоритм вставить следующий скрипт: var response: String; i, j, code_resp: Integer; is_numb, is_numb_one: Boolean; begin is_numb := True; for i := 1 to Length(Parameter) do begin is_numb_one := False; for j := 0 to 9 do begin if Parameter[i] = IntToStr(j) then begin is_numb_one := True; Break; end; end; if is_numb_one = False then begin is_numb := False; Break; end; end; if (Length(Parameter) = 4) and (is_numb = True) then begin code_resp := HTTPGet('http://127.0.0.1:11140/api/v1/accounts/check-code?code='+Parameter, response); if code_resp = -1 then begin GUI.ShowMessage('Отсутствует подключение к SMSPDS'); end else if code_resp = 500 then begin GUI.ShowMessage('Неизвестная ошибка сервера') end else begin if pos('[ERROR', response) > 0 then begin GUI.ShowMessage(copy(response, 9, Length(response) - 9 )); Result := False; end else begin for i := 1 to Length(response) do begin is_numb_one := False; for j := 0 to 9 do begin if response[i] = IntToStr(j) then begin is_numb_one := True; Break; end; end; if is_numb_one = False then begin is_numb := False; Break; end; end; if is_numb = True then begin Parameter := response; Result := True; end else begin GUI.ShowMessage(response) Result := False; end; end; end; end else begin Result := False; end; end; ===== Авторизация пользователя по номеру телефона (без кода) ===== Для данного сценария используется один MCR алгоритм. Его название "SMSPDS Telephone Get Card code". В свойствах алгоритма установить в поле "Объект" установить алгоритм авторизации карты по ее коду (алгоритм "Персональная дисконтная система(ПДС)"). {{ :external:smspds_v2:02_configrk:pasted:20221125-121014.png? }} В сам алгоритм вставить следующий скрипт: var response: String; code_resp: Integer; begin if (Length(Parameter) = 11) then begin code_resp := HTTPGet('http://127.0.0.1:11140/api/v1/accounts/get-card-by-phone?phone='+Parameter, response); if code_resp = 500 then begin GUI.ShowMessage('Неизвестная ошибка сервера'); end else if code_resp = -1 then begin GUI.ShowMessage('Отсутствует подключение к SMSPDS'); end else if pos('[ERROR', response) > 0 then begin GUI.ShowMessage(copy(response, 9, Length(response) - 9 )); end else begin Parameter := response; Result := True; end; end; end;