Библиотека для обслуживания банковских карт (версия для Windows) Описание интерфейса - davaiknam.ru o_O
Главная
Поиск по ключевым словам:
страница 1
Похожие работы
Название работы Кол-во страниц Размер
Проект «карта для особых клиентов» Сбербанк и ведущие пермские торгово-сервисные... 1 178.98kb.
Предоставления и обслуживания кредитных банковских карт в ОАО ханты-мансийский... 3 465.43kb.
Для выпуска в 11: 30 (тихоокеанское летнее время) 13 сентября 2011 г. 1 43.87kb.
История развития ос windows windows 0 1 80.21kb.
Библиотечный модуль печати налоговых документов с двухмерным штриховым... 1 34.17kb.
Руководство по установке программного продукта (для абонента) 1 235.77kb.
Winrar — это 32-разрядная версия архиватора rar для Windows 1 35.49kb.
Принтеры Hewlett-Packard LaserJet серии 4200 и LaserJet серии 4300... 1 288.19kb.
Инфраструктура обслуживания банковских карт ОАО «нико-банк» платежной... 1 303.26kb.
Назначение и сфера применения 1 36.92kb.
Техническое задание на изготовление Павильона Содержание Общее описание 1 113.74kb.
Основные принципы построения блочных шифров 3 417.11kb.
Направления изучения представлений о справедливости 1 202.17kb.

Библиотека для обслуживания банковских карт (версия для Windows) Описание интерфейса - страница №1/1

Библиотека для обслуживания банковских карт

(версия для Windows)

Описание интерфейса

Оглавление





Оглавление 2

Общие сведения 3

Интерфейс с библиотекой 3

Функции ядра 4

Классы функций 4

Класс 0 — специальные функции 5

Функция 0 5

Функция 1 6

Функция 2 6

Функция 3 7

Функция 4 8

Функция 5 8

Функция 6 8

Функция 7 9

Функция 8 9

Функция 9 10

Функция 10 10

Класс 1 — финансовые операции по СБЕРКАРТ 10

Класс 2 — информационные операции по СБЕРКАРТ 12

Класс 3 — служебные операции по СБЕРКАРТ 13

Класс 4 — финансовые операции по картам с магнитной полосой 13

Класс 5 — информационные операции по картам с магнитной полосой 15

Класс 6 — cлужебные операции по картам с магнитной полосой 16

Класс 7 — общие служебные операции 17

Типы и константы 18

Коды ошибок 19




Общие сведения

Библиотека предназначена для обслуживания карт с магнитной полосой и микропроцессорных карт АС СБЕРКАРТ. Библиотека реализована на платформе Win32 в виде dll.


Требования к оборудованию:

  • наличие com – порта для подключения ПИН – клавиатуры;

  • сетевая карта с установленным TCP/IP или com – порт для подключения модема.


Интерфейс с библиотекой

Библиотека состоит из ядра, в котором реализована основная функциональность, и интерфейсной библиотеки gate.dll. Для выполнения любой операции внешние программы вызывают функцию call_sb_kernel из библиотеки gate.dll. Эта функция описана следующим образом:


extern “C” DWORD call_sb_kernel(

DWORD func,

void *in_arg,

void *out_arg);


Функция использует метод вызова языка С (cdecl). Ниже приводится описание параметров функции.
DWORD func

Номер вызываемой функции ядра.


void *in_arg

Указатель на структуру, содержащую параметры, передаваемые функции. Структура описана следующим образом.


typedef struct tagInArg{

void *Reserved;

void *in_struct;

} InArg;
Параметр Reserved должен иметь значение NULL, если противное специально не оговаривается в описании конкретной функции.


Параметр in_struct – указатель на буфер типа struct_in_clX, где X – номер класса1, для функций ненулевого класа, или указатель на буфер типа struct_inX, где X – номер функции класса 0, или NULL, если функция не принимает параметров.

void *out_arg

Указатель на структуру, в которой возвращается результат. Структура описана следующим образом.
typedef struct tagOutArg{

DWORD ErrorCode; //код завершения операции

DWORD Flags; //флаги последующей обработки

void *Reserved;

void *out_struct;

} OutArg;


В поле ErrorCode возвращается код ошибки или 0, если операция была успешно выполнена.

Перед вызовом функции вызывающая программа должна установить значение поля Flags в 0. После вызова функции вызывающая программа должна проанализировать содержимое поля Flags и выполнить действия в соответствии с установленными флагами.


