import 'package:aman_kassa_flutter/core/locator.dart'; import 'package:aman_kassa_flutter/core/logger.dart'; import 'package:aman_kassa_flutter/core/models/halyk/halyk_close_day_dao.dart' as Cd; import 'package:aman_kassa_flutter/core/models/halyk/halyk_response_dao.dart'; import 'package:aman_kassa_flutter/core/services/DataService.dart'; import 'package:aman_kassa_flutter/core/services/dialog_service.dart'; import 'package:aman_kassa_flutter/core/services/navigator_service.dart'; import 'package:aman_kassa_flutter/redux/store.dart'; import 'package:logger/logger.dart'; import '../../core/models/aman_dao.dart'; import '../../core/models/card_data.dart'; import '../../core/models/halyk/halyk_post_session.dart'; import '../../core/services/BankService.dart'; import '../../redux/state/bank_state.dart'; BankService _bankService = locator(); DialogService _dialogService = locator(); final DataService _dataService = locator(); final NavigatorService _navigatorService = locator(); Logger log = getLogger('PaymentNfcView'); Future> paymentHalykPos(double total) async { //Авторизация String token = Redux.store.state.userState.user.token; BankState bankState = Redux.store.state.bankState; //права доступа HalykPosSession session = await _bankService.renewToken( token: token, login: bankState.login, password: bankState.password); if (session.token == null) { return sessionDeclineDao(session); } //Инициализация HalykResponse response = await _bankService.pay(token: session.token, amount: total); if (response.result.code == 0) { CardData cardData = new CardData( authorizationCode: response.transaction.instrumentSpecificData.authorizationCode, cardholderName: response.transaction.instrumentSpecificData.cardholderName, cardNumber: response.transaction.instrumentSpecificData.maskedPan, operationDay: response.transaction.operationDay, transactionNumber: response.transaction.transactionNumber, terminalId: response.transaction.terminalId, transactionType: 'payment'); return AmanDao( msg: response.result.description, success: true, data: cardData); } return AmanDao( msg: response.result.errorData != null ? response.result.errorData.description : response.result.description, success: false); } AmanDao sessionDeclineDao(HalykPosSession session) { String msg = 'Отказано в доступе к API банка'; if(session.result?.Response?.Description != null) { msg = '${session.result.Response.Description} (${session.result.Response.Code}) '; } return AmanDao(success: false, msg: msg); } Future> refundHalykPos( CardData refundData, double total) async { //Авторизация String token = Redux.store.state.userState.user.token; BankState bankState = Redux.store.state.bankState; //права доступа HalykPosSession session = await _bankService.renewToken( token: token, login: bankState.login, password: bankState.password); if (session.token == null) { return sessionDeclineDao(session); } HalykResponse response = await _bankService.refund( token: session.token, amount: total, operDay: refundData.operationDay, terminalId: refundData.terminalId, transNum: refundData.transactionNumber); if (response.result.code == 0) { CardData cardData = new CardData( authorizationCode: response.transaction.instrumentSpecificData.authorizationCode, cardholderName: response.transaction.instrumentSpecificData.cardholderName, cardNumber: response.transaction.instrumentSpecificData.maskedPan, operationDay: response.transaction.operationDay, transactionNumber: response.transaction.transactionNumber, terminalId: response.transaction.terminalId, transactionType: 'refund'); return AmanDao( msg: response.result.description, success: true, data: cardData); } return AmanDao( msg: response.result.errorData != null ? response.result.errorData.description : response.result.description, success: false); } Future> reversalHalykPos( CardData refundData, double total) async { //Авторизация String token = Redux.store.state.userState.user.token; BankState bankState = Redux.store.state.bankState; //права доступа HalykPosSession session = await _bankService.renewToken( token: token, login: bankState.login, password: bankState.password); if (session.token == null) { return sessionDeclineDao(session); } log.i(refundData.toJson()); HalykResponse response = await _bankService.reversal( token: session.token, operDay: refundData.operationDay, terminalId: refundData.terminalId, transNum: refundData.transactionNumber); if (response.result.code == 0) { CardData cardData = new CardData( authorizationCode: response.transaction.instrumentSpecificData.authorizationCode, cardholderName: response.transaction.instrumentSpecificData.cardholderName, cardNumber: response.transaction.instrumentSpecificData.maskedPan, operationDay: response.transaction.operationDay, transactionNumber: response.transaction.transactionNumber, terminalId: response.transaction.terminalId, transactionType: 'reversal'); return AmanDao( msg: response.result.description, success: true, data: cardData); } return AmanDao( msg: response.result.errorData != null ? response.result.errorData.description : response.result.description, success: false); } Future closeDayHalykPos() async { //Авторизация String token = Redux.store.state.userState.user.token; BankState bankState = Redux.store.state.bankState; //права доступа HalykPosSession session = await _bankService.renewToken( token: token, login: bankState.login, password: bankState.password); if (session.token == null) { return new Cd.HalykCloseDayDao( result: Cd.ResultBean( description: 'Отказано в доступе к API банка', code: -1)); } //Инициализация Cd.HalykCloseDayDao response = await _bankService.closeDay(token: session.token); return response; }