halyk token decline response parse
parent
cb6e68bb1e
commit
33897977a8
|
|
@ -2,18 +2,74 @@ import 'package:intl/intl.dart';
|
||||||
|
|
||||||
class HalykPosSession {
|
class HalykPosSession {
|
||||||
const 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 login;
|
||||||
final String token;
|
final String token;
|
||||||
final DateTime serverTime;
|
final DateTime serverTime;
|
||||||
final int tokenTimeout;
|
final int tokenTimeout;
|
||||||
|
final ResultBean result;
|
||||||
|
|
||||||
static HalykPosSession fromJson(Map<String, dynamic> data) => HalykPosSession(
|
static HalykPosSession fromJson(Map<String, dynamic> data) => HalykPosSession(
|
||||||
login: data['login'],
|
login: data['login'],
|
||||||
token: data['token'],
|
token: data['token'],
|
||||||
|
result: ResultBean.fromMap(data['result']),
|
||||||
serverTime: data['ServerTime'] != null
|
serverTime: data['ServerTime'] != null
|
||||||
? new DateFormat("dd.MM.yyyy HH:mm:ss ZZZ").parse(data['ServerTime'])
|
? new DateFormat("dd.MM.yyyy HH:mm:ss ZZZ").parse(data['ServerTime'])
|
||||||
: null,
|
: null,
|
||||||
tokenTimeout: data['TokenTimeout']);
|
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};
|
Map<String, String> requestBody = <String, String>{'login': login, 'hash': hash};
|
||||||
var response = await requestFormData('/hb/pos/gettoken', requestBody, bodyEntry: true, posEndPoint: true, statusCheck: false);
|
var response = await requestFormData('/hb/pos/gettoken', requestBody, bodyEntry: true, posEndPoint: true, statusCheck: false);
|
||||||
|
print(response);
|
||||||
return HalykPosSession.fromJson(jsonDecode(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/locator.dart';
|
||||||
import 'package:aman_kassa_flutter/core/models/close_day_data.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_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/halyk/halyk_response_dao.dart';
|
||||||
import 'package:aman_kassa_flutter/core/models/transaction_item.dart';
|
import 'package:aman_kassa_flutter/core/models/transaction_item.dart';
|
||||||
import 'package:aman_kassa_flutter/core/services/ApiService.dart';
|
import 'package:aman_kassa_flutter/core/services/ApiService.dart';
|
||||||
|
|
@ -31,8 +31,8 @@ class BankService extends BaseService {
|
||||||
return int.parse(result) ?? 0;
|
return int.parse(result) ?? 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<HalykPosSession> renewToken({String token, String login, String password}) async {
|
Future<Ps.HalykPosSession> renewToken({String token, String login, String password}) async {
|
||||||
HalykPosSession result;
|
Ps.HalykPosSession result;
|
||||||
try {
|
try {
|
||||||
result = await _api.halykPosToken(token, login, password);
|
result = await _api.halykPosToken(token, login, password);
|
||||||
} catch (e, stack) {
|
} catch (e, stack) {
|
||||||
|
|
|
||||||
|
|
@ -205,7 +205,15 @@ class _MyFloatingActionButtonState extends State<MyFloatingActionButton> {
|
||||||
color: whiteColor,
|
color: whiteColor,
|
||||||
),
|
),
|
||||||
onPressed: () async {
|
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 {
|
try {
|
||||||
await Redux.store.dispatch(changePinSkipFromSetting(true));
|
await Redux.store.dispatch(changePinSkipFromSetting(true));
|
||||||
AmanDao<CardData> response = await reversalHalykPos(widget.data.cardData, widget.data.voucher.total);
|
AmanDao<CardData> response = await reversalHalykPos(widget.data.cardData, widget.data.voucher.total);
|
||||||
|
|
@ -237,6 +245,15 @@ class _MyFloatingActionButtonState extends State<MyFloatingActionButton> {
|
||||||
color: whiteColor,
|
color: whiteColor,
|
||||||
),
|
),
|
||||||
onPressed: () async {
|
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 {
|
try {
|
||||||
await Redux.store.dispatch(changePinSkipFromSetting(true));
|
await Redux.store.dispatch(changePinSkipFromSetting(true));
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
import 'package:aman_kassa_flutter/core/locator.dart';
|
import 'package:aman_kassa_flutter/core/locator.dart';
|
||||||
import 'package:aman_kassa_flutter/core/logger.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/models/halyk/halyk_response_dao.dart';
|
||||||
import 'package:aman_kassa_flutter/core/services/DataService.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/dialog_service.dart';
|
||||||
|
|
@ -24,80 +25,118 @@ Future<AmanDao<CardData>> paymentHalykPos(double total) async {
|
||||||
String token = Redux.store.state.userState.user.token;
|
String token = Redux.store.state.userState.user.token;
|
||||||
BankState bankState = Redux.store.state.bankState;
|
BankState bankState = Redux.store.state.bankState;
|
||||||
//права доступа
|
//права доступа
|
||||||
HalykPosSession session =
|
HalykPosSession session = await _bankService.renewToken(
|
||||||
await _bankService.renewToken(token: token, login: bankState.login, password: bankState.password);
|
token: token, login: bankState.login, password: bankState.password);
|
||||||
if (session.token == null) {
|
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) {
|
if (response.result.code == 0) {
|
||||||
CardData cardData = new CardData(
|
CardData cardData = new CardData(
|
||||||
authorizationCode: response.transaction.instrumentSpecificData.authorizationCode,
|
authorizationCode:
|
||||||
cardholderName: response.transaction.instrumentSpecificData.cardholderName,
|
response.transaction.instrumentSpecificData.authorizationCode,
|
||||||
cardNumber: response.transaction.instrumentSpecificData.maskedPan,
|
cardholderName:
|
||||||
operationDay: response.transaction.operationDay,
|
response.transaction.instrumentSpecificData.cardholderName,
|
||||||
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,
|
|
||||||
cardNumber: response.transaction.instrumentSpecificData.maskedPan,
|
cardNumber: response.transaction.instrumentSpecificData.maskedPan,
|
||||||
operationDay: response.transaction.operationDay,
|
operationDay: response.transaction.operationDay,
|
||||||
transactionNumber: response.transaction.transactionNumber,
|
transactionNumber: response.transaction.transactionNumber,
|
||||||
terminalId: response.transaction.terminalId,
|
terminalId: response.transaction.terminalId,
|
||||||
transactionType: 'refund'
|
transactionType: 'payment');
|
||||||
);
|
return AmanDao<CardData>(
|
||||||
return AmanDao<CardData>(msg: response.result.description, success: true, data: 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;
|
String token = Redux.store.state.userState.user.token;
|
||||||
BankState bankState = Redux.store.state.bankState;
|
BankState bankState = Redux.store.state.bankState;
|
||||||
//права доступа
|
//права доступа
|
||||||
HalykPosSession session =
|
HalykPosSession session = await _bankService.renewToken(
|
||||||
await _bankService.renewToken(token: token, login: bankState.login, password: bankState.password);
|
token: token, login: bankState.login, password: bankState.password);
|
||||||
if (session.token == null) {
|
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());
|
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) {
|
if (response.result.code == 0) {
|
||||||
CardData cardData = new CardData(
|
CardData cardData = new CardData(
|
||||||
authorizationCode: response.transaction.instrumentSpecificData.authorizationCode,
|
authorizationCode:
|
||||||
cardholderName: response.transaction.instrumentSpecificData.cardholderName,
|
response.transaction.instrumentSpecificData.authorizationCode,
|
||||||
|
cardholderName:
|
||||||
|
response.transaction.instrumentSpecificData.cardholderName,
|
||||||
cardNumber: response.transaction.instrumentSpecificData.maskedPan,
|
cardNumber: response.transaction.instrumentSpecificData.maskedPan,
|
||||||
operationDay: response.transaction.operationDay,
|
operationDay: response.transaction.operationDay,
|
||||||
transactionNumber: response.transaction.transactionNumber,
|
transactionNumber: response.transaction.transactionNumber,
|
||||||
terminalId: response.transaction.terminalId,
|
terminalId: response.transaction.terminalId,
|
||||||
transactionType: 'reversal'
|
transactionType: 'reversal');
|
||||||
);
|
return AmanDao<CardData>(
|
||||||
return AmanDao<CardData>(msg: response.result.description, success: true, data: 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 {
|
Future<Cd.HalykCloseDayDao> closeDayHalykPos() async {
|
||||||
|
|
@ -105,16 +144,15 @@ Future<Cd.HalykCloseDayDao> closeDayHalykPos() async {
|
||||||
String token = Redux.store.state.userState.user.token;
|
String token = Redux.store.state.userState.user.token;
|
||||||
BankState bankState = Redux.store.state.bankState;
|
BankState bankState = Redux.store.state.bankState;
|
||||||
//права доступа
|
//права доступа
|
||||||
HalykPosSession session =
|
HalykPosSession session = await _bankService.renewToken(
|
||||||
await _bankService.renewToken(token: token, login: bankState.login, password: bankState.password);
|
token: token, login: bankState.login, password: bankState.password);
|
||||||
if (session.token == null) {
|
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;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -217,6 +217,17 @@ class _PaymentViewState extends State<PaymentView> {
|
||||||
}
|
}
|
||||||
return InkWell(
|
return InkWell(
|
||||||
onTap: () async {
|
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 {
|
try {
|
||||||
await Redux.store.dispatch(changePinSkipFromSetting(true));
|
await Redux.store.dispatch(changePinSkipFromSetting(true));
|
||||||
AmanDao<CardData> data = await paymentHalykPos(_total);
|
AmanDao<CardData> data = await paymentHalykPos(_total);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue