import 'package:aman_kassa_flutter/core/locator.dart'; import 'package:aman_kassa_flutter/core/logger.dart'; import 'package:aman_kassa_flutter/core/models/forte/forte_close_day_dao.dart' as Cd; import 'package:aman_kassa_flutter/core/models/forte/forte_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/forte/forte_post_session.dart'; import '../../core/services/ForteService.dart'; import '../../redux/state/bank_state.dart'; ForteService _bankService = locator(); DialogService _dialogService = locator(); final DataService _dataService = locator(); final NavigatorService _navigatorService = locator(); Logger log = getLogger('PaymentNfcView'); Future> paymentFortePos(double total) async { //Авторизация String token = Redux.store.state.userState.user.token; BankState bankState = Redux.store.state.bankState; //права доступа FortePosSession session = await _bankService.renewToken( token: token, login: bankState.login, password: bankState.password); if (session.token == null) { return sessionDeclineDao(session); } //Инициализация ForteResponse 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(FortePosSession 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> refundFortePos( CardData refundData, double total) async { //Авторизация String token = Redux.store.state.userState.user.token; BankState bankState = Redux.store.state.bankState; //права доступа FortePosSession session = await _bankService.renewToken( token: token, login: bankState.login, password: bankState.password); if (session.token == null) { return sessionDeclineDao(session); } ForteResponse 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> reversalFortePos( CardData refundData, double total) async { //Авторизация String token = Redux.store.state.userState.user.token; BankState bankState = Redux.store.state.bankState; //права доступа FortePosSession session = await _bankService.renewToken( token: token, login: bankState.login, password: bankState.password); if (session.token == null) { return sessionDeclineDao(session); } log.i(refundData.toJson()); ForteResponse 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 closeDayFortePos() async { //Авторизация String token = Redux.store.state.userState.user.token; BankState bankState = Redux.store.state.bankState; //права доступа FortePosSession session = await _bankService.renewToken( token: token, login: bankState.login, password: bankState.password); if (session.token == null) { return new Cd.ForteCloseDayDao( result: Cd.ResultBean( description: 'Отказано в доступе к API банка', code: -1)); } //Инициализация Cd.ForteCloseDayDao response = await _bankService.closeDay(token: session.token); return response; }