+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 - ждем завершения

Далее получаем и разбираем ответ

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

39 − = 35