Если установлен флаг F_HAVE_DOCUMENT, вызывающая программа должна выполнить печать документа с помощью специальных функций 4 и 5 (см. ниже).
Если установлен флаг F_CRITICAL (может устанавливаться только совместно с F_HAVE_DOCUMENT), вызывающая программа после печати документа должна убедиться, что он напечатан успешно (при необходимости запросив подтверждение у пользователя).
Параметр Reserved должен иметь значение NULL, если противное специально не оговаривается в описании конкретной функции.
Параметр out_struct – указатель на буфер типа struct_out_clX, где X – номер класса, для функций ненулевого класа, или указатель на буфер типа struct_outX, где X – номер функции класса 0, или NULL, если функция не возвращает результатов. Этот буфер заполняется данными только в случае успешного выполнения функции.
В случае успешного вызова функции ядра функция call_sb_kernel возвращает 0 (соответствует константе ERR_OK – см. описание кодов ошибок ниже), в противном случае – ненулевой код ошибки. Вызывающая программа должна проанализировать значение, возвращаемое функцией call_sb_kernel. Если функция вернула ERR_OK, следует проанализировать поле out_arg.ErrorCode.

Функции ядра

Классы функций

Все функции ядра разделены на несколько классов по диапазону номеров. Все функции ядра одного класса принадлежат к одной функциональной группе и имеют одинаковые входные и выходные параметры (за исключением классов специальных функций). Это позволяет внешним программам получить список поддерживаемых ядром функций с помощью специальной «описательной» функции (см. ниже) и организовать работу с этими функциями в соответствии с их классом.


Операции, которые библиотека позволяет выполнять с картами, можно условно разделить на финансовые (оплата, выдача наличных, возврат покупки, отмена операции, завершение расчета после предавторизации и т.д.), информационные (запрос остатка на счете, загрузка неотраженных средств, предавторизация и т.д.) и служебные (открытие операционного дня, закрытие операционного дня, инкассация и т.д.).
В таблице приведены классы функций ядра:


Класс

Диапазон номеров

Функций


Описание

0

0 – 999
Специальные функции библиотеки

1

1000 – 1999

Финансовые операции по СБЕРКАРТ

2

2000 – 2999

Информационные операции по клиентской карте СБЕРКАРТ

3

3000 – 3999

Служебные операции СБЕРКАРТ

4

4000 – 4999

Финансовые операции по картам с магнитной полосой

5

5000 – 5999

Информационные операции по карте с магнитной полосой

6

6000 – 6999

Служебные операции по картам с магнитной полосой

7

7000 – 7999

Общие служебные операции

Ниже приводится список функций текущей реализации ядра.



Класс 0 — специальные функции

Все функции этого класса имеют различные параметры.




Функция

Описание

0

Инициализация. Работа с библиотекой возможна только после успешного вызова этой функции.

1

Завершение работы. Должна вызываться перед завершением работы с библиотекой.

2

Получение числа поддерживаемых функций (кроме класса 0)

3

Получение списка поддерживаемых функций (кроме класса 0)

4

Получение размера документа для печати

5

Получение образа документа для печати

6

Получение числа настроенных терминалов (валют)

7

Получение списка настроенных терминалов (валют)

8

Настройка пользовательского интерфейса

9

Установка имени пользователя

10

Меню тех. обслуживания



Функция 0

Входные параметры:


typedef struct tag_struct_in0{

DWORD AppVersion; //минимальная требуемая версия ядра

void *UIData; //данные для пользов. интерфейса

void *Reserved;

} struct_in0;
Функция поддерживает передачу дополнительных параметров. Для передачи дополнительных параметров полю in_arg.Reserved нужно присвоить указатель на структуру
typedef struct tag_struct_in_reserved0{

DWORD size; //Размер структуры

void *Reserved1; //=NULL

BYTE KeyVersion; //Версия ключа для проверки сертификата.

//0, если проверка сертификата не используется

} struct_in_reserved0;


Выходные параметры:

typedef struct tag_struct_out0{

DWORD LibVersion; //установленная версия ядра

} struct_out0;


При вызове функции 0 внешняя программа должна в поле Version установить минимальный номер версии библиотеки, с которой она поддерживает работу. Номер версии задается в шестнадцатеричном формате 0x00VVRRBB, где VV – версия, RR – релиз, BB – билд. Например, версия 2.19.12 кодируется как 0x0002130C. Текущая версия библиотеки, описанная в настоящей спецификации, имеет номер 3.1.1.
В случае, если затребованный номер версии превышает текущую версию библиотеки, функция 0 вернет код ошибки ERR_INCORRECT_VERSION. В противном случае могут быть возвращены другие коды ошибок (например, связанные с неготовностью оборудования, используемого библиотекой, нарушением целостности файлов и т.д.) или ERR_OK, если инициализация прошла успешно.
Если используемая библиотека пользовательского интерфейса требует дополнительных параметров инициализации, то они передаются в поле UIData.
В случае, если первой функцией, вызванной из библиотеки после ее загрузки, будет любая другая функция, кроме 0, 2, 3, она завершится с кодом ошибки ERR_NOT_INITIALISED.

Функция 1

Входные параметры: Нет.


Выходные параметры: Нет.
Функция должна вызываться перед завершением работы с библиотекой. Любая функция (кроме 0), вызванная после функции 1, будет завершаться с кодом ошибки ERR_NOT_INITIALISED.

Функция 2

Входные параметры: Нет.


Выходные параметры:
typedef struct tag_struct_out2{

DWORD Count; //кол–во поддерживаемых операций

} struct_out2;
С помощью функции 2 внешняя программа может узнать количество карточных операций, поддерживаемых библиотекой. Это необходимо для последующего получения списка названий и номеров этих операций (см. функцию 3).

Функция 3

Входные параметры: Нет


Выходные параметры:
typedef struct tag_struct_out3{

EnumStruct *Buffer; //буфер размера Count * sizeof(EnumStruct)

// заполняется структурами EnumStruct (см. ниже)

} struct_out3;


typedef struct tag_EnumStruct{

DWORD FuncID; //номер функции библиотеки

DWORD Options; //флаги, описывающие содержание операции

char Name[64]; //название карточной операции

}EnumStruct;
При вызове функции 3 структура struct_out3 должна быть инициализирована вызывающей программой. Буфер Buffer также должен быть выделен вызывающей программой и иметь достаточный размер (для его определения необходимо предварительно вызвать функцию 2).
Возвращенный список карточных операций может быть использован внешней программой при построении пользовательского интерфейса (меню, диалоговых окон и т.д.). Номер функции позволяет приблизительно определить ее содержание (см. раздел «Классы функций») и расположить ее в соответствующей ветви меню. Кроме того, дополнительная информация о содержании операции может быть получена из поля Options. В нем могут быть установлены следующие биты:


O_DEBIT

Операция предполагает списание средств с карты (счета) клиента

O_CREDIT

Операция предполагает зачисление средств на карту (счет) клиента

O_TRANSFER

Операция предполагает перемещение средств в пределах карты (карточных счетов) клиента

O_CASH

Операция предполагает выдачу наличных денежных средств из кассы или внесение их в кассу

O_SERVICE

Операция является сервисной; она не влияет на финансовое состояние карты (счета), но может влиять на административное состояние (блокировка, разблокировка, смена ПИНа и т.д.)

O_INFO

Операция является только информационной и не влияет на финансовое или административное состояние карты

O_BANKTERM

Операция разрешена на банковском терминале

O_TRADETERM

Операция разрешена на торговом терминале

O_SPECIAL

Специальная операция, предназаначенная для использовании в ПО, в котором специально реализована поддержка такой операции.

Такой подход исключает необходимость модификации внешней программы при появлении новых карточных операций.


Если не удается динамически формировать пользовательский интерфейс на основе списка операций, то интерфейс может формироваться статически. При этом банковское ПО должно предоставлять пользователю доступ ко всем функциям с флагом O_BANKTERM. Торговое ПО должно предоставлять доступ как минимум к функциям со следующими номерами: 1000, 1002, 3002, 4000, 4002, 6000.

Функция 4

Входные параметры: Нет


Выходные параметры:
typedef struct tag_struct_out4{

DWORD Size; //размер образа документа в байтах

} struct_out4;
Функция 4 должна вызываться внешней программой всякий раз, когда при завершении функции ненулевого класса библиотека в поле Flags устанавливает флаг F_HAVE_DOCUMENT. В этом случае с помощью функции 4 внешняя программа получает размер памяти, который необходимо выделить для получения образа печатаемого документа (см. функцию 5).

Функция 5

Входные параметры: Нет


Выходные параметры:
typedef struct tag_struct_out5{

void *Buffer; //буфер, в который помещается образ документа

} struct_out5;
Получив с помощью функции 4 размер памяти, требуемый для получения образа документа, внешняя программа должна выделить буфер указанного размера и передать указатель на него в структуре struct_out5. После завершения функции 5 в буфере будет содержаться текстовая строка в кодировке 1251, содержащая образ документа, который следует вывести на печать. При выводе на печать необходимо использовать шрифт с фиксированной шириной символов.
Внешняя программа должна обеспечить вывод указанного документа на печать. При обнаружении ошибки печати она должна инициировать повторную печать после устранения ошибки.
В случае, если в поле Flags был установлен бит F_CRITICAL, внешняя программа должна выдать запрос пользователю «Документ напечатан успешно?» и при отрицательном ответе повторить печать.
После успешного окончания печати внешняя программа может освободить выделенный буфер.

Функция 6

Входные параметры: Нет


Выходные параметры:
typedef struct tag_struct_out6{

DWORD Count; //число используемых валют/терминалов

} struct_out6;
С помощью функции 6 внешняя программа может узнать количество терминалов (валют), поддерживаемых библиотекой. Это необходимо для последующего получения списка поддерживаемых терминалов (валют) (см. функцию 7). Терминал заводится для каждого получателя платежа. Каждый терминал может поддерживать несколько типов валюты. При расчете значения Count каждый терминал учитывается столько раз, сколько валют поддерживает. Поддерживаемые терминалы/валюты используются для операций по картам с магнитной полосой. Для карт СБЕРКАРТ операции всегда проводятся в рублях, а получатель определяется вставленной в ридер ПИН­–клавиатуры терминальной картой.

Функция 7

Входные параметры: Нет


Выходные параметры:
typedef struct tag_struct_out7{

CurrDesc *Buffer; //Буфер, заполняемый структурами CurrDescr

} struct_out7;
typedef struct tagCurrDesc{

DWORD Currency; //Код валюты: 810 – рубли, 840 – доллары США

char Name[4]; //Сокращенное название валюты, напр. «Руб», «USD»

char FullName[64]; //Название терминала

} CurrDesc;
При вызове функции 7 структура struct_out7 должна быть инициализирована вызывающей программой. Буфер Buffer также должен быть выделен вызывающей программой и иметь достаточный размер (для его определения необходимо предварительно вызвать функцию 6).
Возвращенный список поддерживаемых терминалов/валют может быть использован внешней программой при построении пользовательского интерфейса (меню, диалоговых окон и т.д.), отчетов и т.д.

Функция 8

Входные параметры:


typedef struct tag_struct_in8{

void *Settings; //Указатель на буфер с настроечными параметрами

} struct_in8;
Выходные параметры: Нет

Данная функция позволяет вызывающей программе выполнить настройку пользовательского интерфейса. Формат передаваемых данных зависит от типа пользовательского интерфейса. Память для буфера выделяет вызывающая программа.




Функция 9

Входные параметры:


typedef struct tag_struct_in9{

char UserName[MAX_OPER_NAME+1]; // имя пользователя

} struct_in9;
Выходные параметры: Нет
Функция устанавливает имя пользователя, которое будет печататься на чеках. Если функция не будет вызвана в качестве имени пользователя будет использоваться “SYSTEM”.

Функция 10

Входные параметры: Нет


Выходные параметры: Нет
Функция вызывает меню тех. обслуживания.

Класс 1 — финансовые операции по СБЕРКАРТ

Входные параметры:


typedef struct tag_struct_in_cl1{

DWORD Amount; //сумма операции; если 0 - запрашивается библиотекой

} struct_in_cl1;
Функции данного класса могут принимать дополнительные параметры. Для передачи дополнительных параметров полю in_arg.Reserved нужно присвоить указатель на структуру
typedef struct tag_struct_in_reserved1{

DWORD size; //Размер структуры.

void *Reserved1; //=NULL

DWORD Rand; //Случайное число для сертификата

WORD ColNum; //Номер колонки при оплате ГСМ

TPassportData PassportData;//Паспортные данные, введенные в вызывающей

//программе

} struct_in_reserved1;


struct TPassportData{

char sFIO[58]; //ФИО

char sAddr[58]; //Адрес

short sRes; //Резидент/нерезидент

char sDocType[21];//Тип документа

char sSer[11]; //Серия

char sNum[16]; //Номер

char sIssuer[58]; //Кем выдан

char sWhen[13]; //Когда выдан

char sValid[13]; //Срок действия

char sEmit[42]; //Банк – эмитент карты

char Agent[42]; //Банк, выдавший карту

};
Выходные параметры:
Typedef struct tag_struct_out_cl1{

DWORD AmountClear; //сумма операции без комиссии/скидки

DWORD Amount; // сумма операции с учетом комиссии

char TrxDate[MAX_DATE+1];// дата операции (ДД.ММ.ГГГГ)

char TrxTime[MAX_TIME+1];// время операции (ЧЧ:ММ:СС)

char MerchantCard[MAX_CARD_NUM+1]; // номер карты терминала

char MerchantName[MAX_NAME+1]; // название карты терминала

char MerchantCert[MAX_CERT+1]; // терминальный сертификат транзакции

WORD MerchantTSN; // номер транзакции в пакете терминала

WORD MerchantBatchNum; // номер пакета терминала

char MerchantBatchDate[MAX_DATE+1];// дата пакета терминала (ДД.ММ.ГГГГ)

char ClientCard[MAX_CARD_NUM+1]; // номер карты клиента

char ClientBranch[MAX_BRANCH_NUM+1]; // код банка клиента

char ClientAccount[MAX_ACCOUNT_NUM+1];// номер счета клиента

char ClientName[MAX_NAME+1]; // фамилия клиента

char ClientCert[MAX_CERT+1]; // клиентский сертификат транзакции

WORD ClientTSN; // номер транзакции по клиентской карте

char ClientExpiryDate[MAX_DATE+1];// срок действия карты клиента

} struct_out_cl1;
Функции данного класса могут возвращать в качестве дополнительного параметра сертификат операции. Для получения дополнительных параметров полю out_arg.Reserved нужно присвоить указатель на структуру
typedef struct tag_struct_out_reserved1{

DWORD size; //размер структуры

void *Reserved1; //= NULL

BYTE Cert[128]; //сертификат

WORD PurchCode; //Код завершения операции

DWORD PurchTrace; //Трассировка завершения операции

TPassportData PassportData;//Паспортные данные

} struct_out_reserved1;


В текущей версии формирование сертификатов по СБЕРКАРТ не поддерживается, и поле Cert всегда заполняется нулями.
Реализованы следующие функции класса 1:


Функция

Описание

Флаги содержания операции

1000

Оплата покупки

O_DEBIT | O_TRADETERM

1001

Выдача наличных

O_DEBIT | O_CASH | O_BANKTERM

1002

Возврат покупки

O_CREDIT| O_TRADETERM

1003

Оплата ГСМ

O_DEBIT | O_TRADETERM

1004

Проверка наличия суммы на карте

0


Класс 2 — информационные операции по СБЕРКАРТ

Входные параметры:


typedef struct tag_struct_in_cl2{

}struct_in_cl2;


Выходные параметры:
typedef struct tag_struct_out_cl2{

char TrxDate[MAX_DATE+1];// дата операции (ДД.ММ.ГГГГ)

char TrxTime[MAX_TIME+1];// время операции (ЧЧ:ММ:СС)

char ClientCard[MAX_CARD_NUM+1]; // номер карты клиента

char ClientBranch[MAX_BRANCH_NUM+1]; // код банка клиента

char ClientAccount[MAX_ACCOUNT_NUM+1];// номер счета клиента

char ClientName[MAX_NAME+1]; // фамилия клиента

char ClientCert[MAX_CERT+1]; // клиентский сертификат транзакции

char ServerCert[MAX_CERT+1]; // серверный сертификат транзакции

WORD ClientTSN; // номер транзакции по клиентской карте

char ClientExpiryDate [MAX_DATE+1];// срок действия карты клиента

} struct_out_cl2;


Реализованы следующие функции класса 2.


Функция

Описание

Флаги содержания операции

2000

Получение справки о карте клиента

O_INFO | O_TRADETERM | O_BANKTERM

2001

Получение справки об операциях клиента

O_INFO | O_TRADETERM | O_BANKTERM

2002

Перевод ЗСК –> ОТСК

O_TRANSFER | O_TRADETERM | O_BANKTERM

2003

Изменение ПИНа

O_SERVICE | O_TRADETERM | O_BANKTERM

2004

Загрузка неотраженных средств

O_TRANSFER | O_TRADETERM | O_BANKTERM

2005

Проверка счета

O_INFO | O_TRADETERM | O_BANKTERM

2006

Авторизация

O_SERVICE | O_TRADETERM | O_BANKTERM

2007

Получить номер карты

O_SPECIAL

Функции данного класса могут возвращать дополнительные параметры. Для получения дополнительных параметров полю out_arg.Reserved нужно присвоить указатель на структуру


typedef struct tag_struct_out_reserved1{

DWORD size; //размер структуры

void *Reserved1; //= NULL

DWORD SCABefore; //Закрытый остаток до операции

DWORD HSSSBefore; //Открытый остаток до операции

DWORD SCAAfter; //Закрытый остаток после операции

DWORD HSSSAfter; //Открытый остаток после операции

} struct_out_reserved1;



Класс 3 — служебные операции по СБЕРКАРТ

Входные параметры:


typedef struct tag_struct_in_cl3{

} struct_in_cl3;


Выходные параметры:
typedef struct tag_struct_out_cl3{

char TrxDate[MAX_DATE+1]; // дата операции (ДД.ММ.ГГГГ)

char TrxTime[MAX_TIME+1]; // время операции (ЧЧ:ММ:СС)

char MerchantCard[MAX_CARD_NUM+1]; // номер карты терминала

char MerchantName[MAX_NAME+1]; // название карты терминала

char MerchantCert[MAX_CERT+1]; // терминальный сертификат транзакции

WORD MerchantBatchNum; // номер пакета терминала

char MerchantBatchDate[MAX_DATE+1];// дата пакета терминала (ДД.ММ.ГГГГ)

DWORD BatchAmount; // сумма пакета

WORD BatchTrx // число операций в пакете

char ServerCert[MAX_CERT+1]; // серверный сертификат транзакции

} struct_out_cl3;


Реализованы следующие функции класса 3:


Функция

Описание

Флаги содержания операции

3000

Получение справки о карте терминала

O_TRADETERM | O_BANKTERM

3001

Инкассация карты терминала до закрытия дня

O_TRADETERM | O_BANKTERM

3002

Закрытие дня по СБЕРКАРТ

O_TRADETERM | O_BANKTERM


Класс 4 — финансовые операции по картам с магнитной полосой

Входные параметры:


typedef struct tag_struct_in_cl4{

DWORD Amount; //сумма операции, если 0 - запрашивается библиотекой

char Track2[41];//2-я дорожка карты, если пустая - считывается библиотекой

BYTE CardType; //тип карты

} struct_in_cl4;
Внимание! Когда это возможно, следует использовать считывание карты библиотекой.
По умолчанию заданы определены следующие возможные значения параметра CardType:

0 – выбор типа осуществляется из меню оператором,

1 – Visa,

2 ­­– Eurocard /Mastercard,

3 – Cirrus/Maestro­­­,

101 – международные карты с микропроцессором.

Могут быть определены дополнительные типы карт.
Функции данного класса могут принимать дополнительные параметры. Для передачи дополнительных параметров полю in_arg.Reserved нужно присвоить указатель на структуру
typedef struct tag_struct_in_reserved4{

DWORD size; //Размер структуры.

void *Reserved1; //=NULL

char RRN[MAX_RRN+1];//RRN для операции 4012

DWORD Rand; //Случайное число для сертификата (0<=Rand<100000)

DWORD Currency; //Порядковый номер терминала в структуре,

//возвращаемой функцией 7, либо код валюты,

//если 0 – запрашивается библиотекой

char RecvCard[MAX_PAN+1]; //Номер карты получателя

char Hash[24+1];//Не используется

TPassportData PassportData;//Паспортные данные, введенные в вызывающей

//программе

char AuthCode[MAX_AUTH_CODE+1];//Код авторизации для операции ввода слипа

//по Amex

char RecvValidDate[MAX_CARD_DATE+1];//Срок действия карты получателя

DWORD Department; //Номер отдела (0xffffffff - выбор из меню)

char PaymentTag[MAX_PAYMENT_TAG+1]; // имя платежного реквизита (WAY4)

char TagValue [MAX_PAYMENT_VALUE+1]; // значение платежного реквизита (WAY4)

} struct_in_reserved4;
struct TPassportData{

char sFIO[58]; //ФИО

char sAddr[58]; //Адрес

short sRes; //Резидент/нерезидент

char sDocType[21];//Тип документа

char sSer[11]; //Серия

char sNum[16]; //Номер

char sIssuer[58]; //Кем выдан

char sWhen[13]; //Когда выдан

char sValid[13]; //Срок действия

char sEmit[42]; //Банк – эмитент карты

char Agent[42]; //Банк, выдавший карту

};
Выходные параметры:
typedef struct tag_struct_out_cl4{

DWORD AmountClear; // сумма операции без учета комиссии / скидки

DWORD Amount; // сумма операции с учетом комиссии / скидки

char CardName[MAX_NAME+1]; // название карты (Visa, Maestro и т.д.)

BYTE CardType; // тип карты

char TrxDate[MAX_DATE+1]; // дата операции (ДД.ММ.ГГГГ)

char TrxTime[MAX_TIME+1]; // время операции (ЧЧ:ММ:СС)

char TermNum[MAX_TERM+1]; // номер терминала

char MerchNum[MAX_MERCHANT+1]; // номер мерчанта

char AuthCode[MAX_AUTH_CODE+1]; // код авторизации

char RRN[MAX_RRN+1]; //номер ссылки

WORD MerchantTSN; // номер транзакции в пакете терминала

WORD MerchantBatchNum; // номер пакета терминала по магн.картам

char ClientCard[MAX_CARD_NUM+1]; // номер карты клиента

char ClientExpiryDate[MAX_DATE+1]; // срок действия карты клиента

} struct_out_cl4;


