====== 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;