Интерактивные устройства ASM - Руководство разработчика
Аннотация
Настоящий документ представляет собой руководство разработчика (далее Руководство) информационной системы устанавливаемой на оборудовании поставляемом ООО "Автономные системы" (далее Оборудовании). Руководство содержит перечень базовых функций обеспечивающих выполнение операций на Оборудовании. Руководство определяет назначение и сигнатуру поставляемых функций реализуемых на Оборудовании. Перед работой разработчика информационной системы рекомендуется внимательно ознакомиться с настоящим руководством. Документ подготовлен в соответствии с РД 50-34.698-90 - в части структуры и содержания документов, и в соответствии с ГОСТ 34.201-89 - в части наименования и обозначения документов.
История версий
Версия | Дата | Примечание |
---|---|---|
Редакция 0.1.0 | 22.12.2021 | Документ инициирован |
Редакция 0.2.0 | 26.12.2021 | Добавлено описание конечных точек |
Редакция 0.2.1 | 27.12.2021 | Исправление форматирования |
Редакция 0.3.0 | 28.12.2021 | Расширен перечень доступных функций |
Редакция 0.4.0 | 07.09.2022 | Добавлен раздел "Эквайринг" |
Введение
Краткое описание возможностей
Информационная система, установленная на Оборудовании обеспечивает выполнение следующих функций:
- Получение уведомлений о приложении штрих и QR кодов
- Получение уведомлений о приложении смарт-карт и NFC-меток
- Смена режима внешней подсветки на статической свечение с цветом, выбранным из преопределенного списка
- Печать монохромного изображения
- Открытие отсека с бумагой для печати
- Установка адреса стартовой веб-страницы
- Использование эйкваринга для приема платежей
Уровень подготовки пользователя
Для использования функций информационной системы разработчик должен:
- Иметь общие сведения о системе и её назначении
- Владеть информацией об информационной системе в объеме эксплуатационной документации
- Владеть базовыми знаниями о работе веб-приложений
- Владеть базовыми знаниями о работе веб-браузеров
- Владеть базовыми знаниями языка JavaScript
Перечень эксплуатационной документации
- Инструкция по установке;
- Руководство администратора;
- Руководство по техническому обслуживанию;
- Руководство разработчика (настоящий документ).
Назначение и условия применения
Назначение
Список представленных функций предназначен для осуществления создания интерактивного взаимодействия с Оборудованием при реализации сценариев разрабатываемой информационной системы. Представленные функции позволяют:
- Избавить разработчика от необходимости поиска или разработки базовых утилит и драйверов для обеспечения функционирования Оборудования в рамках разрабатываемых им алгоритмов
- Абстрагировать разработчика от деталей реализации специфических протоколов аппаратного взаимодействия
- Повысить удобство администрирования и скорость разработки веб-приложения для своей предметной области
Условия применения
Может эксплуатироваться и выполнять заданные функции при соблюдении требований предъявляемых к техническому, системному и прикладному программному обеспечению.
Подготовка к работе
Состав и содержание дистрибутивного носителя данных
Все необходимое программное обеспечение предустановлено на Оборудование производителем в составе его заводской прошивки.
Порядок загрузки данных и программ
Все описанные функции являются методами глобального объекта window.asm и клиентскому коду сразу же после загрузки Оборудованием стартовой веб-страницы. Порядок доступа аналогичен браузерным API и обеспечивается на уровне базовой конфигурации браузера Chromium от версии 90 и выше. Дополнительно, каждое устройство имеет HTTP RESTful API для управления настройками и сервисного обслуживания.
Порядок проверки работоспособности
Порядок проверки работоспособности осуществляется путем выполнения операций, описанных в разделе 4 настоящего документа
Штрих-коды и QR-коды
Подписка на уведомления о приложении штрих кодов
Для получения уведомления о приложенном штрих-коде в клиентском коде необходимо вызвать функцию со следующей сигнатурой:
const barcodeAttachSub = await window.asm.subToBarcodeAttach(handler)
Где, handler - функция-обработчик, которая будет вызвана в момент приложения штрих-кода, barcodeAttachSub - объект-подписка, имеющий метод unsubscribe, вызов которого отменит подписку.
Функция-обработчик имеет следующую сигнатуру:
const handler = (code) => {}
Где, code - результат расшифовки приложенного штрих-кода, который имеет поле content с типом Uint8Array.
Пример подписки на получение уведомления о приложенном штрих-коде с выводом расшифрованных данных в консоль браузера в виде строки символов ASCII и последующей отпиской:
// Создание объекта-декодера для формирования ASCII-строки
const decoder = new TextDecoder()
// Создание функции-обработчика, которая производит декодирование полученного штрих-кода и вывод полученной строки в консоль
const handler = (code) => console.log(decoder.decode(code.content))
// Подписка на получение уведомления о приложенном штрих-коде
const barcodeAttachSub = await window.asm.subToBarcodeAttach(handler)
// ... Ожидание приложения штрих-кодов
// Отмена подписки
await barcodeAttachSub.unsubscribe()
Смарт-карты
Подписка на уведомления о приложении смарт карт
Для получения уведомления о приложенной смарт-карте в клиентском коде необходимо вызвать функцию со следующей сигнатурой:
const sCardAttachSub = await window.asm.subToSmartCardAttach(handler)
Где, handler - функция-обработчик, которая будет вызвана в момент приложения смарт-карты, sCardAttachSub - объект-подписка, имеющий метод unsubscribe, вызов которого отменит подписку.
Функция-обработчик имеет следующую сигнатуру:
const handler = (card) => {}
Где, card - объект-структура с результатами чтения данных с приложенной смарт-карты, который имеет поля:
- atr с типом Uint8Array. Представляет cообщение типа Answer-to-Reset, содержащее информацию о карте (ISO7816-4)
- type с типом string. Сообщает о типе метки и может принимать только два значения: CARD - в случае если приложена смарт-карта, EMULATED - в случае, если приложено средство эмуляции карты (например, смартфон)
- uid с типом Uint8Array. Представляет структуру типа Unique-IDentifier, содержащую уникальный идентификатор карты, установленный ее производителем (ISO14443-3A)
Пример подписки на получение уведомления о приложенной смарт-карте с выводом полученных данных в консоль браузера и последующей отпиской:
// Создание функции-обработчика, которая производит вывод полученной структуры в консоль
const handler = (card) => console.log(card)
// Подписка на получение уведомления о приложенной смарт-карте
const sCardAttachSub = await window.asm.subToSmartCardAttach(handler)
// ... Ожидание приложенния смарт-карты
// Отмена подписки
await sCardAttachSub.unsubscribe()
Внешняя подсветка
Изменение внешней подсветки на статическое свечение с цветом из списка предопределенных цветов
Для смены режима внешней подсветки на статическое свечение с цветом из списка предопределенных цветов необходимо вызвать функцию со следующей сигнатурой:
await window.asm.setBacklightToStaticPredefined(color)
Где, color - цвет из списка предопределенных цветов. Получение предопределенных цветов представленно следующими функциями:
// Красный
const red = window.asm.predefinedColor.red
// Зеленый
const green = window.asm.predefinedColor.green
// Желтый
const yellow = window.asm.predefinedColor.yellow
Пример установки статического свечения зеленого цвета:
// Получение зеленого цвета
const green = window.asm.predefinedColor.green
// Установка режима свечения
await window.asm.setBacklightToStaticPredefined(green)
Изменение внешней подсветки на динамическое свечение мерцание с цветами из списка предопределенных цветов
Для смены режима внешней подсветки на динамическое свечение с цветами из списка предопределенных цветов необходимо вызвать функцию со следующей сигнатурой:
await window.asm.setBacklightToDynamicPredefined(mode)
Где, mode - объект-струтура, содержащая набор цветов, из списка предопределенных цветов, и временной период (в мс), являющийся промежутком между последовательными переключениями этих цветов. Получение предопределенных цветов описано в разделе 4.3.
Пример установки динамического свечения с участием зеленого и желтого цвета, с периодом переключения 1 секунда:
// Зеленый
const green = window.asm.predefinedColor.green
// Желтый
const yellow = window.asm.predefinedColor.yellow
// Получение режима свечения с участием зеленого и желтого цвета, с периодом переключения 1 секунда
const mode = window.asm.newPredefindDynamicColorMode(green, yellow, 1000)
// Установка режима свечения
await window.asm.setBacklightToDynamicPredefined(mode)
Изменение внешней подсветки на статическое свечение с цветом из палитры RGB
Для смены режима внешней подсветки на статическое свечение с цветом из палитры RGB необходимо вызвать функцию со следующей сигнатурой:
await window.asm.setBacklightToStaticRGB(color)
Где, color - цвет из палитры RGB. Получение цветов представленно функцией со следующей сигнатурой:
const color = window.asm.newRGB(redChannel, greenChannel, blueChannel);
Где, redChannel - число, от 0 до 255, характеризующие красную составляющую, greenChannel - число, от 0 до 255, характеризующие красную составляющую, blueChannel - число, от 0 до 255, характеризующие красную составляющую.
Пример установки статического свечения зеленого цвета:
// Получение зеленого цвета из палитры RGB
const green = window.asm.newRGB(0, 255, 0)
// Установка режима свечения
await window.asm.setBacklightToStaticRGB(green)
Изменение внешней подсветки на динамическое свечение мерцание с цветами из палитры RGB
Для смены режима внешней подсветки на динамическое свечение с цветами из палитры RGB необходимо вызвать функцию со следующей сигнатурой:
await window.asm.setBacklightToDynamicRGB(mode)
Где, mode - объект-струтура, содержащая набор цветов, из палитры RGB, и временной период (в мс), являющийся промежутком между последовательными переключениями этих цветов. Получение цветов из палитры RGB описано в разделе 4.5
Пример установки динамического свечения с участием зеленого и желтого цвета, с периодом переключения 1 секунда:
// Зеленый
const green = window.asm.newRGB(0, 255, 0)
// Желтый
const yellow = window.asm.newRGB(255, 255, 0)
// Получение режима свечения с участием зеленого и желтого цвета, с периодом переключения 1 секунда
const mode = window.asm.newRgbDynamicColorMode(green, yellow, 1000)
// Установка режима свечения
await window.asm.setBacklightToDynamicRGB(mode)
Принтер
Печать изображения
Для печати изображения необходимо вызвать функцию со следующей сигнатурой:
await window.asm.printImage(image)
Где, image - изображение, зашифрованное в строке формата base64.
Пример печати изображения с его предварительной загрузкой с веб-ресурса:
// Объявление адреса ресурса для загрузки изображения
const url = "https://images.list/1"
// Запрос изобржания по объявленному адресу
const response = await fetch(url)
// Получение Blob-структуры из ответа на запрос
const blob = await response.blob()
// Создание объекта-ридера
const reader = new FileReader()
// Создание обработчика, при вызове которого произойдет печать изображения
const handler = async (image) => await window.asm.printImage(image)
// Объявление вызова обработчика в момент завершения чтения объектом-ридером
reader.onloadend = () => handler(reader.result)
// Вызов чтения содержимого Blob-струтуры и кодирования её в base64-строку
reader.readAsDataURL(blob)
Открытие отсека с бумагой для печати
Для открытия отсека с бумагой для печати необходимо вызвать функцию со следующей сигнатурой:
await window.asm.openPaperStorage()
Так как функция не имеет параметров и возвращаемых значений, в качестве примера возможно использование вышеприведенное описание её сигнатуры.
СКУД
Подписка на уведомление об изменении состояния дверной СКУД
Для подписки на уведомления об измененении состояния дверной системы контроля и управления доступом, включающей датчик открытия двери, электронный замок и кнопку выхода (открытия замка) изнутри, необходимо вызвать функцию со следующей сигнатурой:
const accessStateSub = await window.asm.subToAccessStateChange(handler)
Где, handler - функция-обработчик, которая будет вызвана в момент приложения изменения состояния, accessStateSub - объект-подписка, имеющий метод unsubscribe, вызов которого отменит подписку.
Функция-обработчик имеет следующую сигнатуру:
const handler = (state) => {}
Где, state - объект-структура с результатами чтения данных с приложенной смарт-карты, который имеет поля:
- door с типом string. Характеризует состояние двери и может принимать только два значения: OPENED (дверь открыта), CLOSED (дверь закрыта)
- lock с типом string. Характеризует состояние замка и может принимать только два значения: UNLOCKED (замок открыт), UNLOCKED (замок закрыт)
- button с типом string. Характеризует состояние кнопки выхода и может принимать только два значения: PUSHED (кнопка нажата), RELEASED (кнопка свободна)
Пример подписки на получение уведомления о изменении состояния дверной СКУД с выводом полученных данных в консоль браузера и последующей отпиской:
// // Создание функции-обработчика, которая производит вывод полученной структуры в консоль
const handler = (state) => console.log(state)
// Подписка на получение уведомления об изменении состояния дверной СКУД
const accessStateSub = await window.asm.subToAccessStateChange(handler)
// ... Ожидание изменения состояния
// Отмена подписки
await accessStateSub.unsubscribe()
Открытие замка СКУД
Для открытия замка дверной СКУД необходимо вызвать функцию со следующей сигнатурой:
await window.asm.unlockTheLocks()
Так как функция не имеет параметров и возвращаемых значений, в качестве примера возможно использование вышеприведенное описание её сигнатуры.
Мультимедиа
Получение видеоизображения
Для получения видеоизображения с камеры устройства, необходимо вызвать функцию со следующей сигнатурой:
const video = await window.asm.getVideo(condition)
Где, video - объект-структура, содержащей поле element, типа HTMLVideoElement, condition - объект-структура, содержащий поле withAudio, обозначающее необходимость передачи вместе с видеоизображением также аудио-информации с микрофона устройства.
Пример получения видеоизображения без аудио-информации для трансляции на странице:
// Получение условия необходимости передачи видеоизображения без аудио-информации
const condition = window.asm.newVideoCondition(false)
// Получение видеоизображения
const video = await window.asm.getVideo(condition)
// Добавление элемента с видеоизображением к телу страницы
document.body.appendChild(video.element)
Получение аудио информации
Для получения аудио-информации с микрофона устройства, необходимо вызвать функцию со следующей сигнатурой:
const audio = await window.asm.getAudio()
Где, audio - объект-структура, содержащей поле element, типа HTMLAudioElement.
Пример получения аудио-информации для записи с последующим скачиванием аудио-файла:
// Объявление буфера для записи
let recorded = [];
// Объявление функции для сохранения буфера в файл и создания ссылки
const saveToObjectUrl = () => {
const blob = new Blob(recorded, { type: 'audio/webm' });
return URL.createObjectURL(blob);
}
// Объявление функции для скачивания файла
const download = (url) => {
let a = document.createElement('a');
a.style = 'display: none';
a.href = url;
a.download = 'audio.webm';
document.body.appendChild(a);
a.click();
window.URL.revokeObjectURL(url);
}
// Объявление опций, с которыми аудио-информация будет записываться в файл
const options = {mimeType: 'audio/webm'};
// Получение аудио-информации
const audio = await window.asm.getAudio()
// Получение потока аудио-информации
const stream = audio.element.captureStream();
// Обявление рекордера для записи
const recorder = new MediaRecorder(stream, options);
// Объявление обработчика, который будет записывать информацию всякий раз, когда рекордер получает новую порцию данных
const dataHandler = (ev) => {
// Сохранение порции данных в буфер
if (ev.data.size > 0) {
recorded.push(ev.data)
}
// Сохранение буфера в файл и скачивание в случае окончания процесса записи
if (recorder.state == 'inactive') {
const url = saveToObjectUrl();
download(url);
}
}
// Назначение обработчика для обработки вновь полученных рекордером данных
recorder.ondataavailable = dataHandler;
// Запуск записи
recorder.start();
// ...Ожидание окончания записи
Проигрывание аудио
Для запуска проигрывания аудио на устройстве, необходимо вызвать функцию со следующей сигнатурой:
await window.asm.playAudio(condition)
Где, condition - объект-структура, содержащей поле source, типа string, характеризующее адрес ресурса, где находиться необходимый для проигрывания аудио файл, а также поле count, с числом, характеризующим количество повторений проигрывания.
Пример проигрывания аудио с 3 повоторениями:
// Объявление адреса ресурса с аудио-файлом
const url = "https://audio.src/1"
// Объявление количества повторений
const repeatCount = 3
// Объявление условий проигрывания
const condition = window.asm.netAudioCondition(url, repeatCount)
// Запуск процесса проигрывания
await window.asm.playAudio(condition)
Голосовой генератор (Text-To-Speech)
Озвучивание текстовой фразы
Для трансляции текстовой фразы в аудио, с последующем озвучивании на устройстве, необходимо вызвать функцию со следующей сигнатурой:
await window.asm.textToSpeech(phrase)
Где, phrase - объект-структура, содержащей поле sentense, типа string, характеризующее текстовое предложение.
Пример озвучивания текстовой фразы 'Проверка! Раз, Два, Три':
// Объявление фразы
const phrase = window.asm.newPhrase("Проверка! Раз, Два, Три")
// Запуск процесса озвучивания
await window.asm.textToSpeech(phrase)
Активность пользователя
Получение уведомлений о наличии отсутствии активности у устройства
Для получения уведомлений в момент изменения состояния наличия/отсутствия активности, необходимо вызвать функцию со следующей сигнатурой:
const activityChangeSub = await window.asm.subToUserActivity(handler)
Где, handler - функция-обработчик, которая будет вызвана в момент изменения состояния активности, activityChangeSub - объект-подписка, имеющий метод unsubscribe, вызов которого отменит подписку.
Функция-обработчик имеет следующую сигнатуру:
const handler = (activity) => {}
Где, activity - объект-структура с информацией о текущем состоянии активности, содержащий поле state, типа string, которое может принимать только два значения: ACTIVE - в случае если наблюдается активность, INACTIVE - в случае, если активность отутствует.
Пример подписки на получение уведомлений в момент изменения состояния наличия/отсутствия активности с выводом полученных данных в консоль браузера и последующей отпиской:
// Создание функции-обработчика, которая производит вывод полученной информации в консоль
const handler = (activity) => console.log(activity.state)
// Подписка на получение уведомления об изменении состояния активности
const activityChangeSub = await window.asm.subToUserActivity(handler)
// ... Ожидание изменения состояния активности
// Отмена подписки
await activityChangeSub.unsubscribe()
Климат
Получение данных о климате
Для получения данных о климате вблизи устройства, необходимо вызвать функцию со следующей сигнатурой:
const climate = await window.asm.getClimate()
Где, climate - объект-структура, содержащей поля:
- temperature, типа string, характеризующее температуру воздуха в градусах Цельсия,
- humidity, типа string, характеризующее относительную влажность воздуха в процентах,
- pressure, типа string, характеризующее давление в Паскалях
Так как функция не имеет параметров, в качестве примера возможно использование вышеприведенное описание её сигнатуры.
Питание
Выключение устройства*
Для выключения устройства необходимо вызвать функцию со следующей сигнатурой:
await window.asm.poweroff()
Так как функция не имеет параметров и возвращаемых значений, в качестве примера возможно использование вышеприведенное описание её сигнатуры.
*Стоить обратить внимание, что после выключения устройства с вызовом этой функции включить его обратно возможно будет только вручную. В основной массе сценариев, требующих выключения устройства, рекомендуется использовать функцию перезагрузки, описанную в соответствующем разделе.
Перезагрузка устройства
Для перезагрузки устройства необходимо вызвать функцию со следующей сигнатурой:
await window.asm.reboot()
Так как функция не имеет параметров и возвращаемых значений, в качестве примера возможно использование вышеприведенное описание её сигнатуры.
Перезагрузка периферийных модулей*
Для перезагрузки периферийных модулей устройства необходимо вызвать функцию со следующей сигнатурой:
await window.asm.resetPeriphery()
Так как функция не имеет параметров и возвращаемых значений, в качестве примера возможно использование вышеприведенное описание её сигнатуры.
*Стоит обратить внимание, что использование этой функции предусматривается только в случае необратимых, критических сбоей аппаратного обеспечения устройства, и не рекомендуется без предварительного уведомления Производителя.
Установка состояния сна*
Для установки состояния сна устройства, при котором происходит выключение экрана и приостановка работы функциональных модулей, необходимо вызвать функцию со следующей сигнатурой:
await window.asm.sleep()
Так как функция не имеет параметров и возвращаемых значений, в качестве примера возможно использование вышеприведенное описание её сигнатуры.
*Стоит обратить внимание, что выход из состояния сна происходит только после вызова соответствующей функции, описанной в разделе 4.21
Выход из состояния сна
Для установки выхода из состояния сна необходимо вызвать функцию со следующей сигнатурой:
await window.asm.wakeUp()
Так как функция не имеет параметров и возвращаемых значений, в качестве примера возможно использование вышеприведенное описание её сигнатуры.
Системные настройки
Установка стартовой страницы
Для установки стартовой страницы необходимо вызвать функцию со следующей сигнатурой:
await window.asm.setStartupPage(page)
Где, page - строка с адресом веб-ресурса для загрузки веб-страницы.
Пример установки стартовой страницы:
// Объявление адреса ресурса для загрузки страницы
const page = "https://startup.page"
// Установка стартовой страницы
await window.asm.setStartupPage(page)
Помимо доступа на уровне браузерных скриптов существует возможность изменения стартовой страницы посредвом вызова HTTP API.
В качестве примера использования такой возможности приведен пример производства POST-запроса с помощью утилиты curl:
# Сделать стартовой страницу google.com
curl -d '{"url":"https://google.com"}' -H "Content-Type: application/json" -X POST http://asmhost:9009/startupPage
Переключение панели Dev-Tools
Возможность вызова панели Dev-Tools браузера осуществляется посредством HTTP API.
В качестве примера использования такой возможности приведен пример производства POST-запроса с помощью утилиты curl:
# Открыть панель
curl -d '{"open":true}' -H "Content-Type: application/json" -X POST http://asmhost:9009/devTools
# Закрыть панель
curl -d '{"open":false}' -H "Content-Type: application/json" -X POST http://asmhost:9009/devTools
Установка статического IP-адреса
Для установки статического IP-адреса для сетевого интерфейса устройства необходимо вызвать функцию со следующей сигнатурой:
await window.asm.setStaticIp(staticIP)
Где, staticIP - объект-структура, характеризующий параметры сетевого интерфейса. Для получения объекта необходимо вызвать фукнцию со следующей сигнатурой:
const staticIP = await window.asm.newStaticIp(ip, mask, broadcast, gateway)
Где, ip ,с типом string, характеризует IP-адрес, который будет установлен в качестве статического; mask, с типом string, характеризует маску подсети; broadcast, с типом string, характеризует широковещательный адрес; gateway, с типом string, характеризует адрес сетевого шлюза.
Пример установки статического IP-адреса:
// IP-адрес
const ip = "192.168.1.10"
// Маска
const mask = "255.255.255.0"
// Широковещательный адрес
const broadcast = "192.168.1.255"
// Адрес шлюза
const gateway = "192.168.1.254"
// Получение структуры параметров сетевого интерфейса
const staticIP = window.asm.newStaticIp(ip, mask, broadcast, gateway)
// Установка стартовой страницы
await window.asm.setStaticIp(staticIP)
Установка динамического IP-адреса
Для установки динамического IP-адреса для сетевого интерфейса устройства необходимо вызвать функцию со следующей сигнатурой:
await window.asm.setDynamicIP()
Так как функция не имеет параметров и возвращаемых значений, в качестве примера возможно использование вышеприведенное описание её сигнатуры.
Получение текущей конфигурации сетевого интерфейса
Для получения текущей конфигурации сетевого интерфейса устройства необходимо вызвать функцию со следующей сигнатурой:
const conf = await window.asm.getNetconf()
Где, conf - объект-структура конфигурации сетевого интерфейса, который имеет поля:
- hostname с типом string. Характеризует имя хоста,
- ip с типом string. Характеризует IP-адрес,
- mask с типом string. Характеризует маску подсети,
- gateway с типом string. Характеризует адрес шлюза,
- broadcast с типом string. Характеризует широковещательный адрес,
- ipv6 с типом string. Характеризует IPv6-адрес,
- prefixlenv6 с типом string. Характеризует длину IPv6-адреса,
- gatewayv6 с типом string. Характеризует адрес IPv6-шлюза,
- mac с типом string. Характеризует MAC-адрес,
- dhcp с типом boolean. Положительное значение говорит о том, что сетевой интерфес получает IP-адрес динамически,
Так как функция не имеет параметров, в качестве примера возможно использование вышеприведенное описание её сигнатуры.
Получение заводского серийного номера
Для получение заводского серийного номера устройства, который является уникальным идентификатором устройства, необходимо вызвать функцию со следующей сигнатурой:
const serialNumber = await window.asm.getSerialNumber()
Где, serialNumber - объект-структура, содержащей поле value ,с типом string, который характеризует серийный номер.
Так как функция не имеет параметров, в качестве примера возможно использование вышеприведенное описание её сигнатуры.
Эквайринг
Запрос оплаты указанной суммы
Для запуска режима ожидания оплаты указанной суммы необходимо вызвать функцию со следующей сигнатурой:
const payment = await window.asm.requestPayment(request)
Где, request - объект с параметрами запроса, payment - данные о результате операции, которые возвращаются после того, как пользователь произвел оплату.
Объект request имеет следующие поля:
-
amount - типа number, которое определяет запрашиваемую сумму в копейках,
-
isSlipPrint - типа boolean, которое указывает, требуется ли распечатка чека-слипа на принтере.
Объект payment имеет следующие поля:
-
error - типа string, которое сообщает об ошибке, произошедшей в процессе оплаты. В случае успеха оплаты данное поле содержит пустую строку,
-
base64Slip - типа string, которое содержит изображение чека-слипа, закодированное в формате base64. В случае наличия ошибки в процессе оплаты данное поле содержит пустую строку.
Пример запроса оплаты суммы в 1 рубль (100 копеек) с последующей распечаткой чека-слипа:
// Создание объекта request с указание суммы оплаты в 100 копеек и требования распечатки чека-слипа
const request = { amount: 100, isSlipPrint: true }
// Запрос оплаты
const payment = window.asm.requestPayment(request)
// В случае отсутсвия ошибок
if (payment.error.length === 0) {
// Вывод чека-слипа на текущую страницу
const img = document.createElement("img")
img.src = payment.base64Slip
document.body.appendChild(img)
// Если есть ошибка
} else {
// Вывод ошибки в консоль
console.log(payment.error)
}
Удаленная отладка (remote-debug)
Remote-debug (удаленная отладка) - это технология, которая позволяет подключиться к устройству или браузеру из другого устройства или компьютера, и получить доступ к инструментам разработчика для отладки и анализа проблем.
Remote-debug полезен для разработчиков, которые работают с удаленными устройствами или тестируют веб-приложения на различных устройствах и браузерах. Эта технология позволяет быстро выявлять и исправлять ошибки на удаленном устройстве без необходимости быть рядом с ним.
Для использования remote-debug (удаленной отладки) с браузером Chrome Вам нужно выполнить следующие шаги:
- Убедитесь, что ваше устройство и компьютер находятся в одной сети.
- Узнайте ip адрес вашего устройства.
- Откройте браузер Chrome на вашем компьютере и введите в адресной строке следующий адрес:
http://[ip адресс устройства]:9221
- После этого в вашем браузере откроется окно с выделенной ссылкой. При нажатии на нее, откроются инструменты разработчика Chrome, где вы сможете проводить отладку своего приложения.
Для примера, на скриншотах показана отладка стандартного шаблон-приложения create-react-app: