-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathflutter_paytabs_bridge.dart
275 lines (241 loc) · 11.4 KB
/
flutter_paytabs_bridge.dart
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
import 'dart:async';
import 'dart:io';
import 'package:flutter/services.dart';
import 'package:path_provider/path_provider.dart';
import 'PaymentSDKQueryConfiguration.dart';
import 'PaymentSDKSavedCardInfo.dart';
import 'PaymentSdkConfigurationDetails.dart';
// Constants
const String pt_profile_id = 'pt_profile_id';
const String pt_client_key = 'pt_client_key';
const String pt_server_key = 'pt_server_key';
const String pt_screen_title = 'pt_screen_title';
const String pt_amount = 'pt_amount';
const String pt_currency_code = 'pt_currency_code';
const String pt_tokenise_type = 'pt_tokenise_type';
const String pt_token_format = 'pt_token_format';
const String pt_token = 'pt_token';
const String pt_transaction_reference = 'pt_transaction_reference';
const String pt_cart_id = 'pt_cart_id';
const String pt_cart_description = 'pt_cart_description';
const String pt_merchant_country_code = 'pt_merchant_country_code';
const String pt_samsung_pay_token = 'pt_samsung_pay_token';
const String pt_merchant_name = 'pt_merchant_name';
const String pt_merchant_id = "pt_merchant_id";
const String pt_server_ip = "pt_server_ip";
const String pt_transaction_class = "pt_transaction_class";
const String pt_transaction_type = "pt_transaction_type";
const String pt_hide_card_scanner = "pt_hide_card_scanner";
const String pt_apms = 'pt_apms';
const String pt_simplify_apple_pay_validation =
"pt_simplify_apple_pay_validation";
const String pt_card_discounts = "pt_card_discounts";
const String pt_payment_networks = "pt_payment_networks";
// Billing
const String pt_billing_details = 'pt_billing_details';
const String pt_address_billing = 'pt_address_billing';
const String pt_name_billing = 'pt_name_billing';
const String pt_email_billing = 'pt_email_billing';
const String pt_phone_billing = 'pt_phone_billing';
const String pt_city_billing = 'pt_city_billing';
const String pt_state_billing = 'pt_state_billing';
const String pt_country_billing = 'pt_country_billing';
const String pt_zip_billing = 'pt_zip_billing';
// Shipping
const String pt_shipping_details = 'pt_shipping_details';
const String pt_address_shipping = 'pt_address_shipping';
const String pt_name_shipping = 'pt_name_shipping';
const String pt_email_shipping = 'pt_email_shipping';
const String pt_phone_shipping = 'pt_phone_shipping';
const String pt_city_shipping = 'pt_city_shipping';
const String pt_state_shipping = 'pt_state_shipping';
const String pt_country_shipping = 'pt_country_shipping';
const String pt_zip_shipping = 'pt_zip_shipping';
// metadata
const String pt_ios_theme = 'pt_ios_theme';
const String pt_color = 'pt_color';
const String pt_theme_light = 'pt_theme_light';
const String pt_language = 'pt_language';
const String pt_show_billing_info = 'pt_show_billing_info';
const String pt_link_billing_name = 'pt_link_billing_name';
const String pt_show_shipping_info = 'pt_show_shipping_info';
const String pt_force_validate_shipping = 'pt_force_validate_shipping';
const String pt_ios_primary_color = 'pt_ios_primary_color';
const String pt_ios_primary_color_dark = 'pt_ios_primary_color_dark';
const String pt_ios_primary_font_color = 'pt_ios_primary_font_color';
const String pt_ios_primary_font_color_dark = 'pt_ios_primary_font_color_dark';
const String pt_ios_secondary_color = 'pt_ios_secondary_color';
const String pt_ios_secondary_color_dark = 'pt_ios_secondary_color_dark';
const String pt_ios_secondary_font_color = 'pt_ios_secondary_font_color';
const String pt_ios_secondary_font_color_dark =
'pt_ios_secondary_font_color_dark';
const String pt_ios_stroke_color = 'pt_ios_stroke_color';
const String pt_ios_stroke_color_dark = 'pt_ios_stroke_color_dark';
const String pt_ios_button_color = 'pt_ios_button_color';
const String pt_ios_button_color_dark = 'pt_ios_button_color_dark';
const String pt_ios_button_font_color = 'pt_ios_button_font_color';
const String pt_ios_button_font_color_dark = 'pt_ios_button_font_color_dark';
const String pt_ios_title_font_color = 'pt_ios_title_font_color';
const String pt_ios_title_font_color_dark = 'pt_ios_title_font_color_dark';
const String pt_ios_background_color = 'pt_ios_background_color';
const String pt_ios_background_color_dark = 'pt_ios_background_color_dark';
const String pt_ios_placeholder_color = 'pt_ios_placeholder_color';
const String pt_ios_placeholder_color_dark = 'pt_ios_placeholder_color_dark';
const String pt_ios_primary_font = 'pt_ios_primary_font';
const String pt_ios_secondary_font = 'pt_ios_secondary_font';
const String pt_ios_stroke_thinckness = 'pt_ios_stroke_thinckness';
const String pt_ios_inputs_corner_radius = 'pt_ios_inputs_corner_radius';
const String pt_ios_button_font = 'pt_ios_button_font';
const String pt_ios_title_font = 'pt_ios_title_font';
const String pt_ios_logo = "pt_ios_logo";
//PaymentSDKSavedCardInfo
const String pt_masked_card = "pt_masked_card";
const String pt_card_type = "pt_card_type";
// Billing new logic
const String pt_enable_zero_contacts = "pt_enable_zero_contacts";
const String pt_is_digital_product = "pt_is_digital_product";
const String pt_expiry_time = "pt_expiry_time";
const String pt_discount_cards = "pt_discount_cards";
const String pt_discount_value = "pt_discount_value";
const String pt_discount_title = "pt_discount_title";
const String pt_is_percentage = "pt_is_percentage";
const String pt_ios_input_background_color = "pt_ios_input_background_color";
const String pt_ios_input_background_color_dark =
"pt_ios_input_background_color_dark";
const String pt_card_approval = "pt_card_approval";
const String pt_validation_url = "pt_validation_url";
const String pt_bin_length = "pt_bin_length";
const String pt_block_if_no_response = "pt_block_if_no_response";
class FlutterPaytabsBridge {
static Future<dynamic> startCardPayment(
PaymentSdkConfigurationDetails arg, void eventsCallBack(dynamic)) async {
arg.samsungPayToken = null;
MethodChannel localChannel = MethodChannel('flutter_paytabs_bridge');
EventChannel localStream =
const EventChannel('flutter_paytabs_bridge_stream');
localStream.receiveBroadcastStream().listen(eventsCallBack);
var logoImage = arg.iOSThemeConfigurations?.logoImage ?? "";
if (logoImage != "") {
arg.iOSThemeConfigurations?.logoImage = await handleImagePath(logoImage);
}
return await localChannel.invokeMethod('startCardPayment', arg.map);
}
static Future<void> startTokenizedCardPayment(
PaymentSdkConfigurationDetails arg,
String token,
String transactionRef,
void Function(dynamic) eventsCallBack) async {
final completer = Completer<void>();
arg.samsungPayToken = null;
MethodChannel localChannel = MethodChannel('flutter_paytabs_bridge');
EventChannel localStream =
const EventChannel('flutter_paytabs_bridge_stream');
StreamSubscription<dynamic>? subscription;
subscription = localStream.receiveBroadcastStream().listen((event) {
eventsCallBack(event);
if (event["status"] == "success" ||
event["status"] == "error" ||
event["status"] == "event") {
if (!completer.isCompleted) {
completer.complete();
}
subscription?.cancel();
}
});
var logoImage = arg.iOSThemeConfigurations?.logoImage ?? "";
if (logoImage != "") {
arg.iOSThemeConfigurations?.logoImage = await handleImagePath(logoImage);
}
var argsMap = arg.map;
argsMap["token"] = token;
argsMap["transactionRef"] = transactionRef;
localChannel.invokeMethod('startTokenizedCardPayment', argsMap);
await completer.future;
await subscription.cancel();
}
static Future<dynamic> start3DSecureTokenizedCardPayment(
PaymentSdkConfigurationDetails arg,
PaymentSDKSavedCardInfo paymentSDKSavedCardInfo,
String token,
void eventsCallBack(dynamic)) async {
arg.samsungPayToken = null;
MethodChannel localChannel = MethodChannel('flutter_paytabs_bridge');
EventChannel localStream =
const EventChannel('flutter_paytabs_bridge_stream');
localStream.receiveBroadcastStream().listen(eventsCallBack);
var logoImage = arg.iOSThemeConfigurations?.logoImage ?? "";
if (logoImage != "") {
arg.iOSThemeConfigurations?.logoImage = await handleImagePath(logoImage);
}
var argsMap = arg.map;
argsMap["token"] = token;
argsMap["paymentSDKSavedCardInfo"] = paymentSDKSavedCardInfo.map;
return await localChannel.invokeMethod(
'start3DSecureTokenizedCardPayment', argsMap);
}
static Future<dynamic> queryTransaction(
PaymentSdkConfigurationDetails arg,
PaymentSDKQueryConfiguration paymentSDKQueryConfiguration,
void eventsCallBack(dynamic)) async {
arg.samsungPayToken = null;
MethodChannel localChannel = MethodChannel('flutter_paytabs_bridge');
EventChannel localStream =
const EventChannel('flutter_paytabs_bridge_stream');
localStream.receiveBroadcastStream().listen(eventsCallBack);
var logoImage = arg.iOSThemeConfigurations?.logoImage ?? "";
if (logoImage != "") {
arg.iOSThemeConfigurations?.logoImage = await handleImagePath(logoImage);
}
var argsMap = arg.map;
argsMap["paymentSDKQueryConfiguration"] = paymentSDKQueryConfiguration.map;
return await localChannel.invokeMethod('queryTransaction', argsMap);
}
static Future<dynamic> cancelPayment(void eventsCallBack(dynamic)) async {
MethodChannel localChannel = MethodChannel('flutter_paytabs_bridge');
EventChannel localStream =
const EventChannel('flutter_paytabs_bridge_stream');
localStream.receiveBroadcastStream().listen(eventsCallBack);
return await localChannel.invokeMethod('cancelPayment');
}
static Future<String> handleImagePath(String path) async {
var bytes = await rootBundle.load(path);
String dir = (await getApplicationDocumentsDirectory()).path;
var imageName = path.split("/").last;
String logoPath = '$dir/$imageName';
var _ = await writeToFile(bytes, logoPath);
return logoPath;
}
static Future<void> writeToFile(ByteData data, String path) {
final buffer = data.buffer;
return new File(path).writeAsBytes(
buffer.asUint8List(data.offsetInBytes, data.lengthInBytes));
}
static Future<dynamic> startAlternativePaymentMethod(
PaymentSdkConfigurationDetails arg, void eventsCallBack(dynamic)) async {
arg.samsungPayToken = null;
MethodChannel localChannel = MethodChannel('flutter_paytabs_bridge');
EventChannel localStream =
const EventChannel('flutter_paytabs_bridge_stream');
localStream.receiveBroadcastStream().listen(eventsCallBack);
return await localChannel.invokeMethod('startApmsPayment', arg.map);
}
static Future<dynamic> startSamsungPayPayment(
PaymentSdkConfigurationDetails arg, void eventsCallBack(dynamic)) async {
MethodChannel localChannel = MethodChannel('flutter_paytabs_bridge');
EventChannel localStream =
const EventChannel('flutter_paytabs_bridge_stream');
localStream.receiveBroadcastStream().listen(eventsCallBack);
return await localChannel.invokeMethod('startSamsungPayPayment', arg.map);
}
static Future<dynamic> startApplePayPayment(
PaymentSdkConfigurationDetails arg, void eventsCallBack(dynamic)) async {
if (!Platform.isIOS) {
return null;
}
MethodChannel localChannel = MethodChannel('flutter_paytabs_bridge');
EventChannel localStream =
const EventChannel('flutter_paytabs_bridge_stream');
localStream.receiveBroadcastStream().listen(eventsCallBack);
return await localChannel.invokeMethod('startApplePayPayment', arg.map);
}
}