aman-kassa-flutter/lib/views/payment/halyk_pos_service.dart

93 lines
4.3 KiB
Dart

import 'package:aman_kassa_flutter/core/locator.dart';
import 'package:aman_kassa_flutter/core/logger.dart';
import 'file:///D:/Work/serik/Flutter/aman-kassa-flutter/lib/core/models/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_post_session.dart';
import '../../core/services/BankService.dart';
import '../../redux/state/bank_state.dart';
BankService _bankService = locator<BankService>();
DialogService _dialogService = locator<DialogService>();
final DataService _dataService = locator<DataService>();
final NavigatorService _navigatorService = locator<NavigatorService>();
Logger log = getLogger('PaymentNfcView');
Future<AmanDao<CardData>> 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 AmanDao<CardData>(success: false, msg: 'Отказано в доступе к API банка');
}
//Инициализация
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<CardData>(msg: response.result.description, success: true, data: cardData);
}
return AmanDao<CardData>(msg: response.result.description, success: false);
}
Future<AmanDao<CardData>> 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 AmanDao<CardData>(success: false, msg: 'Отказано в доступе к API банка');
}
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: 'payment'
);
return AmanDao<CardData>(msg: response.result.description, success: true, data: cardData);
}
return AmanDao<CardData>(msg: response.result.description, success: false);
}
Future<HalykResponse> 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 HalykResponse(result: ResultBean(description: 'Отказано в доступе к API банка', code: -1));
}
//Инициализация
HalykResponse response = await _bankService.closeDay(token: session.token);
return response;
}