Функции данного класса могут возвращать дополнительные параметры. Для получения дополнительных параметров полю out_arg.Reserved нужно присвоить указатель на структуру
typedef struct tag_struct_out_reserved4{

DWORD size; //размер структуры

void *Reserved1; //= NULL

BYTE Cert[128]; //сертификат

TpassportData PassportData; //паспортные данные

BYTE IsOwn;//0 – карта чужого банка, в противном случае ­– Сбербанка

DWORD Currency;//код валюты, в которой совершена операция

} struct_out_reserved4;


Реализованы следующие функции класса 4.


Функция

Описание

Флаги содержания операции

4000

Оплата покупки

O_DEBIT | O_TRADETERM

4001

Выдача наличных

O_DEBIT | O_CASH | O_BANKTERM

4002

Возврат покупки

O_CREDIT | O_TRADETERM

4003

Отмена операции

O_CREDIT | O_TRADETERM | O_BANKTERM

4004

Безналичный перевод при наличии карты клиента

O_DEBIT | O_BANKTERM

4005

Безналичный перевод при отсутствии карты клиента

O_DEBIT | O_BANKTERM

4006

Ввод слипа по картам Amex

O_DEBIT |O_TRADETERM

4007

Слип оплаты

O_DEBIT |O_TRADETERM

4008

Слип выдачи наличных

O_DEBIT |O_BANKTERM

4009

Предавторизация

O_DEBIT |O_TRADETERM

4010

Завершение расчета

O_DEBIT |O_TRADETERM

4011

Взнос наличных (предварительное зачисление)

O_CREDIT |O_BANKTERM

4012

Взнос наличных (подтверждение)

O_CREDIT |O_BANKTERM

4013

Погашение кредита

O_DEBIT | O_BANKTERM

4014

Перевод с карты на карту

O_DEBIT | O_BANKTERM

4015

Коммунальный платеж

O_DEBIT | O_BANKTERM

4016

Арест средств

O_DEBIT | O_BANKTERM

4017

Списание по аресту

O_DEBIT | O_BANKTERM

4018

Снятие ареста

O_CREDIT | O_BANKTERM

4019

Выдача наличных без карты

O_DEBIT | O_BANKTERM

4020

Списание по требованию

O_DEBIT | O_BANKTERM

4021

Создание ПИН-кода

O_BANKTERM

4022

Смена ПИН-кода

O_BANKTERM


Класс 5 — информационные операции по картам с магнитной полосой

Входные параметры:


typedef struct tag_struct_in_cl5{

char Track2[41];//2-я дорожка карты, если пустая - считывается библиотекой

BYTE CardType; //тип карты

} struct_in_cl5;


Внимание! Когда это возможно, следует использовать считывание карты библиотекой.
Параметр CardType такой же, как для класса 4.
Выходные параметры:
typedef struct tag_struct_out_cl5{

char CardName[MAX_NAME+1]; // название карты

BYTE CardType; // тип карты

char TrxDate[MAX_DATE+1]; // дата операции (ДД.ММ.ГГГГ)

char TrxTime[MAX_TIME+1]; // время операции (ЧЧ:ММ:СС)

char TermNum[MAX_TERM+1]; // номер терминала

char ClientCard[MAX_CARD_NUM+1]; // номер карты клиента

char ClientExpiryDate [MAX_DATE+1];// срок действия карты клиента

} struct_out_cl5;
Функции данного класса могут возвращать дополнительные параметры. Для получения дополнительных параметров полю out_arg.Reserved нужно присвоить указатель на структуру
typedef struct tag_struct_out_reserved5{

DWORD size; //Размер структуры

void *Reserved1; //NULL

BYTE Hash[MAX_HASH];//Хэш­–значение номера карты

BYTE CardData[MAX_TRACK2];// Данные карты для функции 5002

} struct_out_reserved5;


Хэш–значение номера карты заполняется только при вызове функции 5002.
Реализованы следующие функции класса 5.


Функция

Описание

Флаги содержания операции

5000

Запрос баланса

O_INFO | O_BANKTERM

5001

Разблокировка международных карт с чипом

O_SERVICE | O_BANKTERM

5002

Получение идентификатора карты

O_SPECIAL

5003

Блокировка карты

O_SERVICE | O_BANKTERM



Класс 6 — cлужебные операции по картам с магнитной полосой

Входные параметры:


