choco-one-click-payment 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +61 -0
- package/index.d.ts +224 -0
- package/index.esm.js +2 -0
- package/index.esm.js.LICENSE.txt +1 -0
- package/index.js +2 -0
- package/index.js.LICENSE.txt +1 -0
- package/package.json +48 -0
package/README.md
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Choco One-Click Widget
|
|
2
|
+
|
|
3
|
+
Встраиваемый виджет для быстрой оплаты с bottom sheet интерфейсом.
|
|
4
|
+
|
|
5
|
+
## Установка
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm i choco-one-click-payment
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Использование
|
|
12
|
+
|
|
13
|
+
ESM:
|
|
14
|
+
|
|
15
|
+
```javascript
|
|
16
|
+
import ChocoOneClickWidget from 'choco-one-click-payment';
|
|
17
|
+
|
|
18
|
+
const widget = new ChocoOneClickWidget({
|
|
19
|
+
trackId: 'your-track-id',
|
|
20
|
+
clientId: '123446',
|
|
21
|
+
terminalId: 6344,
|
|
22
|
+
merchantOrderId: 'ORDER-123',
|
|
23
|
+
amount: 410000,
|
|
24
|
+
environment: 'stage',
|
|
25
|
+
onSuccess: (data) => console.log('Success', data),
|
|
26
|
+
onError: (error) => console.error('Error', error),
|
|
27
|
+
onCancel: () => console.log('Cancelled')
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
await widget.init();
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
CommonJS:
|
|
34
|
+
|
|
35
|
+
```javascript
|
|
36
|
+
const ChocoOneClickWidget = require('choco-one-click-widget');
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## API
|
|
40
|
+
|
|
41
|
+
- `clientId`- client_id
|
|
42
|
+
- `trackId` - track_id
|
|
43
|
+
- `terminalId` - ID терминала
|
|
44
|
+
- `merchantOrderId` - ID заказа
|
|
45
|
+
- `amount` - Сумма в тиынах
|
|
46
|
+
- `currency` - KZT или GEL (по умолчанию KZT)
|
|
47
|
+
- `environment` - production или stage
|
|
48
|
+
- `backlink` - URL для возврата
|
|
49
|
+
- `locale` - ru, en, kk (по умолчанию ru)
|
|
50
|
+
|
|
51
|
+
## Сборка пакета (для разработчиков)
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
npm install
|
|
55
|
+
npm run build
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Сборка генерирует:
|
|
59
|
+
- `index.js` (UMD/CJS entry)
|
|
60
|
+
- `index.esm.js` (ESM entry)
|
|
61
|
+
- `index.d.ts` (типы TypeScript)
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript definitions for Choco One-Click Widget
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
declare module 'choco-one-click-widget' {
|
|
6
|
+
export interface ChocoOneClickConfig {
|
|
7
|
+
/**
|
|
8
|
+
* TrackId для авторизации. При init() по нему получается access token.
|
|
9
|
+
* @required
|
|
10
|
+
*/
|
|
11
|
+
trackId: string;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* OAuth2 client_id — идентификатор приложения. Требуется бэкендом при
|
|
15
|
+
* обмене trackId на access token (запрос к /api/v2/oauth2/tokens).
|
|
16
|
+
* @required
|
|
17
|
+
*/
|
|
18
|
+
clientId: string;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* ID терминала от Choco
|
|
22
|
+
* @required
|
|
23
|
+
* @example 6344 (для staging)
|
|
24
|
+
*/
|
|
25
|
+
terminalId: number;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Уникальный ID заказа в вашей системе
|
|
29
|
+
* @required
|
|
30
|
+
* @example "ORDER-12345"
|
|
31
|
+
*/
|
|
32
|
+
merchantOrderId: string;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Сумма в тиынах (1₸ = 100 тиынов)
|
|
36
|
+
* @required
|
|
37
|
+
* @example 10000 (100₸)
|
|
38
|
+
*/
|
|
39
|
+
amount: number;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Код валюты
|
|
43
|
+
* @default "KZT"
|
|
44
|
+
*/
|
|
45
|
+
currency?: 'KZT' | 'GEL';
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Окружение для API
|
|
49
|
+
* @default "production"
|
|
50
|
+
*/
|
|
51
|
+
environment?: 'production' | 'stage';
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* URL для возврата после оплаты (важно для Kaspi Pay и 3DS)
|
|
55
|
+
* @optional
|
|
56
|
+
*/
|
|
57
|
+
backlink?: string;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Язык интерфейса виджета
|
|
61
|
+
* @default "ru"
|
|
62
|
+
*/
|
|
63
|
+
locale?: 'ru' | 'en' | 'kk';
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Callback вызываемый при успешной оплате
|
|
67
|
+
* @param data - данные о платеже
|
|
68
|
+
*/
|
|
69
|
+
onSuccess?: (data: PaymentSuccessEvent) => void;
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Callback вызываемый при ошибке оплаты
|
|
73
|
+
* @param error - информация об ошибке
|
|
74
|
+
*/
|
|
75
|
+
onError?: (error: PaymentErrorEvent | Error) => void;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Callback вызываемый при отмене оплаты пользователем
|
|
79
|
+
*/
|
|
80
|
+
onCancel?: () => void;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export interface PaymentSuccessEvent {
|
|
84
|
+
/**
|
|
85
|
+
* Тип события
|
|
86
|
+
*/
|
|
87
|
+
type: 'order.paid';
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* ID заказа в системе Choco
|
|
91
|
+
*/
|
|
92
|
+
id: string;
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Дополнительные данные
|
|
96
|
+
*/
|
|
97
|
+
attributes: {
|
|
98
|
+
/**
|
|
99
|
+
* Сумма платежа
|
|
100
|
+
*/
|
|
101
|
+
amount: number;
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Дата и время оплаты
|
|
105
|
+
*/
|
|
106
|
+
paid_at: string;
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export interface PaymentErrorEvent {
|
|
111
|
+
/**
|
|
112
|
+
* Тип события
|
|
113
|
+
*/
|
|
114
|
+
type: 'order.failed';
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* ID заказа в системе Choco
|
|
118
|
+
*/
|
|
119
|
+
id: string;
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Дополнительные данные
|
|
123
|
+
*/
|
|
124
|
+
attributes: {
|
|
125
|
+
/**
|
|
126
|
+
* Сообщение об ошибке
|
|
127
|
+
*/
|
|
128
|
+
message: string;
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
export interface PaymentActionRequiredEvent {
|
|
133
|
+
/**
|
|
134
|
+
* Тип события
|
|
135
|
+
*/
|
|
136
|
+
type: 'order.action_required';
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* ID заказа в системе Choco
|
|
140
|
+
*/
|
|
141
|
+
id: string;
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Дополнительные данные
|
|
145
|
+
*/
|
|
146
|
+
attributes: {
|
|
147
|
+
/**
|
|
148
|
+
* URL для редиректа (3DS, Kaspi)
|
|
149
|
+
*/
|
|
150
|
+
action_url: string;
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
export interface PaymentMethod {
|
|
155
|
+
/**
|
|
156
|
+
* Тип метода оплаты
|
|
157
|
+
*/
|
|
158
|
+
type: 'card' | 'kaspi_pay' | 'apple_pay' | 'google_pay' | 'new_card';
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Отображаемое название метода
|
|
162
|
+
*/
|
|
163
|
+
label: string;
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* ID карты (только для type: "card")
|
|
167
|
+
*/
|
|
168
|
+
cardId?: number;
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Тип карты (только для type: "card")
|
|
172
|
+
*/
|
|
173
|
+
cardType?: string;
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Является ли методом по умолчанию
|
|
177
|
+
*/
|
|
178
|
+
isDefault?: boolean;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
export default class ChocoOneClickWidget {
|
|
182
|
+
/**
|
|
183
|
+
* Создает экземпляр виджета
|
|
184
|
+
* @param config - конфигурация виджета
|
|
185
|
+
*/
|
|
186
|
+
constructor(config: ChocoOneClickConfig);
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Инициализирует виджет: загружает контекст оплаты,
|
|
190
|
+
* подключается к WebSocket и отображает UI
|
|
191
|
+
* @returns Promise<boolean> - true при успешной инициализации
|
|
192
|
+
*/
|
|
193
|
+
init(): Promise<boolean>;
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Уничтожает виджет: отключает WebSocket, удаляет UI
|
|
197
|
+
*/
|
|
198
|
+
destroy(): void;
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Закрывает виджет (вызывает onCancel)
|
|
202
|
+
*/
|
|
203
|
+
close(): void;
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Открывает bottom sheet с выбором метода оплаты
|
|
207
|
+
*/
|
|
208
|
+
openPaymentSheet(): void;
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Закрывает bottom sheet
|
|
212
|
+
*/
|
|
213
|
+
closePaymentSheet(): void;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* Global declarations for CDN usage
|
|
219
|
+
*/
|
|
220
|
+
declare global {
|
|
221
|
+
interface Window {
|
|
222
|
+
ChocoOneClickWidget: typeof import('choco-one-click-widget').default;
|
|
223
|
+
}
|
|
224
|
+
}
|