NDemia Новости CashMatic Рубли Форум

Сеанс приёма платежа


см. также: Компоненты расширения Прикладные скрипты Приём наличных денег
Модель навигации Модель обработки отказов Переменные платёжного сеанса при печати
Интерфейс ICashMaticSessionExtender Объект CashMaticSession Пример платёжного интерфейса


Обычно в любой платёжной системе можно выделить некоторый интервал времени, в течение которого один конкретный пользователь работает с терминалом - сообщает и получает какие-либо сведения, вносит наличные деньги, получает печатные документы. Какими бы ни были назначение и сложность платёжной системы, всё равно - всё сводится к существованию этого интервала, называемого сеансом приёма платежа, или платёжным сеансом.
За платёжный сеанс отвечает объект
CashMaticSession.
Объект CashMaticSession существует в контексте работы хост-приложения, а не HTML-документа, скрипт может лишь получить ссылку на этот объект, но не может его создать или уничтожить. Используя методы AddProp/GetProp, скрипты могут записывать и читать именованные значения (переменные сеанса), которые будут сохраняться при переходах со страницы на страницу (кроме того, эти переменные доступны для шаблонов печати выходных документов). Компоненты расширения через эти методы могут взаимодействовать со скриптом, изменяя контекст платёжного сеанса.

Вызов метода Reset должен соответствовать времени начала ожидания работы интерактивного пользователя (плательщика).
Вызов метода Start должен соответствовать времени начала работы интерактивного пользователя (плательщика).
Между вызовами Reset и Start может пройти сколь угодно длительное время (зависит от наличия и активности пользователей платёжного терминала).
Cоздание переменных платёжного сеанса можно начинать после вызова метода Reset, однако переменные, связанные с логикой действий интерактивного пользователя (плательщика), следует создавать после вызова Start.

Метод Reset полностью сбрасывает контекст платёжного сеанса - все созданные переменные удаляются. Рекомендуется вызывать метод Reset явно - в текущей версии это не обязательно (автоматически делается внутренний вызов из Start), но в дальнейшем предполагается запрет начала следующего сеанса без сброса предыдущего.

Совместимость: в версиях NDemia CashMatic ранее v.2.7.2 метод Reset вызывается неявно (автоматически) при закрытии окна приложения NDemia CashMatic KioskBrowser.


Метод Start обозначает начало платёжного сеанса (прикладной скрипт должен вызвать его явно).
При этом создаётся начальный набор переменных сеанса:
Имя переменной Значение Комментарий
AppSession номер запуска приложения NDemia CashMatic KioskBrowser счётчик, считается от установки NDemia CashMatic, значение увеличивается на единицу при каждом запуске приложения.
PaymentSession номер текущего платежа счётчик, считается от установки NDemia CashMatic, значение увеличивается на единицу при каждом вызове метода Start, однако новое значение запоминается только в случае, если в платёжном сеансе включался приём купюр.
UserSession номер сеанса приёма платежа счётчик, считается от установки NDemia CashMatic, значение увеличивается на единицу при каждом вызове метода Start.


Другими словами: AppSession показывает, сколько раз запускался NDemia CashMatic KioskBrowser, UserSession показывает, сколько раз пользователи начинали платёжные сеансы, PaymentSession показывает, сколько раз начинался приём наличных денег.
В процессе эксплуатации терминала нормальным соотношением является:
AppSession <= PaymentSession <= UserSession
Начальный набор переменных сеанса создаётся до вызова метода PreStart интерфейса компонентов расширения ICashMaticSessionExtender.

Совместимость: в версиях NDemia CashMatic ранее 2.6.0 из перечисленных выше создаётся только переменная UserSession, её значение доступно компонентам расширения, начиная с вызова метода PostStart интерфейса компонентов расширения ICashMaticSessionExtender.


Компоненты расширения могут по событию PreStart создать свои дополнительные значения, которые будут впоследствии доступны прикладным скриптам.
Метод Finish обозначает конец платёжного сеанса (программист скрипта должен вызвать его явно). В текущей версии это выражается только в соответствующем оповещении компонентов расширения, однако в будущем предполагается запрет каких-либо дальнейших изменений объекта до сброса.
Метод Finish обозначает конец платёжного сеанса. В текущей версии это выражается только в соответствующем оповещении компонентов расширения, однако в будущем предполагается запрет каких-либо дальнейших изменений объекта CashMaticSession до сброса (Reset).
Предполагается, что хотя бы один из компонентов расширения должен по событиям PreFinish/PostFinish зарегистрировать платёж (записать в отчётный файл, передать на сервер и т.п.). NDemia CashMatic KioskBrowser сам по себе не выполняет зачисление или регистрацию платежа каким-либо образом — это должен сделать либо прикладной скрипт, либо компонент расширения. Однако механизм платёжных сеансов NDemia CashMatic гарантирует следующее: если в текущем платёжном сеансе вызывался метод Start, то метод Finish будет вызван обязательно. Если прикладной программист не сделает этого вызова явно, будет сделан неявный вызов из Reset. Таким образом, Reset - это не просто сброс в исходное состояние, отменяющий текущий контекст - для начавшегося сеанса всегда гарантируется завершение.
Рекомендуется вызывать метод Finish явно - в текущей версии это не обязательно (автоматически делается внутренний вызов из Reset), но в дальнейшем предполагается запрет сброса платёжного сеанса без явного завершения.
Обратите внимание, при определённых обстоятельствах может сложиться целая цепочка неявных вызовов: если прикладной скрипт каждый раз вызывает только Start, то Start очередного сеанса вызывает неявный Reset предыдущего сеанса, а Reset неявно вызывает Finish предыдущего сеанса.
После Finish все данные платежа остаются ещё актуальными, прикладные скрипты и компоненты расширения могут проанализировать, чем закончился платёжный сеанс, были ли обработаны результаты платежа, переданы ли данные платежа на сервер и т.п.
После Reset - никакой информации от предыдущего платежа не остаётся, можно начинать ожидание следующего пользователя-плательщика, который своими действиями откроет новый платёж.
После Start - ожидается вызов Finish, в обязательном порядке. Если он будет пропущен (не будет сделан прикладным скриптом или компонентом расширения до следующего вызова Start или Reset), то этот вызов будет выполен автоматически (неявно). В любом случае соответствующим образом уведомляются компоненты расширения (через методы PreFinish/PostFinish интерфейса ICashMaticSessionExtender).

ВАЖНО: программисту следует с большим вниманием отнестись к местам вызова Reset, Start, Finish, поскольку при каких-либо ошибках в этой части есть риск попадания данных предыдущего платежа в следующий сеанс, вплоть до повторного зачисления предыдущего платежа. Кроме того, следует соотносить место сброса сеанса с возможностью возникновения отложенного отказа, т.е. неисправности при незавершённом платёжном сеансе с уже принятыми наличными деньгами (см. Модель обработки отказов).


тел. +7-(916)-129-26-84 (C)opyright: NDemia Ltd, Москва, 2006..2024 ndemia@ndemia.com