typedef struct tag_struct_in_cl6{

DWORD Currency; //Порядковый номер терминала в структуре,

//возвращаемой функцией 7, либо код валюты,

//если 0 – запрашивается библиотекой

} struct_in_cl6;
Функции данного класса могут принимать дополнительные параметры. Для передачи дополнительных параметров полю in_arg.Reserved нужно присвоить указатель на структуру
typedef struct tag_struct_in_reserved6{

DWORD size; //Размер структуры.

void *Reserved1; //=NULL

char CashierCard[MAX_TRACK2+1]; //карта кассира

WORD MerchantTSN; // номер транзакции в пакете терминала

WORD MerchantBatchNum; // номер пакета терминала по магн.картам

} struct_in_reserved6;
Параметр CashierCard задает карту кассира, используемую для подтверждения операций взноса наличных. Если такие операции на терминале не проводятся, карта кассира не будет нужна.
Параметры используются для идентификации подтверждаемой транзакции при вызове функции 6001.
Выходные параметры:
typedef struct tag_struct_out_cl6{

char TrxDate[MAX_DATE+1]; //дата операции (ДД.ММ.ГГГГ)

char TrxTime[MAX_TIME+1]; //время операции (ЧЧ:ММ:СС)

char TermNum[MAX_TERM+1]; //номер терминала

char MerchNum[MAX_MERCHANT+1]; //номер мерчанта

WORD MerchantBatchNum; //номер пакета терминала по магн.картам

DWORD DebitNumber; // число операций выдачи наличных/оплаты покупки

DWORD DebitTotal; // сумма операций выдачи наличных/оплаты покупки

DWORD DebitClearTotal; // сумма операций выдачи наличных/оплаты покупки

// без учета комиссии/скидки

WORD ReturnNumber; //число операций возврата/безналичного перевода

DWORD ReturnTotal; //сумма кредитовых операций

DWORD ReturnClearTotal;//сумма кредитовых операций без учета комиссии

} struct_out_cl6;


Реализованы следующие функции класса 6.


Функция

Описание

Флаги содержания операции

6000

Итоги дня по картам с магнитной полосой

O_TRADETERM | O_BANKTERM

6001

Подтверждение операции по картам с магнитной полосой

O_TRADETERM | O_BANKTERM


Класс 7 — общие служебные операции

Входные параметры:


typedef struct tag_struct_in_cl7{

} struct_in_cl7;


Выходные параметры:
typedef struct tag_struct_out_cl7{

} struct_out_cl7;

Реализованы следующие функции класса 7.


Функция

Описание

Флаги содержания операции

7000

Формирование текущего отчета по всем типам карт

O_TRADETERM | O_BANKTERM

7001

Повторное формирование последнего чека

O_TRADETERM | O_BANKTERM

7002

Печать старой контрольной ленты из резервной копии

O_TRADETERM | O_BANKTERM



Типы и константы

При описании интерфейса используются следующие типы данных и константы:


typedef unsigned char BYTE;

typedef unsigned short WORD;

typedef unsigned long DWORD;
#define MAX_CARD_NUM 30

#define MAX_ACCOUNT_NUM 11

#define MAX_BRANCH_NUM 11

#define MAX_CERT 16

#define MAX_NAME 38

#define MAX_DATE 10

#define MAX_TIME 8

#define MAX_AUTH_CODE 6

#define MAX_TERM 8

#define MAX_MERCHANT 15

#define MAX_RRN 12

#define MAX_OPER_NAME 64

#define MAX_HASH 20
Поле Options в описании карточной операции (структура EnumStruct) может иметь следующие установленные биты:
#define O_DEBIT 0x00000001

#define O_CREDIT 0x00000002

#define O_CASH 0x00000004

#define O_TRANSFER 0x00000008

#define O_SERVICE 0x00000010

#define O_INFO 0x00000020

#define O_BANKTERM 0x00000040

#define O_TRADETERM 0x00000080

#define O_SPECIAL 0x00000100

Поле Flags при завершении функции ненулевого класса может иметь следующие установленные биты:


#define F_HAVE_DOCUMENT 0x00000001

#define F_CRITICAL 0x00000002



Коды ошибок


Ниже приведены описания некоторых кодов ошибок.
#define ERR_OK 0 //Операция выполнена

#define ERR_INCORRECT_VERSION 1 //Затребована неверая версия

#define ERR_NOT_INITIALISED 2 //Библиотека не инициализирована

#define ERR_LOAD 101//Ошибка при загрузке библиотеки

#define ERR_NO_FUNC 102//Неверный номер функции

#define ERR_NO_DOCUMENT 703//Нет документа для печати

#define ERR_INVALID_CTYPE 706//Неверный тип карты

#define ERR_INVALID_TRACK 707//Неверная дорожка карты



#define ERR_INTEGRITY 711//Нарушена целостность библиотеки

1 См. Классы функций





Когда человек приходит в гости, он тратит время хозяев, а не свое. Оскар Уайльд
ещё >>