halyk token decline response parse
parent
cb6e68bb1e
commit
33897977a8
|
|
@ -2,18 +2,74 @@ import 'package:intl/intl.dart';
|
|||
|
||||
class HalykPosSession {
|
||||
const HalykPosSession(
|
||||
{this.login, this.token, this.serverTime, this.tokenTimeout});
|
||||
{this.login,
|
||||
this.token,
|
||||
this.serverTime,
|
||||
this.tokenTimeout,
|
||||
this.result});
|
||||
|
||||
final String login;
|
||||
final String token;
|
||||
final DateTime serverTime;
|
||||
final int tokenTimeout;
|
||||
final ResultBean result;
|
||||
|
||||
static HalykPosSession fromJson(Map<String, dynamic> data) => HalykPosSession(
|
||||
login: data['login'],
|
||||
token: data['token'],
|
||||
result: ResultBean.fromMap(data['result']),
|
||||
serverTime: data['ServerTime'] != null
|
||||
? new DateFormat("dd.MM.yyyy HH:mm:ss ZZZ").parse(data['ServerTime'])
|
||||
: null,
|
||||
tokenTimeout: data['TokenTimeout']);
|
||||
}
|
||||
|
||||
/// ServerTime : "25.06.2021 13:18:00 GMT+06:00"
|
||||
/// ResultCode : "040"
|
||||
/// ResultStr : "Unknown operator login. Check the correctness of the data or contact support."
|
||||
/// Response : {"Code":"040","Description":"Unknown operator login. Check the correctness of the data or contact support."}
|
||||
|
||||
class ResultBean {
|
||||
String ServerTime;
|
||||
String ResultCode;
|
||||
String ResultStr;
|
||||
ResponseBean Response;
|
||||
|
||||
static ResultBean fromMap(Map<String, dynamic> map) {
|
||||
if (map == null) return null;
|
||||
ResultBean resultBean = ResultBean();
|
||||
resultBean.ServerTime = map['ServerTime'];
|
||||
resultBean.ResultCode = map['ResultCode'];
|
||||
resultBean.ResultStr = map['ResultStr'];
|
||||
resultBean.Response = ResponseBean.fromMap(map['Response']);
|
||||
return resultBean;
|
||||
}
|
||||
|
||||
Map toJson() => {
|
||||
"ServerTime": ServerTime,
|
||||
"ResultCode": ResultCode,
|
||||
"ResultStr": ResultStr,
|
||||
"Response": Response,
|
||||
};
|
||||
}
|
||||
|
||||
/// Code : "040"
|
||||
/// Description : "Unknown operator login. Check the correctness of the data or contact support."
|
||||
|
||||
class ResponseBean {
|
||||
String Code;
|
||||
String Description;
|
||||
|
||||
static ResponseBean fromMap(Map<String, dynamic> map) {
|
||||
if (map == null) return null;
|
||||
ResponseBean responseBean = ResponseBean();
|
||||
responseBean.Code = map['Code'];
|
||||
responseBean.Description = map['Description'];
|
||||
return responseBean;
|
||||
}
|
||||
|
||||
Map toJson() => {
|
||||
"Code": Code,
|
||||
"Description": Description,
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -74,6 +74,7 @@ class ApiService extends BaseService {
|
|||
|
||||
Map<String, String> requestBody = <String, String>{'login': login, 'hash': hash};
|
||||
var response = await requestFormData('/hb/pos/gettoken', requestBody, bodyEntry: true, posEndPoint: true, statusCheck: false);
|
||||
print(response);
|
||||
return HalykPosSession.fromJson(jsonDecode(response));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ import 'package:aman_kassa_flutter/core/base/base_service.dart';
|
|||
import 'package:aman_kassa_flutter/core/locator.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/close_day_data.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_post_session.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/halyk/halyk_post_session.dart' as Ps;
|
||||
import 'package:aman_kassa_flutter/core/models/halyk/halyk_response_dao.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/transaction_item.dart';
|
||||
import 'package:aman_kassa_flutter/core/services/ApiService.dart';
|
||||
|
|
@ -31,8 +31,8 @@ class BankService extends BaseService {
|
|||
return int.parse(result) ?? 0;
|
||||
}
|
||||
|
||||
Future<HalykPosSession> renewToken({String token, String login, String password}) async {
|
||||
HalykPosSession result;
|
||||
Future<Ps.HalykPosSession> renewToken({String token, String login, String password}) async {
|
||||
Ps.HalykPosSession result;
|
||||
try {
|
||||
result = await _api.halykPosToken(token, login, password);
|
||||
} catch (e, stack) {
|
||||
|
|
|
|||
|
|
@ -205,7 +205,15 @@ class _MyFloatingActionButtonState extends State<MyFloatingActionButton> {
|
|||
color: whiteColor,
|
||||
),
|
||||
onPressed: () async {
|
||||
|
||||
var today = new DateTime.now();
|
||||
var yesterday = today.subtract(new Duration(days: 1));
|
||||
if( Redux.store.state.userState == null
|
||||
|| Redux.store.state.userState.smena == null
|
||||
|| Redux.store.state.userState.smena.startedAt == null
|
||||
|| yesterday.isAfter(Redux.store.state.userState.smena.startedAt)) {
|
||||
_dialog.showDialog(description: 'Текущая смена открыта более 24 ч. Необходимо закрыть смену и открыть ее заново.');
|
||||
return;
|
||||
}
|
||||
try {
|
||||
await Redux.store.dispatch(changePinSkipFromSetting(true));
|
||||
AmanDao<CardData> response = await reversalHalykPos(widget.data.cardData, widget.data.voucher.total);
|
||||
|
|
@ -237,6 +245,15 @@ class _MyFloatingActionButtonState extends State<MyFloatingActionButton> {
|
|||
color: whiteColor,
|
||||
),
|
||||
onPressed: () async {
|
||||
var today = new DateTime.now();
|
||||
var yesterday = today.subtract(new Duration(days: 1));
|
||||
if( Redux.store.state.userState == null
|
||||
|| Redux.store.state.userState.smena == null
|
||||
|| Redux.store.state.userState.smena.startedAt == null
|
||||
|| yesterday.isAfter(Redux.store.state.userState.smena.startedAt)) {
|
||||
_dialog.showDialog(description: 'Текущая смена открыта более 24 ч. Необходимо закрыть смену и открыть ее заново.');
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
await Redux.store.dispatch(changePinSkipFromSetting(true));
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
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_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';
|
||||
|
|
@ -24,80 +25,118 @@ 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);
|
||||
HalykPosSession session = await _bankService.renewToken(
|
||||
token: token, login: bankState.login, password: bankState.password);
|
||||
if (session.token == null) {
|
||||
return AmanDao<CardData>(success: false, msg: 'Отказано в доступе к API банка');
|
||||
return sessionDeclineDao(session);
|
||||
}
|
||||
|
||||
//Инициализация
|
||||
HalykResponse response = await _bankService.pay(token: session.token, amount: total);
|
||||
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.errorData !=null ? response.result.errorData.description : 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,
|
||||
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<CardData>(msg: response.result.description, success: true, data: cardData);
|
||||
transactionType: 'payment');
|
||||
return AmanDao<CardData>(
|
||||
msg: response.result.description, success: true, data: cardData);
|
||||
}
|
||||
return AmanDao<CardData>(msg: response.result.errorData !=null ? response.result.errorData.description : response.result.description, success: false);
|
||||
return AmanDao<CardData>(
|
||||
msg: response.result.errorData != null
|
||||
? response.result.errorData.description
|
||||
: response.result.description,
|
||||
success: false);
|
||||
}
|
||||
|
||||
Future<AmanDao<CardData>> reversalHalykPos(CardData refundData, double total) async {
|
||||
AmanDao<CardData> sessionDeclineDao(HalykPosSession session) {
|
||||
String msg = 'Отказано в доступе к API банка';
|
||||
if(session.result?.Response?.Description != null) {
|
||||
msg = '${session.result.Response.Description} (${session.result.Response.Code}) ';
|
||||
}
|
||||
return AmanDao<CardData>(success: false, msg: msg);
|
||||
}
|
||||
|
||||
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);
|
||||
HalykPosSession session = await _bankService.renewToken(
|
||||
token: token, login: bankState.login, password: bankState.password);
|
||||
if (session.token == null) {
|
||||
return AmanDao<CardData>(success: false, msg: 'Отказано в доступе к API банка');
|
||||
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<CardData>(
|
||||
msg: response.result.description, success: true, data: cardData);
|
||||
}
|
||||
return AmanDao<CardData>(
|
||||
msg: response.result.errorData != null
|
||||
? response.result.errorData.description
|
||||
: response.result.description,
|
||||
success: false);
|
||||
}
|
||||
|
||||
Future<AmanDao<CardData>> 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 );
|
||||
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,
|
||||
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<CardData>(msg: response.result.description, success: true, data: cardData);
|
||||
transactionType: 'reversal');
|
||||
return AmanDao<CardData>(
|
||||
msg: response.result.description, success: true, data: cardData);
|
||||
}
|
||||
return AmanDao<CardData>(msg: response.result.errorData !=null ? response.result.errorData.description : response.result.description, success: false);
|
||||
return AmanDao<CardData>(
|
||||
msg: response.result.errorData != null
|
||||
? response.result.errorData.description
|
||||
: response.result.description,
|
||||
success: false);
|
||||
}
|
||||
|
||||
Future<Cd.HalykCloseDayDao> closeDayHalykPos() async {
|
||||
|
|
@ -105,16 +144,15 @@ Future<Cd.HalykCloseDayDao> 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);
|
||||
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));
|
||||
return new Cd.HalykCloseDayDao(
|
||||
result: Cd.ResultBean(
|
||||
description: 'Отказано в доступе к API банка', code: -1));
|
||||
}
|
||||
//Инициализация
|
||||
Cd.HalykCloseDayDao response = await _bankService.closeDay(token: session.token);
|
||||
Cd.HalykCloseDayDao response =
|
||||
await _bankService.closeDay(token: session.token);
|
||||
return response;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -217,6 +217,17 @@ class _PaymentViewState extends State<PaymentView> {
|
|||
}
|
||||
return InkWell(
|
||||
onTap: () async {
|
||||
|
||||
var today = new DateTime.now();
|
||||
var yesterday = today.subtract(new Duration(days: 1));
|
||||
if( Redux.store.state.userState == null
|
||||
|| Redux.store.state.userState.smena == null
|
||||
|| Redux.store.state.userState.smena.startedAt == null
|
||||
|| yesterday.isAfter(Redux.store.state.userState.smena.startedAt)) {
|
||||
_dialogService.showDialog(description: 'Текущая смена открыта более 24 ч. Необходимо закрыть смену и открыть ее заново.');
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
await Redux.store.dispatch(changePinSkipFromSetting(true));
|
||||
AmanDao<CardData> data = await paymentHalykPos(_total);
|
||||
|
|
|
|||
Loading…
Reference in New Issue