Zanim zrobiłem implementację w programie obsługi terminala na bieżąco bawiłem się w prostym unicie testującym. Oto jego zawartość, powinna ci zdecydowanie pomóc:
Acha, robiłem to dość dawno temu i to w Delphi 6!
unit Unit1;
interface
uses
Windows, Controls, StdCtrls, Messages, SysUtils, Variants, Classes, Graphics, Forms, Dialogs, ComCtrls, Unit2;
// Stałe
const
PB_BUFFER_TID_SIZE = 9; // długość bufora danych na identyfikator TID
PB_BUFFER_COUPON_SIZE = 33; // długość bufora danych na identyfikator COUPON (decrypted)
PB_NO_OPER_CODE = -1; // identyfikator określający brak wyboru konkretnego operatora aplikacji płatniczej
PB_NO_PARAMETER = -1; // identyfikator określający nieistotność przekazywanego parametru
type
PInt = ^Integer;
PB_PAYAPP_TRXTYPE = (PB_PT_SELL = 1, PB_PT_REVERSAL = 2, PB_PT_REFUND = 3, PB_PT_CASH = 4, PB_PT_PREAUTH = 5,
PB_PT_PREAUTH_COMPLETION = 6, PB_PT_SELL_CB = 8, PB_PT_READ_CARD_DATA = 60, PB_PT_EOD_REPORT = 70, PB_PT_TRX_REPORT = 71);
PB_FN_RES = // Typ wyliczeniowy rezultatu wywołania każdej z funkcji API
(PB_FR_OK = 0, // funkcja wykonana prawidłowo
PB_FR_TIMEOUT = 1, // nastąpił timeout wywołania
PB_FR_POS_BROKEN_DATA = 2, // nieprawidłowe dane odesłane przzez terminal POS
PB_FR_POS_BINDED = 3, // terminal wywłaszczony przez innego hosta
PB_FR_INCORRECT_PARAMS = 4, // nieprawidłowe parametruy przekazane do funkcji
PB_FR_RESOURCES_ERROR = 8, // błąd dostępu do zasobów systemowych
PB_FR_ERROR = 9, // ogólny błąd wywołania
PB_FR_NOINIT = 10); // biblioteka niezainicjowana
PB_PAYMENT_METHOD = // Typ wyliczeniowy dopuszczalnych sposobów płatności
(PB_PM_CASH = $01, // płatność gotówką
PB_PM_CARD = $02, // płatnośc kartą
PB_PM_CASH_OR_CARD = $03); // płatność karta lub gotówką
PB_APPTRX_FLAGS = // typ wyliczeniowy dodakowych flag określających sposób realizacji transakcji
(PB_TF_DEAFULT = $8000, // wartośc domyśla (zabronienie modyfikowania wartości na terminalu)
PB_TF_NONE = $0, // zgaszone wszytkie flagi
PB_TF_CONTACLESS_CARD_REQUEST = $1, // żadanie wykonania transakcji kartą bezstykową (tylko transakcje płatnicze)
PB_TF_EMV_ADDITIONAL_DATA = $2, // żadanie dodatkowych danych transakcji EMV (tylko transakcje płatnicze)
PB_TF_AMOUNT_EDIT_DISABLE = $8000, // zabronienie modyfikowania wartości na terminalu POS
PB_TF_EV_HOLD_PRINTING = $4, // wstrzymanie wydruku kuponu (tylko eVoucher)
PB_TF_EV_RETURN_CODE = $8, // zwrócenie kodu doładowującego do systemu kasowego (tylko eVoucher)
PB_TF_SILENT_MODE = $10, // tryb "cichy" wywołanie z tą flagą zwraca parametry bez uruchamiania drukarki i/lub wyświetlacza
PB_TF_GET_DATA_BEFORE_PRINT = $20, // Żądanie przesłania danych kończących transakcję przez rozpoczęciem wykonywania wydruków (o ile jest to możliwe tylko PLA).
PB_TF_COMPATIBILITY_MODE = $4000); // tryb kompatybilności wstecznej (tylko GiftCard)
PB_POS_APPS = // Typ wyliczeniowy typów obsługiwanych aplikacji na terminalu POS
(PB_PA_PAYOPT = 1, // aplikacja płatnicza
PB_PA_UTAOPT = 2, // aplikacja lojalnościowa
PB_PA_EVOPT = 4, // aplikcaja evoucher
PB_PA_BILLOPT = 5, // aplikacja transkasa
PB_PA_DEVSRV = 6, // aplikacja serwera urządzeń
PB_PA_LOYOPT = 7, // aplikacja lojalnościowa
PB_PA_BILLBB = 8, // aplikacja moje rachunki
PB_PA_COUPAPP = 9, // aplikacja kupony
PB_PA_GIFTAPP = 10); // aplikacja podarunkowa
PB_TRX_STATUS = // typ wyliczeniowy statusow transakcji
(PB_TS_OK = $00, // trx przyjęta
PB_TS_OK_WAIT_FOR_CONFIRM = $01, // trx przyjęta - oczekiwanie na potwierdzenie
PB_TS_OK_WAIT_FOR_OPERATOR_DECISION = $02, // trx w trakcie - oczekiwanie na decyzję kasjera
PB_TS_OK_REPORT_DATA = $03, // trx w trakcie - pobieranie danych raportu
PB_TS_REJECTED_BY_HOST = $10, // trx odrzucona przez hosta
PB_TS_REJECTED_INCORRECT_DATA = $11, // trx odrzucona w wyniku nieprawidłowych danych
PB_TS_REJECTED_UNSPECIFIED_REASON = $12, // trx odrzucona z innego powodu
PB_TS_REJECTED_LAST_TRX_UNAPPROVED = $13, // trx odrzucona, ostatnia transakcja nie została zakończona
PB_TS_REJECTED_CB_UNSUPPORTED = $14, // trx odrzucona - cash-back nieobsługiwany
PB_TS_REJECTED_INSUFFICIENT_PARAMS = $15, // trx odrzucona - niewystarczająca ilość parametrów
PB_TS_REJECTED_INCORRECT_PAYMENT_TYPE = $16, // trx odrzucona - nieprawidłowy typ płatności
PB_TS_REJECTED_UNSUCCESFUL_PAYMENT = $17, // trx odrzucona - zapłata za rachunki nie powiodła się
PB_TS_UNSUFFIFCIENT_FUNDS = $18, // trx odrzucona - niewystarczające środki
PB_TS_CARD_EXPIRED = $19, // trx odrzucona - karta nieważna (przeterminowana)
PB_TS_CARD_ERROR = $20, // błąd karty
PB_TS_PIN_UNAUTHORIZED = $21, // błąd autoryzacji kodu PIN
PB_TS_CARD_UNSUPPORTED = $22, // karta nieobsługiwana
PB_TS_NO_PAPER_IN_PRINTER = $23, // brak papieru w drukarce
PB_TS_SESSION_KEY_HAS_NOT_SET = $24, // błąd - nieustalony klucz sesji kryptograficznej
PB_TS_INTERNAL_OPERATION_ERROR = $25, // błąd – problem z wykonaniem operacji wewnętrznej
PB_TS_CANCELLED_BY_USER = $40, // operacja przerwana przez użytkownika
PB_TS_TIMEOUT = $41, // timeout operacji
PB_TS_EOD_REPORT_DOES_NOT_FETCHED = $42, // raport zamknięcia dnia nie został pobrany
PB_TS_FUNCTION_NOT_SUPPORTED = $43, // nieobsługiwana funkcja
PB_TS_UNDEFINIED = $80, // trx odrzucona - nierozpoznany kod błędu
PB_TS_GENERAL_ERROR = $81); // trx odrzucona - błąd ogólny
PB_PAYAPP_CARD_HOLDER_AUTH_METHOD = // Sposób autoryzacji posiadacza karty
(PB_CHAM_NOT_AUTHENTICATED = 0, // brak autoryzacji
PB_CHAM_PIN = 1, // PIN
PB_CHAM_MANUAL_SIGNATURE = 5); // podpis
PB_PAYAPP_CARD_DATA_INPUT_METHOD = // Rodzaj użytej karty
(PB_CDIM_MAGNETIC_STRIPE = 2, // karta z paskiem magnetycznym
PB_CDIM_ICC = 5, // karta procesorowa
PB_CDIM_MANUAL_ENTRY = 6, // ręczne wprowadzenie
PB_CDIM_CONTACTLESS_ICC = 7, // bezstykowa karta procesorowa
PB_CDIM_CONTACTLESS_MAG_STRIPE = 8); // bezstykowa karta typu magstripe (zawierająca tylko obraz paska magnetycznego)
PB_PAYAPP_CARD_HOLDER_AUTH_ENTITY = // Podmiot realizujący autoryzację posiadacza karty
(PB_CHAE_NOT_AUTHENTICATED = 0, // brak autoryzacji
PB_CHAE_ICC = 1, // karta procesorowa
PB_CHAE_AUTHORISING_AGENT = 3, // wystawca karty (bank)
PB_CHAE_MERCHANT = 4, // sprzedawca
PB_CHAE_OTHER = 5); // inny
PB_PAYAPP_AUTH_MODE = // Tryb przetwarzania transakcji
(PB_AM_ONLINE = 1, // połączeniowy (online)
PB_AM_OFFLINE = 3, // bezpołączeniowy (offline)
PB_AM_REFERRAL = 4); // autoryzacja głosowa (referral)
PB_LOYAPP_TRXTYPE = (PB_LT_ADD_POINTS = 1, PB_LT_CORRECTION = 2, PB_LT_PRIZE_DELIVERY = 3, PB_LT_POINTS_TRANSFER = 4);
// Struktura pojedyńczej wartości dodatkowych danych transakcji (EMV)
PB_PAYAPP_ADDITIONAL_DATA = record
tag: Word;
length: Integer;
value: PBYTE;
end;
// Struktura danych dodatkowych dla transakcji DCC
PB_PAYAPP_DCC_DATA = record
is_dcc_transaction: Boolean;
currency_amount: Integer;
decimal_digits: Integer;
currency_code: array[0..3] of WideChar;
currency_rate: Single;
fee_description: array[0..20] of WideChar;
decision_timeout: Integer;
decision_id: Integer;
end;
// Struktura danych szczegółów przyjętej transakcji płatniczej
PB_PAYAPP_TRXEND = record
trx_type: PB_PAYAPP_TRXTYPE;
amount: Integer;
STAN: Integer;
authorization_code: array[0..12] of WideChar;
operator_code: Integer;
tid: array[0..PB_BUFFER_TID_SIZE - 1] of WideChar;
trx_datetime: SYSTEMTIME;
masked_pan_number: array[0..19] of WideChar;
amount_cb: Integer;
card_name: array[0..32] of WideChar;
card_holder_auth_method: PB_PAYAPP_CARD_HOLDER_AUTH_METHOD;
card_holder_input_method: PB_PAYAPP_CARD_DATA_INPUT_METHOD;
card_holder_auth_entity: PB_PAYAPP_CARD_HOLDER_AUTH_ENTITY;
auth_mode: PB_PAYAPP_AUTH_MODE;
additional_data_count: Integer;
additional_data: PB_PAYAPP_ADDITIONAL_DATA;
dcc_data: PB_PAYAPP_DCC_DATA;
end;
{/// Struktura danych pobranych z karty lojalnościowej }
PB_LOYAPP_CARDDATA = record
STAN: Integer;
operator_code: Integer;
tid: array[0..PB_BUFFER_TID_SIZE - 1] of WideChar;
trx_datetime: SYSTEMTIME;
points_qty: Integer;
expiration_date: SYSTEMTIME;
client_group: Integer;
second_track: array[0..38 - 1] of WideChar;
end;
{/// Struktura danych szczegółów przyjętej transakcji lojalnościowej }
PB_LOYAPP_TRXEND = record
trx_type: PB_LOYAPP_TRXTYPE;
amount: Integer;
STAN: Integer;
operator_code: Integer;
tid: array[0..PB_BUFFER_TID_SIZE - 1] of WideChar;
trx_datetime: SYSTEMTIME;
points_before_trx: Integer;
points_before_trx_2: Integer;
points_qty: Integer;
second_track: array[0..38 - 1] of WideChar;
end;
TPB_PAYAPP_TRXEND = ^PB_PAYAPP_TRXEND;
TPB_LOYAPP_TRXEND = ^PB_LOYAPP_TRXEND;
TPB_LOYAPP_CARDDATA = ^PB_LOYAPP_CARDDATA;
TPB_TRX_STATUS = ^PB_TRX_STATUS;
TForm1 = class(TForm)
btnsynchronizacja: TButton;
edtconlink: TEdit;
edtloglink: TEdit;
edttid: TEdit;
edthist: TEdit;
edttimeout: TEdit;
btninicjalizacja: TButton;
btnwersja: TButton;
btnsprzedaz: TButton;
mmo1: TMemo;
btnkopia: TButton;
btnclose: TButton;
cbbtest: TComboBox;
btntestuj: TButton;
btn1: TButton;
btnpln: TButton;
btnwaluta: TButton;
btnpodpisok: TButton;
btnpodpisfalse: TButton;
pbpasek: TProgressBar;
btnstart: TButton;
btnstop: TButton;
btnrestart: TButton;
btnsaldo: TButton;
lbl1: TLabel;
lbl2: TLabel;
btndodaj1000: TButton;
procedure btnwersjaClick(Sender: TObject);
procedure btninicjalizacjaClick(Sender: TObject);
procedure btnsynchronizacjaClick(Sender: TObject);
procedure btnsprzedazClick(Sender: TObject);
procedure btnkopiaClick(Sender: TObject);
procedure btncloseClick(Sender: TObject);
procedure btntestujClick(Sender: TObject);
procedure btn1Click(Sender: TObject);
procedure btnplnClick(Sender: TObject);
procedure btnsaldoClick(Sender: TObject);
procedure btnstartClick(Sender: TObject);
procedure btnstopClick(Sender: TObject);
procedure btnrestartClick(Sender: TObject);
procedure btndodaj1000Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
card_data: PB_LOYAPP_CARDDATA;
response_code: PB_TRX_STATUS;
function PB_GetPosBridgeVersion(MajorVersion: PInt; MinorVersion: PInt; BuildNumber: PInt; RevisionNumber: PInt):
PB_FN_RES; stdcall; external 'PosBridge.dll' name '_GetPosBridgeVersion@16';
function PB_Initialization(storage_path: PWideChar; connection_params: PWideChar; tid: PWideChar; ProccessInfoCallback:
PInt; transmission_timeout: Integer; loging_to_file: Boolean; report_data_cleaning_depth: Integer): PB_FN_RES; stdcall;
external 'PosBridge.dll' name '_Initialization@28';
function PB_Synchronize(): PB_FN_RES; stdcall; external 'PosBridge.dll' name '_Synchronize@0';
function PB_Close(): PB_FN_RES; stdcall; external 'PosBridge.dll' name '_Close@0';
function PB_PayAppPrintReceiptCopy(): PB_FN_RES; stdcall; external 'PosBridge.dll' name '_PayAppPrintReceiptCopy@0';
function PB_ConnectionTest(application: PB_POS_APPS; tid: PWideChar): PB_FN_RES; stdcall; external 'PosBridge.dll' name
'_ConnectionTest@8';
function PB_PayAppSell(ProccessInfoCallback: PInt; amount: LongInt; cb_amount: LongInt; payment_title: PWideChar; flags:
LongInt; operator_code: Integer): PB_FN_RES; stdcall; external 'PosBridge.dll' name '_PayAppSell@24';
function PB_LoyAppPrizeDelivery(ProccessInfoCallback: PInt; prize_qty: Integer; points_qty: Integer; prize_name: PWideChar;
ext_prize_id: PWideChar; track2: PWideChar; flags: Integer; operator_code: Integer): PB_FN_RES; stdcall; external 'PosBridge.dll' name
'_LoyAppPrizeDelivery@32';
function PB_LoyAppFetchCardData(card_data: TPB_LOYAPP_CARDDATA; response_code: TPB_TRX_STATUS; operation_code: Integer;
time_out: Integer): PB_FN_RES; stdcall; external 'PosBridge.dll' name '_LoyAppFetchCardData@16';
function PB_LoyAppAddPoints(ProccessInfoCallback: PInt; amount: LongInt; receipt_number: PWideChar;
points_qty: Integer; promo_points_qty: Integer; duty_amount: Integer; track2: PWideChar; flags: Integer; operator_code: Integer): PB_FN_RES; stdcall; external 'PosBridge.dll' name
'_LoyAppAddPoints@36';
implementation
{$R *.dfm}
{/// Typ wyliczeniowy rezultatu wywołania każdej z funkcji API }
function status_wywolania(err: PB_FN_RES): string;
begin
case err of
PB_FR_OK:
Result := 'PB_FR_OK - Funkcja wykonana poprawnie';
PB_FR_TIMEOUT:
Result := 'PB_FR_TIMEOUT - Nastąpił timeout wykonania operacji na terminalu POS';
PB_FR_POS_BROKEN_DATA:
Result := 'PB_FR_POS_BROKEN_DATA - Terminal POS zwrócił nieprawidłowe dane';
PB_FR_POS_BINDED:
Result := 'PB_FR_POS_BINDED - Terminal wywłaszczony przez innego hosta';
PB_FR_INCORRECT_PARAMS:
Result := 'PB_FR_INCORRECT_PARAMS - Przekazano nieprawidłowe wartości argumentów przy wywołaniu funkcji';
PB_FR_RESOURCES_ERROR:
Result :=
'PB_FR_RESOURCES_ERROR - Błąd dostępu do zasobów systemowych (dostęp do plików, dostęp do interfejsów komunikacyjnych)';
PB_FR_ERROR:
Result := 'PB_FR_ERROR - Błąd ogólny';
PB_FR_NOINIT:
Result := 'PB_FR_NOINIT - Biblioteka nie została zainicjowana';
else
Result := '? - Inny błąd - nieznany!';
end;
end;
function status_wykonania(status: PB_TRX_STATUS): string;
begin
case status of
PB_TS_OK:
Result := 'PB_TS_OK - trx przyjęta';
PB_TS_OK_WAIT_FOR_CONFIRM:
Result := 'PB_TS_OK_WAIT_FOR_CONFIRM - trx przyjęta - oczekiwanie na potwierdzenie';
PB_TS_OK_WAIT_FOR_OPERATOR_DECISION:
Result :=
'PB_TS_OK_WAIT_FOR_OPERATOR_DECISION - trx w trakcie - oczekiwanie na decyzję kasjeratrx w trakcie - oczekiwanie na decyzję kasjera';
PB_TS_OK_REPORT_DATA:
Result := 'PB_TS_OK_REPORT_DATA - trx w trakcie - pobieranie danych raportu';
PB_TS_REJECTED_BY_HOST:
Result := 'PB_TS_REJECTED_BY_HOST - trx odrzucona przez hosta';
PB_TS_REJECTED_INCORRECT_DATA:
Result := 'PB_TS_REJECTED_INCORRECT_DATA - trx odrzucona w wyniku nieprawidłowych danych';
PB_TS_REJECTED_UNSPECIFIED_REASON:
Result := 'PB_TS_REJECTED_UNSPECIFIED_REASON - trx odrzucona z innego powodu';
PB_TS_REJECTED_LAST_TRX_UNAPPROVED:
Result := 'PB_TS_REJECTED_LAST_TRX_UNAPPROVED - trx odrzucona, ostatnia transakcja nie została zakończona';
PB_TS_REJECTED_CB_UNSUPPORTED:
Result := 'PB_TS_REJECTED_CB_UNSUPPORTED - trx odrzucona - cash-back nieobsługiwany';
PB_TS_REJECTED_INSUFFICIENT_PARAMS:
Result := 'PB_TS_REJECTED_INSUFFICIENT_PARAMS - trx odrzucona - niewystarczająca ilość parametrów';
PB_TS_REJECTED_INCORRECT_PAYMENT_TYPE:
Result := 'PB_TS_REJECTED_INCORRECT_PAYMENT_TYPE - trx odrzucona - nieprawidłowy typ płatności';
PB_TS_REJECTED_UNSUCCESFUL_PAYMENT:
Result := 'PB_TS_REJECTED_UNSUCCESFUL_PAYMENT - trx odrzucona - zapłata za rachunki nie powiodła się';
PB_TS_UNSUFFIFCIENT_FUNDS:
Result := 'PB_TS_UNSUFFIFCIENT_FUNDS = trx odrzucona - niewystarczające środki';
PB_TS_CARD_EXPIRED:
Result := 'PB_TS_CARD_EXPIRED - trx odrzucona - karta nieważna (przeterminowana)';
PB_TS_CARD_ERROR:
Result := 'PB_TS_CARD_ERROR - błąd karty';
PB_TS_PIN_UNAUTHORIZED:
Result := 'PB_TS_PIN_UNAUTHORIZED - błąd autoryzacji kodu PIN';
PB_TS_CARD_UNSUPPORTED:
Result := 'PB_TS_CARD_UNSUPPORTED - karta nieobsługiwana';
PB_TS_NO_PAPER_IN_PRINTER:
Result := 'PB_TS_NO_PAPER_IN_PRINTER - brak papieru w drukarce';
PB_TS_SESSION_KEY_HAS_NOT_SET:
Result := 'PB_TS_SESSION_KEY_HAS_NOT_SET - błąd - nieustalony klucz sesji kryptograficznej';
PB_TS_INTERNAL_OPERATION_ERROR:
Result := 'PB_TS_INTERNAL_OPERATION_ERROR - błąd – problem z wykonaniem operacji wewnętrznej';
PB_TS_CANCELLED_BY_USER:
Result := 'PB_TS_CANCELLED_BY_USER - operacja przerwana przez użytkownika';
PB_TS_TIMEOUT:
Result := 'PB_TS_TIMEOUT - timeout operacji';
PB_TS_EOD_REPORT_DOES_NOT_FETCHED:
Result := 'PB_TS_EOD_REPORT_DOES_NOT_FETCHED - raport zamknięcia dnia nie został pobrany';
PB_TS_UNDEFINIED:
Result := 'PB_TS_UNDEFINIED - trx odrzucona - nierozpoznany kod błędu';
PB_TS_GENERAL_ERROR:
Result := 'PB_TS_GENERAL_ERROR - trx odrzucona - błąd ogólny ';
PB_TS_FUNCTION_NOT_SUPPORTED:
Result := 'PB_TS_FUNCTION_NOT_SUPPORTED - nieobsługiwana funkcja';
else
Result := '? - Inny błąd - nieznany!';
end;
end;
procedure PB_FnAppsProcessInfo(application: PB_POS_APPS; phase_id: UINT; phase_description: PWideChar); stdcall;
begin
Form1.mmo1.Lines.Append(IntToStr(phase_id) + ' -> ' + WideCharToString(phase_description));
end;
procedure PB_FnLoyAppTrxEnd(trx_status: PB_TRX_STATUS; trx_details: TPB_LOYAPP_TRXEND); stdcall;
begin
Form1.mmo1.Lines.Append(status_wykonania(trx_status)); // dostaje informacje o szczegolach transakcji
if Integer(trx_status) = 0 then
begin
{ Form1.mmo1.Lines.Append('------------------------');
Form1.mmo1.Lines.Append('amount = ' + IntToStr(trx_details^.amount));
Form1.mmo1.Lines.Append('STAN = ' + IntToStr(trx_details^.STAN));
Form1.mmo1.Lines.Append('operator_code = ' + inttostr(trx_details^.operator_code));
Form1.mmo1.Lines.Append('trx_datetime = ' + DateTimetoStr(SystemTimetoDateTime(trx_details^.trx_datetime)));
Form1.mmo1.Lines.Append('points_before_trx = ' + IntToStr(trx_details^.points_before_trx));
Form1.mmo1.Lines.Append('points_before_trx_2 = ' + IntToStr(trx_details^.points_before_trx_2));
Form1.mmo1.Lines.Append('points_qty = ' + IntToStr(trx_details^.points_qty));
Form1.mmo1.Lines.Append('second_track = ' + WideCharToString(trx_details^.second_track)); }
end;
end;
procedure PB_FnPayAppTrxEnd(trx_status: PB_TRX_STATUS; trx_details: TPB_PAYAPP_TRXEND); stdcall;
begin
Form1.mmo1.Lines.Append(status_wykonania(trx_status)); // dostaje informacje o szczegolach transakcji
if Integer(trx_status) = 2 then
begin
{ currency_amount: Integer;
decimal_digits: Integer;
currency_code: array[0..3] of WideChar;
currency_rate: Single;
fee_description: array[0..20] of WideChar;
decision_timeout: Integer;
-- is_dcc_transaction: Boolean;
decision_id: Integer;}
Form1.mmo1.Lines.Append('------------------------');
Form1.mmo1.Lines.Append('trx_type = ' + IntToStr(trx_details^.dcc_data.currency_amount));
Form1.mmo1.Lines.Append('decimal_digits = ' + IntToStr(trx_details^.dcc_data.decimal_digits));
Form1.mmo1.Lines.Append('currency_code = ' + WideCharToString(trx_details^.dcc_data.currency_code));
Form1.mmo1.Lines.Append('currency_rate = ' + FloatToStr(trx_details^.dcc_data.currency_rate));
Form1.mmo1.Lines.Append('fee_description = ' + WideCharToString(trx_details^.dcc_data.fee_description));
Form1.mmo1.Lines.Append('decision_timeout = ' + IntToStr(trx_details^.dcc_data.decision_timeout));
Form1.mmo1.Lines.Append('decision_id = ' + IntToStr(trx_details^.dcc_data.decision_id));
end;
end;
procedure TForm1.btnwersjaClick(Sender: TObject);
var
MajorVersion, MinorVersion, BuildNumber, RevisionNumber: Integer;
ret: PB_FN_RES;
begin
ret := PB_GetPosBridgeVersion(@MajorVersion, @MinorVersion, @BuildNumber, @RevisionNumber);
MessageBox(0, PChar(IntToStr(Integer(ret)) + '->' + IntToStr(MajorVersion) + '.' + IntToStr(MinorVersion) + '.' +
IntToStr(BuildNumber) + '.' + IntToStr(RevisionNumber)), 0, 0);
end;
procedure TForm1.btninicjalizacjaClick(Sender: TObject);
var
ret: PB_FN_RES;
begin
ret := PB_Initialization(PWideChar(WideString(edtloglink.Text)), PWideChar(WideString(edtconlink.Text)), PWideChar(WideString
(edttid.Text)), @PB_FnAppsProcessInfo, StrToInt(edttimeout.Text), True, StrToInt(edthist.Text));
mmo1.Lines.Add(status_wywolania(ret));
end;
procedure TForm1.btnsynchronizacjaClick(Sender: TObject);
var
ret: PB_FN_RES;
begin
ret := PB_Synchronize();
mmo1.Lines.Add(status_wywolania(ret));
end;
procedure TForm1.btnsprzedazClick(Sender: TObject);
var
ret: PB_FN_RES;
begin
ret := PB_PayAppSell(@PB_FnPayAppTrxEnd, 1000, 0, PWideChar(WideString('test')), 32768, -1);
mmo1.Lines.Add(status_wywolania(ret));
end;
procedure TForm1.btnkopiaClick(Sender: TObject);
var
ret: PB_FN_RES;
begin
ret := PB_PayAppPrintReceiptCopy();
mmo1.Lines.Add(status_wywolania(ret));
end;
procedure TForm1.btncloseClick(Sender: TObject);
var
ret: PB_FN_RES;
begin
ret := PB_Close();
mmo1.Lines.Add(status_wywolania(ret));
end;
procedure TForm1.btntestujClick(Sender: TObject);
var
ret: PB_FN_RES;
tid: PWideChar;
begin
tid := nil;
case cbbtest.ItemIndex of
0:
ret := PB_ConnectionTest(PB_PA_PAYOPT, tid);
1:
ret := PB_ConnectionTest(PB_PA_UTAOPT, tid);
2:
ret := PB_ConnectionTest(PB_PA_EVOPT, tid);
3:
ret := PB_ConnectionTest(PB_PA_BILLOPT, tid);
4:
ret := PB_ConnectionTest(PB_PA_DEVSRV, tid);
5:
ret := PB_ConnectionTest(PB_PA_LOYOPT, tid);
6:
ret := PB_ConnectionTest(PB_PA_BILLBB, tid);
7:
ret := PB_ConnectionTest(PB_PA_COUPAPP, tid);
8:
ret := PB_ConnectionTest(PB_PA_GIFTAPP, tid);
end;
mmo1.Lines.Add(status_wywolania(ret));
end;
procedure TForm1.btn1Click(Sender: TObject);
begin
// ShowMessage(PB_TRX_STATUS(1));
end;
procedure TForm1.btnplnClick(Sender: TObject);
begin
// mmo1.Lines.Append(@PB_FnPayAppTrxEnd);
end;
procedure TForm1.btnsaldoClick(Sender: TObject);
var
ret: PB_FN_RES;
begin
ret := PB_LoyAppFetchCardData(@card_data, @response_code, -1, 10);
if Integer(ret) = 0 then
begin
if Integer(response_code) = 0 then
begin
end;
end;
end;
procedure TForm1.btnstartClick(Sender: TObject);
begin
lbl1.Caption := WideCharToString(card_data.second_track);
end;
procedure TForm1.btnstopClick(Sender: TObject);
begin
lbl2.Caption := IntToStr(Integer(card_data.points_qty));
end;
procedure TForm1.btnrestartClick(Sender: TObject);
var
ret: PB_FN_RES;
begin
//ret := PB_PayAppSell(@PB_FnPayAppTrxEnd, 1000, 0, PWideChar(WideString('test')), 32768, -1);
ret := PB_LoyAppPrizeDelivery(@PB_FnLoyAppTrxEnd, 0, 100, nil, nil, card_data.second_track,$8010, -1);
// mmo1.Lines.Add(status_wywolania(ret));
end;
procedure TForm1.btndodaj1000Click(Sender: TObject);
var
ret: PB_FN_RES;
begin
ret := PB_LoyAppAddPoints(@PB_FnLoyAppTrxEnd, 500, PWideChar(WideString('3453456346')), 0, 0, 0, nil, $8010, -1);
// mmo1.Lines.Add(status_wywolania(ret));
end;
end.