+38 063 731 76 76; +38 096 446 96 48 info@астериск.укр

Поєднання термінала “ПриватБанк” та 1С 77 на прикладі термінала VX-520

В зв’язку зі змінами в податковому законодавстві будемо робити касове суміщення термінала “ПриватБанк” VX-520 з 1с77, і оскільки 1С77 погано обробляє результати WinSock то використаємо зовнішній скрипт vbs.
Принцип роботи наступний, сам скрипт vbs забезпечує передачу даних на термінал та збереження відповіді в файл, з боку 1с ми викликаємо скрипт з наступними параметрами:
1. IP адреса термінала
2. Порт термінала
3. Дані для оплати (сума)
4. Ім’я файлу для збереження отриманих від термінала данних
Сам скрипт:

Dim WinSock, i, responseData, requestData, remoteHost, remotePort, fso, file, buffer

‘ Проверяем аргументы
If WScript.Arguments.Count < 4 Then WScript.Echo “Использование: cscript script.vbs “
WScript.Quit
End If

‘ Читаем аргументы
remoteHost = WScript.Arguments(0)
remotePort = WScript.Arguments(1)
‘requestData = “{“”method””: “”GetTerminalInfo””, “”step””: 0}”
requestData = WScript.Arguments(2)
requestData = Replace(requestData, “‘”, “”””)
outputFile = WScript.Arguments(3)

‘ Создаём объект Winsock
Set WinSock = CreateObject(“MSWinsock.Winsock”)

If WinSock Is Nothing Then
WScript.Echo “Не удалось создать объект MSWinsock.Winsock!”
WScript.Quit
End If

‘ Устанавливаем IP и порт сервера
WinSock.RemoteHost = remoteHost
WinSock.RemotePort = CInt(remotePort)

‘ Подключаемся
WinSock.Connect

‘ Ждём подключения (5 секунд)
For i = 1 To 200
WScript.Sleep 100
If WinSock.State = 7 Then ‘ 7 – Connected
WScript.Echo “Подключение установлено!”
Exit For
End If
Next

‘ Проверяем подключение
If WinSock.State <> 7 Then
WScript.Echo “Не удалось подключиться!”
WScript.Quit
End If

‘ Отправляем JSON-запрос
WinSock.SendData requestData
WScript.Echo “Запрос отправлен: ” & requestData

‘ Ожидаем ответ от сервера
WScript.Echo “Ожидание ответа…”

responseData = “”
For i = 1 To 400 ‘ 10 секунд ожидания
WScript.Sleep 250
If WinSock.BytesReceived > 0 Then
Do
tempData = “”
WinSock.GetData tempData
responseData = responseData & tempData
WScript.Sleep 8000 ‘ Ждём 500 мс перед повторной проверкой
Loop While WinSock.BytesReceived > 0
Exit For
End If
Next

‘ Проверяем, есть ли данные
If Len(responseData) > 0 Then
WScript.Echo “Ответ от сервера получен: ” & responseData
Else
responseData = “Ошибка: ответ не получен”
WScript.Echo responseData
End If

‘ Записываем ответ в файл
Set fso = CreateObject(“Scripting.FileSystemObject”)
Set file = fso.CreateTextFile(outputFile, True)
file.WriteLine responseData
file.Close

‘ НЕ закрываем соединение, можно повторно отправлять запросы
‘ *** Раскомментируй, если нужно закрытие ***
WinSock.Close
Set WinSock = Nothing

На боці 1с все максимально просто,
Зверху оголошуємо змінні

Перем terminalId;
Перем paymentSystem;
Перем pan;
Перем approvalCode;
Перем rrn;

формуємо та робимо запит
Перем WinSock, IP_Терминала, ПортТерминала, JSONЗапрос, Ответ;
// Перем terminalId, paymentSystem, pan, approvalCode, rrn;

// IP и порт терминала (укажите свой)
  IP_Терминала = Склад.ТерминалАйпи;
Порт_Терминала = Склад.ТерминалПорт;

СуммаОтформатирована = Формат(Сумма, "Ч8.2");
СуммаОтформатирована = СтрЗаменить(СуммаОтформатирована, " ", "");

// Формируем JSON-запросJSON_Запрос = "{'method': 'Purchase', 'step': 0, 'params': { " + 
JSON_Запрос = "{'method': 'Purchase', 'step': 0, 'params': { " + 

// “‘amount’: ‘” + Строка(Формат(Сумма, “ЧГ=0.00”)) + “‘, ” +
“‘amount’:'”+Строка(СуммаОтформатирована)+”‘,”+
“‘discount’: ”, ” +
“‘merchantId’: ‘0’, ” +
“‘facepay’: ‘false’, ” +
“‘subMerchant’: ” } }”;
//Сообщить(JSON_Запрос);
КаталогВременныхФайловТерминалов=”C:\Files\terminal\”;
ВременныйФайл = КаталогВременныхФайловТерминалов+”output”+СокрЛП(Склад.Код)+”.txt”;

// Команда для запуска VBScript
Команда = "cscript C:\Files\terminal\req2.vbs " +IP_Терминала+" " +Порт_Терминала+" """+JSON_Запрос+""" " + ВременныйФайл;
Сообщить("cscript C:\Files\terminal\req2.vbs " +IP_Терминала+" " +Порт_Терминала+" """+JSON_Запрос+""" " + ВременныйФайл);
// Запускаем скрипт через WScript.Shell
Shell = СоздатьОбъект("WScript.Shell");
Shell.Run(Команда, 0, 1); // 0 - фоновый режим, 1 - ждем завершения

Далі отримуємо та розбираємо відповідь 

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

1 + 7 =