-
-
Notifications
You must be signed in to change notification settings - Fork 5
/
get-card-list.ts
103 lines (87 loc) · 2.84 KB
/
get-card-list.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/** @see http://static2.tinkoff.ru/acquiring/manuals/merchant_api_protocoI_e2c.pdf */
import { SdkError } from '../..';
import { HttpRequestMethod } from '../../http-client/http-client';
import { Schema } from '../../serialization/schema';
import { BaseClient } from '../clients/base-client';
import { ResponsePayload as BaseResponsePayload } from '../response-payload';
export enum ECardStatus {
ACTIVE = 'A',
INACTIVE = 'I',
EXPIRED = 'E',
DELETED = 'D',
}
export enum ECardType {
CREDIT = 0,
DEBET = 1,
CREDITDEBIT = 2,
}
export interface ICardInfo {
/** Номер карты 411111******1111 */
Pan: string;
/** Идентификатор карты в системе Банка */
CardId: number;
/** Статус карты: A – активная, I – не активная, E – срок действия карты истек, D - удаленная */
Status: ECardStatus;
/** Идентификатор рекуррентного платежа */
RebillId: number | '';
/** Тип карты:
0 - карта списания;
1 - карта пополнения;
2 - карта пополнения и списания
*/
CardType: ECardType;
/** Срок действия карты */
ExpDate?: string;
}
//=========//
// REQUEST //
//=========//
export interface GetCardListRequestPayload {
/** Идентификатор покупателя в системе Продавца */
CustomerKey: string;
/** IP-адрес запроса */
IP?: string;
}
const getCardListRequestSchema: Schema = [];
//==========//
// RESPONSE //
//==========//
export type GetCardListResponsePayload = BaseResponsePayload & ICardInfo[];
/** TODO: Add verification to ICardInfo */
const getCardListResponseSchema: Schema = [];
//==========//
// FUNCTION //
//==========//
export async function getCardList(options: {
apiClient: BaseClient;
payload: GetCardListRequestPayload;
}): Promise<GetCardListResponsePayload> {
const { apiClient } = options;
const { ...restPayload } = options.payload;
const $payload: any = {
...restPayload,
};
const response = await apiClient
.sendRequest<GetCardListResponsePayload>({
request: {
url: 'GetCardList',
method: HttpRequestMethod.POST,
payload: $payload,
},
requestSchema: getCardListRequestSchema,
responseSchema: getCardListResponseSchema,
skipVerification: true,
})
.catch((err) => {
if (err.constructor == SdkError && !!err.payload && !('ErrorCode' in err.payload)) {
return { payload: Array.from(Object.values(err.payload)) };
}
throw err;
});
if (typeof response.payload === 'string') {
response.payload = JSON.parse(response.payload);
}
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-expect-error incorrect typing
return response.payload;
}