@jimrising/easymerchantsdk-react-native 2.2.8 → 2.3.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/.idea/caches/deviceStreaming.xml +11 -0
- package/README.md +305 -167
- package/android/build/.transforms/20e1216b87bd06eaab3c9e5c68d4267a/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/reactlibrary/RNEasymerchantsdkModule$2.dex +0 -0
- package/android/build/.transforms/20e1216b87bd06eaab3c9e5c68d4267a/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/reactlibrary/RNEasymerchantsdkModule$3.dex +0 -0
- package/android/build/.transforms/20e1216b87bd06eaab3c9e5c68d4267a/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/reactlibrary/RNEasymerchantsdkModule.dex +0 -0
- package/android/build/.transforms/20e1216b87bd06eaab3c9e5c68d4267a/transformed/bundleLibRuntimeToDirDebug/desugar_graph.bin +0 -0
- package/android/build/.transforms/3f3a228346492fb34e3f574e941b632f/transformed/bundleLibRuntimeToDirRelease/bundleLibRuntimeToDirRelease_dex/com/reactlibrary/RNEasymerchantsdkModule$2.dex +0 -0
- package/android/build/.transforms/3f3a228346492fb34e3f574e941b632f/transformed/bundleLibRuntimeToDirRelease/bundleLibRuntimeToDirRelease_dex/com/reactlibrary/RNEasymerchantsdkModule$3.dex +0 -0
- package/android/build/.transforms/3f3a228346492fb34e3f574e941b632f/transformed/bundleLibRuntimeToDirRelease/bundleLibRuntimeToDirRelease_dex/com/reactlibrary/RNEasymerchantsdkModule.dex +0 -0
- package/android/build/.transforms/3f3a228346492fb34e3f574e941b632f/transformed/bundleLibRuntimeToDirRelease/desugar_graph.bin +0 -0
- package/android/build/.transforms/58b147bdc43284da2468dab19bc4a64d/transformed/classes/classes_dex/classes.dex +0 -0
- package/android/build/.transforms/e9a664a11ce12edf79cd87b1e07aa243/transformed/classes/classes_dex/classes.dex +0 -0
- package/android/build/intermediates/aar_main_jar/release/syncReleaseLibJars/classes.jar +0 -0
- package/android/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar +0 -0
- package/android/build/intermediates/compile_library_classes_jar/release/bundleLibCompileToJarRelease/classes.jar +0 -0
- package/android/build/intermediates/full_jar/release/createFullJarRelease/full.jar +0 -0
- package/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +1 -1
- package/android/build/intermediates/incremental/lintVitalAnalyzeRelease/release-artifact-dependencies.xml +4 -4
- package/android/build/intermediates/incremental/lintVitalAnalyzeRelease/release-artifact-libraries.xml +4 -4
- package/android/build/intermediates/incremental/release/mergeReleaseResources/compile-file-map.properties +916 -916
- package/android/build/intermediates/incremental/release/mergeReleaseResources/merger.xml +3 -3
- package/android/build/intermediates/incremental/release/packageReleaseResources/compile-file-map.properties +1 -1
- package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/reactlibrary/RNEasymerchantsdkModule$2.class +0 -0
- package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/reactlibrary/RNEasymerchantsdkModule$3.class +0 -0
- package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/reactlibrary/RNEasymerchantsdkModule.class +0 -0
- package/android/build/intermediates/javac/release/compileReleaseJavaWithJavac/classes/com/reactlibrary/RNEasymerchantsdkModule$2.class +0 -0
- package/android/build/intermediates/javac/release/compileReleaseJavaWithJavac/classes/com/reactlibrary/RNEasymerchantsdkModule$3.class +0 -0
- package/android/build/intermediates/javac/release/compileReleaseJavaWithJavac/classes/com/reactlibrary/RNEasymerchantsdkModule.class +0 -0
- package/android/build/intermediates/lint-cache/lintVitalAnalyzeRelease/maven.google/com/android/tools/build/group-index.xml +22 -0
- package/android/build/intermediates/lint_model/release/generateReleaseLintModel/release-artifact-dependencies.xml +4 -4
- package/android/build/intermediates/lint_model/release/generateReleaseLintModel/release-artifact-libraries.xml +4 -4
- package/android/build/intermediates/lint_vital_lint_model/release/generateReleaseLintVitalModel/release-artifact-dependencies.xml +4 -4
- package/android/build/intermediates/lint_vital_lint_model/release/generateReleaseLintVitalModel/release-artifact-libraries.xml +4 -4
- package/android/build/intermediates/local_aar_for_lint/release/out.aar +0 -0
- package/android/build/intermediates/merged_res/release/mergeReleaseResources/layout/activity_payment_done_url.xml +2 -1
- package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/multi-v2/values-night-v8.json +2 -2
- package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/multi-v2/values.json +38 -38
- package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/anim-v21.json +9 -9
- package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/anim.json +24 -24
- package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/animator-v21.json +1 -1
- package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/animator.json +34 -34
- package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/color-night-v8.json +3 -3
- package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/color-v31.json +10 -10
- package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/color.json +153 -153
- package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/drawable-anydpi-v21.json +6 -6
- package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/drawable-hdpi-v4.json +13 -13
- package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/drawable-ldpi-v4.json +6 -6
- package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/drawable-mdpi-v4.json +12 -12
- package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/drawable-v21.json +4 -4
- package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/drawable-v23.json +7 -7
- package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/drawable-v29.json +1 -1
- package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/drawable-xhdpi-v4.json +12 -12
- package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/drawable-xxhdpi-v4.json +7 -7
- package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/drawable-xxxhdpi-v4.json +7 -7
- package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/drawable.json +395 -395
- package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/font.json +9 -9
- package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/interpolator-v21.json +10 -10
- package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/interpolator.json +11 -11
- package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/layout-land.json +3 -3
- package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/layout-sw600dp-v13.json +2 -2
- package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/layout-v21.json +4 -4
- package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/layout-v26.json +1 -1
- package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/layout.json +108 -108
- package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/mipmap-anydpi-v26.json +2 -2
- package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/mipmap-hdpi-v4.json +2 -2
- package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/mipmap-mdpi-v4.json +2 -2
- package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/mipmap-xhdpi-v4.json +2 -2
- package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/mipmap-xxhdpi-v4.json +2 -2
- package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/mipmap-xxxhdpi-v4.json +2 -2
- package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/raw.json +46 -46
- package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/xml.json +3 -3
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/reactlibrary/RNEasymerchantsdkModule$2.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/reactlibrary/RNEasymerchantsdkModule$3.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/reactlibrary/RNEasymerchantsdkModule.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/release/bundleLibRuntimeToDirRelease/com/reactlibrary/RNEasymerchantsdkModule$2.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/release/bundleLibRuntimeToDirRelease/com/reactlibrary/RNEasymerchantsdkModule$3.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/release/bundleLibRuntimeToDirRelease/com/reactlibrary/RNEasymerchantsdkModule.class +0 -0
- package/android/build/intermediates/runtime_library_classes_jar/debug/bundleLibRuntimeToJarDebug/classes.jar +0 -0
- package/android/build/intermediates/runtime_library_classes_jar/release/bundleLibRuntimeToJarRelease/classes.jar +0 -0
- package/android/build/intermediates/source_set_path_map/release/mapReleaseSourceSetPaths/file-map.txt +38 -38
- package/android/build/intermediates/verified_library_resources/release/verifyReleaseResources/compiled/layout_activity_payment_done_url.xml.flat +0 -0
- package/android/build/outputs/aar/jimrising_easymerchantsdk-react-native-release.aar +0 -0
- package/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
- package/android/build/tmp/compileReleaseJavaWithJavac/previous-compilation-data.bin +0 -0
- package/android/build.gradle +1 -1
- package/android/src/main/java/com/reactlibrary/RNEasymerchantsdkModule.java +56 -1
- package/ios/Classes/EasyMerchantSdk.m +124 -141
- package/ios/Classes/EasyMerchantSdk.swift +270 -502
- package/ios/Classes/EasyPayViewController.swift +18 -15
- package/ios/CustomComponents/TextFieldStackView.swift +16 -46
- package/ios/EnvironmentConfig.swift +16 -0
- package/ios/Example/ViewController.swift +513 -76
- package/ios/Models/Request.swift +365 -171
- package/ios/Pods/UserDefaults/UserStoreSingleton.swift +116 -12
- package/ios/Pods/ViewControllers/AdditionalInfoVC.swift +2 -32
- package/ios/Pods/ViewControllers/GrailPayVC.swift +258 -18
- package/ios/Pods/ViewControllers/OTPVerificationVC.swift +1 -66
- package/ios/Pods/ViewControllers/PaymentInformation/PaymentInfoVC.swift +585 -381
- package/ios/Pods/ViewControllers/ThreeDSecurePaymentDoneVC.swift +18 -9
- package/ios/easymerchantsdk.podspec +1 -1
- package/ios/easymerchantsdk.storyboard +108 -85
- package/package.json +1 -1
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
// EasyPay
|
|
4
4
|
//
|
|
5
5
|
// Created by Mony's Mac on 06/09/24.
|
|
6
|
+
//
|
|
6
7
|
|
|
7
8
|
import UIKit
|
|
8
9
|
|
|
@@ -81,6 +82,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
81
82
|
@IBOutlet weak var imgViewCalenderIconCard: UIImageView!
|
|
82
83
|
@IBOutlet weak var txtFieldEmailCardView: TextFieldStackView!
|
|
83
84
|
@IBOutlet weak var viewTxtFieldEmailCardView: UIView!
|
|
85
|
+
@IBOutlet weak var btnChosePlanCardView: UIButton!
|
|
84
86
|
|
|
85
87
|
@IBOutlet weak var btnScanCard: UIButton!
|
|
86
88
|
|
|
@@ -89,6 +91,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
89
91
|
@IBOutlet weak var btnNextEmailView: FilledButton!
|
|
90
92
|
@IBOutlet weak var viewTxtFieldEmail: UIView!
|
|
91
93
|
@IBOutlet weak var OTPView: UIView!
|
|
94
|
+
@IBOutlet weak var btnSelectRecurringDateCardView: UIButton!
|
|
92
95
|
|
|
93
96
|
//OTP View
|
|
94
97
|
@IBOutlet weak var viewTextOTP1: UIView!
|
|
@@ -133,6 +136,11 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
133
136
|
@IBOutlet weak var txtFieldSelectPlanSingleSavedCard: TextFieldStackView!
|
|
134
137
|
@IBOutlet weak var txtFieldSelectDateSingleSavedCard: TextFieldStackView!
|
|
135
138
|
|
|
139
|
+
@IBOutlet weak var DropDownIconSingleSavedCard: UIImageView!
|
|
140
|
+
@IBOutlet weak var btnChosePlanSingleSavedCard: UIButton!
|
|
141
|
+
|
|
142
|
+
@IBOutlet weak var btnSelectRecurringDateSingleSavedCard: UIButton!
|
|
143
|
+
|
|
136
144
|
//Update Card
|
|
137
145
|
@IBOutlet weak var btnSelectUpdateCardView: UIButton!
|
|
138
146
|
@IBOutlet weak var imgViewCardUpdateCardView: UIImageView!
|
|
@@ -166,6 +174,10 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
166
174
|
@IBOutlet weak var txtFieldSelectDateNewCardView: TextFieldStackView!
|
|
167
175
|
@IBOutlet weak var heightViewNewCardFields: NSLayoutConstraint!
|
|
168
176
|
|
|
177
|
+
@IBOutlet weak var btnSelectRecurringDateNewCardView: UIButton!
|
|
178
|
+
@IBOutlet weak var btnSelectPlanNewCardView: UIButton!
|
|
179
|
+
@IBOutlet weak var dropDownIconNewCardView: UIImageView!
|
|
180
|
+
|
|
169
181
|
//Bank
|
|
170
182
|
@IBOutlet weak var viewBankFields: UIView!
|
|
171
183
|
@IBOutlet weak var txtFieldAccountName: UITextField!
|
|
@@ -189,9 +201,14 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
189
201
|
@IBOutlet weak var txtFieldEmailAccountView: TextFieldStackView!
|
|
190
202
|
@IBOutlet weak var viewTxtFieldEmailAccountView: UIView!
|
|
191
203
|
|
|
204
|
+
@IBOutlet weak var dropDownIconViewBankFields: UIImageView!
|
|
205
|
+
@IBOutlet weak var btnSelectPlanViewBankFields: UIButton!
|
|
206
|
+
|
|
192
207
|
@IBOutlet weak var viewSaveCardForFutureCardView: UIStackView!
|
|
193
208
|
@IBOutlet weak var heightViewBankFields: NSLayoutConstraint!
|
|
194
209
|
|
|
210
|
+
@IBOutlet weak var btnSelectRecurringDateViewBankFields: UIButton!
|
|
211
|
+
|
|
195
212
|
//GrailPay
|
|
196
213
|
@IBOutlet weak var grailPayBankLinkView: UIView!
|
|
197
214
|
@IBOutlet weak var viewGrailPaySavedBank: UIStackView!
|
|
@@ -216,6 +233,10 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
216
233
|
@IBOutlet weak var txtFieldEmailGrailPayView: TextFieldStackView!
|
|
217
234
|
@IBOutlet weak var viewTxtFieldEmailGrailPayView: UIView!
|
|
218
235
|
|
|
236
|
+
@IBOutlet weak var btnSelectPlanGrailPayBankView: UIButton!
|
|
237
|
+
@IBOutlet weak var dropDownIconGrailPayBankView: UIImageView!
|
|
238
|
+
@IBOutlet weak var btnSelectRecurringDateGrailPayView: UIButton!
|
|
239
|
+
|
|
219
240
|
//New GrailPay Account
|
|
220
241
|
@IBOutlet weak var viewAddNewGrailPayAccount: UIView!
|
|
221
242
|
@IBOutlet weak var lblGrailPayNewAccount: UILabel!
|
|
@@ -241,6 +262,11 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
241
262
|
@IBOutlet weak var imgViewBankIconGrailPayNewBank: UIImageView!
|
|
242
263
|
@IBOutlet weak var viewSaveAccountForFututeNewGrailPayAccountView: UIStackView!
|
|
243
264
|
|
|
265
|
+
@IBOutlet weak var btnSelectPlanNewGrailPayBankView: UIButton!
|
|
266
|
+
@IBOutlet weak var dropDownIconNewGrailPayBankView: UIImageView!
|
|
267
|
+
@IBOutlet weak var btnSelectRecurringDateNewGrailPayView: UIButton!
|
|
268
|
+
|
|
269
|
+
|
|
244
270
|
//SavedBank
|
|
245
271
|
@IBOutlet weak var viewSingleSavedAccount: UIView!
|
|
246
272
|
@IBOutlet weak var viewTermAndConditionsSingleAccountView: UIStackView!
|
|
@@ -260,6 +286,11 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
260
286
|
@IBOutlet weak var txtFieldSelectPlanSingleSavedBankView: TextFieldStackView!
|
|
261
287
|
@IBOutlet weak var txtFieldSelectDateSingleSavedBankView: TextFieldStackView!
|
|
262
288
|
|
|
289
|
+
@IBOutlet weak var dropDownIconSingleSavedBankView: UIImageView!
|
|
290
|
+
@IBOutlet weak var btnSelectPlanSingleSavedBankView: UIButton!
|
|
291
|
+
|
|
292
|
+
@IBOutlet weak var btnSelectRecurringDateSavedBankView: UIButton!
|
|
293
|
+
|
|
263
294
|
//New Bank
|
|
264
295
|
@IBOutlet weak var viewNewBankAccount: UIView!
|
|
265
296
|
@IBOutlet weak var txtFieldAccountNameNewAccountView: UITextField!
|
|
@@ -288,6 +319,10 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
288
319
|
@IBOutlet weak var lblAgreeToTheNewAccountView: UILabel!
|
|
289
320
|
@IBOutlet weak var lblTermsAndConditionsNewAccountView: UILabel!
|
|
290
321
|
|
|
322
|
+
@IBOutlet weak var dropDownIconNewBankAccountView: UIImageView!
|
|
323
|
+
@IBOutlet weak var btnSelectPlanNewBankAccountView: UIButton!
|
|
324
|
+
@IBOutlet weak var btnSelectRecurringDateNewBankView: UIButton!
|
|
325
|
+
|
|
291
326
|
//Crypto
|
|
292
327
|
@IBOutlet weak var viewCrypto: UIView!
|
|
293
328
|
@IBOutlet weak var viewCryptoTryAgain: UIView!
|
|
@@ -412,29 +447,190 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
412
447
|
|
|
413
448
|
private var isErrorScreenPresented = false
|
|
414
449
|
|
|
450
|
+
// Add a loader property
|
|
451
|
+
private let loadingIndicator: UIActivityIndicatorView = {
|
|
452
|
+
let indicator = UIActivityIndicatorView(style: .large)
|
|
453
|
+
indicator.translatesAutoresizingMaskIntoConstraints = false
|
|
454
|
+
indicator.hidesWhenStopped = true
|
|
455
|
+
indicator.color = .white // Adjust based on theme if needed
|
|
456
|
+
return indicator
|
|
457
|
+
}()
|
|
458
|
+
|
|
415
459
|
//MARK: - View Did Load
|
|
416
460
|
override func viewDidLoad() {
|
|
417
461
|
super.viewDidLoad()
|
|
418
|
-
logOut()
|
|
419
462
|
|
|
420
|
-
//
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
463
|
+
// Add and center the loader
|
|
464
|
+
view.addSubview(loadingIndicator)
|
|
465
|
+
NSLayoutConstraint.activate([
|
|
466
|
+
loadingIndicator.centerXAnchor.constraint(equalTo: view.centerXAnchor),
|
|
467
|
+
loadingIndicator.centerYAnchor.constraint(equalTo: view.centerYAnchor)
|
|
468
|
+
])
|
|
469
|
+
|
|
470
|
+
// Start loader
|
|
471
|
+
loadingIndicator.startAnimating()
|
|
472
|
+
|
|
473
|
+
// Avoid clearing persisted Hosted Checkout values on first open
|
|
474
|
+
// logOut()
|
|
475
|
+
|
|
476
|
+
// /// Check if paymentIntent and clientToken are available
|
|
477
|
+
// DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
|
|
478
|
+
// if let clientToken = self.request.clientToken,
|
|
479
|
+
// !clientToken.isEmpty {
|
|
480
|
+
//
|
|
481
|
+
// // Save clientToken in singleton
|
|
482
|
+
// UserStoreSingleton.shared.clientToken = clientToken
|
|
483
|
+
// print("Saved clientToken in UserStoreSingleton: \(clientToken)")
|
|
484
|
+
//
|
|
485
|
+
// // Case 1: Already exist → Directly call hostedCheckout
|
|
486
|
+
// print("Skipping paymentIntentApi, using existing values")
|
|
487
|
+
// self.request.hostedCheckoutsApi { success in
|
|
488
|
+
// DispatchQueue.main.async {
|
|
489
|
+
// if success {
|
|
490
|
+
// self.setupUI()
|
|
491
|
+
// } else {
|
|
492
|
+
// print("Hosted Checkout failed. Blocking SDK UI.")
|
|
493
|
+
//
|
|
494
|
+
// // Stop flow and notify failure
|
|
495
|
+
// let result = SDKResult(
|
|
496
|
+
// type: .error,
|
|
497
|
+
// chargeData: ["status": false, "message": "Hosted Checkout failed"],
|
|
498
|
+
// billingInfo: nil,
|
|
499
|
+
// additionalInfo: nil
|
|
500
|
+
// )
|
|
501
|
+
// NotificationCenter.default.post(name: NSNotification.Name("EasyPayResult"), object: result)
|
|
502
|
+
// self.dismiss(animated: true)
|
|
503
|
+
// }
|
|
504
|
+
// }
|
|
505
|
+
// }
|
|
506
|
+
// }
|
|
507
|
+
// else {
|
|
508
|
+
// // Case 2: No values → Call paymentIntentApi first
|
|
509
|
+
// print("Calling paymentIntentApi")
|
|
510
|
+
// self.request.paymentIntentApi { success in
|
|
511
|
+
// DispatchQueue.main.async {
|
|
512
|
+
// if success {
|
|
513
|
+
// print("Payment Intent completed")
|
|
514
|
+
// self.setupUI()
|
|
515
|
+
// } else {
|
|
516
|
+
// print("Payment Intent failed. Blocking SDK UI.")
|
|
517
|
+
//
|
|
518
|
+
// // Stop flow and notify failure
|
|
519
|
+
// let result = SDKResult(
|
|
520
|
+
// type: .error,
|
|
521
|
+
// chargeData: ["status": false, "message": "Payment Intent failed"],
|
|
522
|
+
// billingInfo: nil,
|
|
523
|
+
// additionalInfo: nil
|
|
524
|
+
// )
|
|
525
|
+
// NotificationCenter.default.post(name: NSNotification.Name("EasyPayResult"), object: result)
|
|
526
|
+
// self.dismiss(animated: true)
|
|
527
|
+
// }
|
|
528
|
+
// }
|
|
529
|
+
// }
|
|
530
|
+
// }
|
|
531
|
+
// }
|
|
532
|
+
|
|
533
|
+
|
|
534
|
+
// Re-save theme and client token after logOut to preserve them
|
|
535
|
+
if let themeConfiguration = request.appearanceSettings {
|
|
536
|
+
UserStoreSingleton.shared.updateThemeConfiguration(with: themeConfiguration)
|
|
537
|
+
}
|
|
538
|
+
if let clientToken = request.clientToken {
|
|
539
|
+
UserStoreSingleton.shared.clientToken = clientToken
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
// Perform API call
|
|
543
|
+
DispatchQueue.main.async {
|
|
544
|
+
if let clientToken = self.request.clientToken, !clientToken.isEmpty {
|
|
545
|
+
// Case 1: Client token exists → Call hostedCheckoutsApi
|
|
546
|
+
print("Calling hostedCheckoutsApi")
|
|
547
|
+
self.request.hostedCheckoutsApi { success in
|
|
425
548
|
DispatchQueue.main.async {
|
|
426
|
-
|
|
549
|
+
// Stop loader
|
|
550
|
+
self.loadingIndicator.stopAnimating()
|
|
551
|
+
|
|
552
|
+
if success {
|
|
553
|
+
print("Hosted Checkout completed")
|
|
554
|
+
// Hydrate fresh values saved by hostedCheckoutsApi before building UI
|
|
555
|
+
if let savedAmount = UserStoreSingleton.shared.amount,
|
|
556
|
+
let parsedAmount = Double(savedAmount) {
|
|
557
|
+
self.amount = parsedAmount
|
|
558
|
+
self.request.amount = parsedAmount
|
|
559
|
+
}
|
|
560
|
+
// Hydrate recurring and payment method data saved by Hosted Checkout
|
|
561
|
+
if let savedIsRecurring = UserStoreSingleton.shared.isRecurring,
|
|
562
|
+
savedIsRecurring == "1" {
|
|
563
|
+
self.request.is_recurring = true
|
|
564
|
+
if let cycles = UserStoreSingleton.shared.allowCycles,
|
|
565
|
+
let num = Int(cycles) {
|
|
566
|
+
self.request.numOfCycle = num
|
|
567
|
+
}
|
|
568
|
+
if let intervals = UserStoreSingleton.shared.interval {
|
|
569
|
+
let parts = intervals
|
|
570
|
+
.split(separator: ",")
|
|
571
|
+
.map { String($0).trimmingCharacters(in: .whitespaces) }
|
|
572
|
+
self.request.recurringIntervals = parts.compactMap { RecurringIntervals(rawValue: $0) }
|
|
573
|
+
}
|
|
574
|
+
if let startType = UserStoreSingleton.shared.startDateType {
|
|
575
|
+
self.request.recurringStartDateType = RecurringStartDateType(rawValue: startType)
|
|
576
|
+
}
|
|
577
|
+
if let startDate = UserStoreSingleton.shared.startDate {
|
|
578
|
+
self.request.recurringStartDate = startDate
|
|
579
|
+
}
|
|
580
|
+
} else {
|
|
581
|
+
self.request.is_recurring = false
|
|
582
|
+
self.request.numOfCycle = nil
|
|
583
|
+
self.request.recurringIntervals = nil
|
|
584
|
+
self.request.recurringStartDateType = nil
|
|
585
|
+
self.request.recurringStartDate = nil
|
|
586
|
+
}
|
|
587
|
+
// Hydrate selectable payment methods
|
|
588
|
+
if let savedMethods = UserStoreSingleton.shared.paymentMethods {
|
|
589
|
+
self.request.selectedPaymentMethods = savedMethods.compactMap { PaymentMethod(rawValue: $0) }
|
|
590
|
+
}
|
|
591
|
+
self.setupUI()
|
|
592
|
+
} else {
|
|
593
|
+
print("Hosted Checkout failed. Blocking SDK UI.")
|
|
594
|
+
// Notify failure
|
|
595
|
+
let result = SDKResult(
|
|
596
|
+
type: .error,
|
|
597
|
+
chargeData: ["status": false, "message": "Hosted Checkout failed"],
|
|
598
|
+
billingInfo: nil,
|
|
599
|
+
additionalInfo: nil
|
|
600
|
+
)
|
|
601
|
+
NotificationCenter.default.post(name: NSNotification.Name("EasyPayResult"), object: result)
|
|
602
|
+
self.dismiss(animated: true)
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
} else {
|
|
607
|
+
// Case 2: No client token → Call paymentIntentApi
|
|
608
|
+
print("Calling paymentIntentApi")
|
|
609
|
+
self.request.paymentIntentApi { success in
|
|
610
|
+
DispatchQueue.main.async {
|
|
611
|
+
// Stop loader
|
|
612
|
+
self.loadingIndicator.stopAnimating()
|
|
613
|
+
|
|
614
|
+
if success {
|
|
615
|
+
print("Payment Intent completed")
|
|
616
|
+
self.setupUI()
|
|
617
|
+
} else {
|
|
618
|
+
print("Payment Intent failed. Blocking SDK UI.")
|
|
619
|
+
// Notify failure
|
|
620
|
+
let result = SDKResult(
|
|
621
|
+
type: .error,
|
|
622
|
+
chargeData: ["status": false, "message": "Payment Intent failed"],
|
|
623
|
+
billingInfo: nil,
|
|
624
|
+
additionalInfo: nil
|
|
625
|
+
)
|
|
626
|
+
NotificationCenter.default.post(name: NSNotification.Name("EasyPayResult"), object: result)
|
|
627
|
+
self.dismiss(animated: true)
|
|
628
|
+
}
|
|
427
629
|
}
|
|
428
|
-
// Continue flow
|
|
429
|
-
} else {
|
|
430
|
-
print("Payment Intent failed")
|
|
431
|
-
// Handle failure
|
|
432
630
|
}
|
|
433
631
|
}
|
|
434
632
|
}
|
|
435
633
|
|
|
436
|
-
// request.printAsJSON()
|
|
437
|
-
|
|
438
634
|
viewAppearanceOn()
|
|
439
635
|
|
|
440
636
|
uiFinishingTouchElements()
|
|
@@ -616,6 +812,23 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
616
812
|
|
|
617
813
|
}
|
|
618
814
|
|
|
815
|
+
private func setupUI() {
|
|
816
|
+
// Update merchant label
|
|
817
|
+
lblEasyMerchantOne.text = "POWERED BY \(UserStoreSingleton.shared.companyName?.uppercased() ?? "")"
|
|
818
|
+
|
|
819
|
+
// Apply visibility and layout settings
|
|
820
|
+
viewAppearanceOn()
|
|
821
|
+
|
|
822
|
+
// Apply theme settings
|
|
823
|
+
uiFinishingTouchElements()
|
|
824
|
+
|
|
825
|
+
// Force layout update
|
|
826
|
+
DispatchQueue.main.async {
|
|
827
|
+
self.view.setNeedsLayout()
|
|
828
|
+
self.view.layoutIfNeeded()
|
|
829
|
+
}
|
|
830
|
+
}
|
|
831
|
+
|
|
619
832
|
//MARK: - View Wiil Appear
|
|
620
833
|
override func viewWillAppear(_ animated: Bool) {
|
|
621
834
|
uiFinishingTouchElements()
|
|
@@ -649,59 +862,270 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
649
862
|
self.viewCrypto.isHidden = true
|
|
650
863
|
|
|
651
864
|
if request.is_recurring == true {
|
|
652
|
-
self.txtFieldChosePlanCard.isHidden = false
|
|
653
|
-
if request.recurringStartDateType == .custom {
|
|
654
|
-
self.txtFieldStartDateCard.isHidden = false
|
|
655
|
-
self.txtFieldSelectDateSingleSavedCard.isHidden = false
|
|
656
|
-
self.txtFieldSelectDateNewCardView.isHidden = false
|
|
657
|
-
self.txtFieldSelectDateViewBankFields.isHidden = false
|
|
658
|
-
self.txtFieldSelectDateSingleSavedBankView.isHidden = false
|
|
659
|
-
self.txtFieldSelectDateNewAccountView.isHidden = false
|
|
660
|
-
self.txtFieldSelectDateGrailPayBankView.isHidden = false
|
|
661
|
-
self.txtFieldSelectDateNewGrailPayBankView.isHidden = false
|
|
662
|
-
|
|
663
|
-
if request.saveAccount == false {
|
|
664
|
-
self.heightViewBankFields.constant = 800
|
|
665
|
-
self.heightViewNewAccountFields.constant = 850
|
|
666
|
-
} else {
|
|
667
|
-
self.heightViewBankFields.constant = 846
|
|
668
|
-
self.heightViewNewAccountFields.constant = 900
|
|
669
|
-
}
|
|
670
|
-
|
|
671
|
-
if request.saveCard == false {
|
|
672
|
-
self.heightViewNewCardFields.constant = 606
|
|
673
|
-
} else {
|
|
674
|
-
self.heightViewNewCardFields.constant = 658
|
|
675
|
-
}
|
|
676
|
-
|
|
677
|
-
self.heightSubViewNewAccountFields.constant = 870
|
|
678
|
-
} else {
|
|
679
|
-
self.txtFieldStartDateCard.isHidden = true
|
|
680
|
-
self.txtFieldSelectDateSingleSavedCard.isHidden = true
|
|
681
|
-
self.txtFieldSelectDateNewCardView.isHidden = true
|
|
682
|
-
self.txtFieldSelectDateViewBankFields.isHidden = true
|
|
683
|
-
self.txtFieldSelectDateSingleSavedBankView.isHidden = true
|
|
684
|
-
self.txtFieldSelectDateNewAccountView.isHidden = true
|
|
685
|
-
self.txtFieldSelectDateGrailPayBankView.isHidden = true
|
|
686
|
-
self.txtFieldSelectDateNewGrailPayBankView.isHidden = true
|
|
687
|
-
|
|
688
|
-
if request.saveAccount == false {
|
|
689
|
-
self.heightViewBankFields.constant = 710
|
|
690
|
-
self.heightViewNewAccountFields.constant = 752
|
|
691
|
-
} else {
|
|
692
|
-
self.heightViewBankFields.constant = 750
|
|
693
|
-
self.heightViewNewAccountFields.constant = 806
|
|
694
|
-
}
|
|
695
|
-
|
|
696
|
-
if request.saveCard == false {
|
|
697
|
-
self.heightViewNewCardFields.constant = 600
|
|
698
|
-
} else {
|
|
699
|
-
self.heightViewNewCardFields.constant = 563
|
|
700
|
-
}
|
|
701
|
-
|
|
702
|
-
self.heightSubViewNewAccountFields.constant = 755
|
|
703
|
-
}
|
|
704
865
|
|
|
866
|
+
// Check if there is only one recurring interval
|
|
867
|
+
if let intervals = request.recurringIntervals, intervals.count == 1, let singleInterval = intervals.first {
|
|
868
|
+
// Set the text field to the single interval's display name
|
|
869
|
+
self.txtFieldChosePlanCard.text = singleInterval.displayName
|
|
870
|
+
self.txtFieldChosePlanCard.isUserInteractionEnabled = false
|
|
871
|
+
self.txtFieldChosePlanCard.isEnabled = false
|
|
872
|
+
self.btnChosePlanCardView.isEnabled = false
|
|
873
|
+
self.imgViewChosePlanCardDropIcon.isHidden = true
|
|
874
|
+
|
|
875
|
+
self.txtFieldSelectPlanSingleSavedCard.text = singleInterval.displayName
|
|
876
|
+
self.txtFieldSelectPlanSingleSavedCard.isUserInteractionEnabled = false
|
|
877
|
+
self.txtFieldSelectPlanSingleSavedCard.isEnabled = false
|
|
878
|
+
self.btnChosePlanSingleSavedCard.isEnabled = false
|
|
879
|
+
self.DropDownIconSingleSavedCard.isHidden = true
|
|
880
|
+
|
|
881
|
+
self.txtFieldSelectPlanNewCardView.text = singleInterval.displayName
|
|
882
|
+
self.txtFieldSelectPlanNewCardView.isUserInteractionEnabled = false
|
|
883
|
+
self.txtFieldSelectPlanNewCardView.isEnabled = false
|
|
884
|
+
self.btnSelectPlanNewCardView.isEnabled = false
|
|
885
|
+
self.dropDownIconNewCardView.isHidden = true
|
|
886
|
+
|
|
887
|
+
self.txtFieldSelectPlanViewBankFields.text = singleInterval.displayName
|
|
888
|
+
self.txtFieldSelectPlanViewBankFields.isUserInteractionEnabled = false
|
|
889
|
+
self.txtFieldSelectPlanViewBankFields.isEnabled = false
|
|
890
|
+
self.btnSelectPlanViewBankFields.isEnabled = false
|
|
891
|
+
self.dropDownIconViewBankFields.isHidden = true
|
|
892
|
+
|
|
893
|
+
self.txtFieldChosePlanGrailPayBankView.text = singleInterval.displayName
|
|
894
|
+
self.txtFieldChosePlanGrailPayBankView.isUserInteractionEnabled = false
|
|
895
|
+
self.txtFieldChosePlanGrailPayBankView.isEnabled = false
|
|
896
|
+
self.btnSelectPlanGrailPayBankView.isEnabled = false
|
|
897
|
+
self.dropDownIconGrailPayBankView.isHidden = true
|
|
898
|
+
|
|
899
|
+
self.txtFieldChosePlanNewGrailPayBankView.text = singleInterval.displayName
|
|
900
|
+
self.txtFieldChosePlanNewGrailPayBankView.isUserInteractionEnabled = false
|
|
901
|
+
self.txtFieldChosePlanNewGrailPayBankView.isEnabled = false
|
|
902
|
+
self.btnSelectPlanNewGrailPayBankView.isEnabled = false
|
|
903
|
+
self.dropDownIconNewGrailPayBankView.isHidden = true
|
|
904
|
+
|
|
905
|
+
self.txtFieldSelectPlanSingleSavedBankView.text = singleInterval.displayName
|
|
906
|
+
self.txtFieldSelectPlanSingleSavedBankView.isUserInteractionEnabled = false
|
|
907
|
+
self.txtFieldSelectPlanSingleSavedBankView.isEnabled = false
|
|
908
|
+
self.btnSelectPlanSingleSavedBankView.isEnabled = false
|
|
909
|
+
self.dropDownIconSingleSavedBankView.isHidden = true
|
|
910
|
+
|
|
911
|
+
self.txtFieldSelectPlanNewAccountView.text = singleInterval.displayName
|
|
912
|
+
self.txtFieldSelectPlanNewAccountView.isUserInteractionEnabled = false
|
|
913
|
+
self.txtFieldSelectPlanNewAccountView.isEnabled = false
|
|
914
|
+
self.btnSelectPlanNewBankAccountView.isEnabled = false
|
|
915
|
+
self.dropDownIconNewBankAccountView.isHidden = true
|
|
916
|
+
} else {
|
|
917
|
+
// For multiple intervals, keep the button enabled and text field editable
|
|
918
|
+
self.btnChosePlanCardView.isEnabled = true
|
|
919
|
+
self.txtFieldChosePlanCard.isUserInteractionEnabled = true
|
|
920
|
+
self.txtFieldChosePlanCard.isEnabled = true
|
|
921
|
+
self.txtFieldChosePlanCard.text = ""
|
|
922
|
+
self.imgViewChosePlanCardDropIcon.isHidden = false
|
|
923
|
+
|
|
924
|
+
self.btnChosePlanSingleSavedCard.isEnabled = true
|
|
925
|
+
self.txtFieldSelectPlanSingleSavedCard.isUserInteractionEnabled = true
|
|
926
|
+
self.txtFieldSelectPlanSingleSavedCard.isEnabled = true
|
|
927
|
+
self.txtFieldSelectPlanSingleSavedCard.text = ""
|
|
928
|
+
self.DropDownIconSingleSavedCard.isHidden = false
|
|
929
|
+
|
|
930
|
+
self.btnSelectPlanNewCardView.isEnabled = true
|
|
931
|
+
self.txtFieldSelectPlanNewCardView.isUserInteractionEnabled = true
|
|
932
|
+
self.txtFieldSelectPlanNewCardView.isEnabled = true
|
|
933
|
+
self.txtFieldSelectPlanNewCardView.text = ""
|
|
934
|
+
self.dropDownIconNewCardView.isHidden = false
|
|
935
|
+
|
|
936
|
+
self.btnSelectPlanViewBankFields.isEnabled = true
|
|
937
|
+
self.txtFieldSelectPlanViewBankFields.isUserInteractionEnabled = true
|
|
938
|
+
self.txtFieldSelectPlanViewBankFields.isEnabled = true
|
|
939
|
+
self.txtFieldSelectPlanViewBankFields.text = ""
|
|
940
|
+
self.dropDownIconViewBankFields.isHidden = false
|
|
941
|
+
|
|
942
|
+
self.btnSelectPlanGrailPayBankView.isEnabled = true
|
|
943
|
+
self.txtFieldChosePlanGrailPayBankView.isUserInteractionEnabled = true
|
|
944
|
+
self.txtFieldChosePlanGrailPayBankView.isEnabled = true
|
|
945
|
+
self.txtFieldChosePlanGrailPayBankView.text = ""
|
|
946
|
+
self.dropDownIconGrailPayBankView.isHidden = false
|
|
947
|
+
|
|
948
|
+
self.btnSelectPlanNewGrailPayBankView.isEnabled = true
|
|
949
|
+
self.txtFieldChosePlanNewGrailPayBankView.isUserInteractionEnabled = true
|
|
950
|
+
self.txtFieldChosePlanNewGrailPayBankView.isEnabled = true
|
|
951
|
+
self.txtFieldChosePlanNewGrailPayBankView.text = ""
|
|
952
|
+
self.dropDownIconNewGrailPayBankView.isHidden = false
|
|
953
|
+
|
|
954
|
+
self.btnSelectPlanSingleSavedBankView.isEnabled = true
|
|
955
|
+
self.txtFieldSelectPlanSingleSavedBankView.isUserInteractionEnabled = true
|
|
956
|
+
self.txtFieldSelectPlanSingleSavedBankView.isEnabled = true
|
|
957
|
+
self.txtFieldSelectPlanSingleSavedBankView.text = ""
|
|
958
|
+
self.dropDownIconSingleSavedBankView.isHidden = false
|
|
959
|
+
|
|
960
|
+
self.btnSelectPlanNewBankAccountView.isEnabled = true
|
|
961
|
+
self.txtFieldSelectPlanNewAccountView.isUserInteractionEnabled = true
|
|
962
|
+
self.txtFieldSelectPlanNewAccountView.isEnabled = true
|
|
963
|
+
self.txtFieldSelectPlanNewAccountView.text = ""
|
|
964
|
+
self.dropDownIconNewBankAccountView.isHidden = false
|
|
965
|
+
}
|
|
966
|
+
|
|
967
|
+
// Set the start date for txtFieldStartDateCard
|
|
968
|
+
if let startDate = UserStoreSingleton.shared.startDate {
|
|
969
|
+
let dateFormatter = DateFormatter()
|
|
970
|
+
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" // input format
|
|
971
|
+
if let date = dateFormatter.date(from: startDate) {
|
|
972
|
+
dateFormatter.dateFormat = "dd/MM/yyyy" // output format
|
|
973
|
+
self.txtFieldStartDateCard.text = dateFormatter.string(from: date)
|
|
974
|
+
self.txtFieldSelectDateSingleSavedCard.text = dateFormatter.string(from: date)
|
|
975
|
+
self.txtFieldSelectDateNewCardView.text = dateFormatter.string(from: date)
|
|
976
|
+
self.txtFieldSelectDateViewBankFields.text = dateFormatter.string(from: date)
|
|
977
|
+
self.txtFieldSelectDateSingleSavedBankView.text = dateFormatter.string(from: date)
|
|
978
|
+
self.txtFieldSelectDateNewAccountView.text = dateFormatter.string(from: date)
|
|
979
|
+
self.txtFieldSelectDateGrailPayBankView.text = dateFormatter.string(from: date)
|
|
980
|
+
self.txtFieldSelectDateNewGrailPayBankView.text = dateFormatter.string(from: date)
|
|
981
|
+
}
|
|
982
|
+
}
|
|
983
|
+
|
|
984
|
+
if request.recurringStartDateType == .fixed {
|
|
985
|
+
self.btnSelectRecurringDateCardView.isEnabled = false
|
|
986
|
+
self.txtFieldStartDateCard.isUserInteractionEnabled = false
|
|
987
|
+
self.txtFieldStartDateCard.isEnabled = false
|
|
988
|
+
|
|
989
|
+
self.btnSelectRecurringDateSingleSavedCard.isEnabled = false
|
|
990
|
+
self.txtFieldSelectDateSingleSavedCard.isUserInteractionEnabled = false
|
|
991
|
+
self.txtFieldSelectDateSingleSavedCard.isEnabled = false
|
|
992
|
+
|
|
993
|
+
self.btnSelectRecurringDateNewCardView.isEnabled = false
|
|
994
|
+
self.txtFieldSelectDateNewCardView.isUserInteractionEnabled = false
|
|
995
|
+
self.txtFieldSelectDateNewCardView.isEnabled = false
|
|
996
|
+
|
|
997
|
+
self.btnSelectRecurringDateViewBankFields.isEnabled = false
|
|
998
|
+
self.txtFieldSelectDateViewBankFields.isUserInteractionEnabled = false
|
|
999
|
+
self.txtFieldSelectDateViewBankFields.isEnabled = false
|
|
1000
|
+
|
|
1001
|
+
self.btnSelectRecurringDateGrailPayView.isEnabled = false
|
|
1002
|
+
self.txtFieldSelectDateGrailPayBankView.isUserInteractionEnabled = false
|
|
1003
|
+
self.txtFieldSelectDateGrailPayBankView.isEnabled = false
|
|
1004
|
+
|
|
1005
|
+
self.btnSelectRecurringDateNewGrailPayView.isEnabled = false
|
|
1006
|
+
self.txtFieldSelectDateNewGrailPayBankView.isUserInteractionEnabled = false
|
|
1007
|
+
self.txtFieldSelectDateNewGrailPayBankView.isEnabled = false
|
|
1008
|
+
|
|
1009
|
+
self.btnSelectRecurringDateSavedBankView.isEnabled = false
|
|
1010
|
+
self.txtFieldSelectDateSingleSavedBankView.isUserInteractionEnabled = false
|
|
1011
|
+
self.txtFieldSelectDateSingleSavedBankView.isEnabled = false
|
|
1012
|
+
|
|
1013
|
+
self.btnSelectRecurringDateNewBankView.isEnabled = false
|
|
1014
|
+
self.txtFieldSelectDateNewAccountView.isUserInteractionEnabled = false
|
|
1015
|
+
self.txtFieldSelectDateNewAccountView.isEnabled = false
|
|
1016
|
+
}
|
|
1017
|
+
else {
|
|
1018
|
+
self.btnSelectRecurringDateCardView.isEnabled = true
|
|
1019
|
+
self.txtFieldStartDateCard.isUserInteractionEnabled = true
|
|
1020
|
+
self.txtFieldStartDateCard.isEnabled = true
|
|
1021
|
+
|
|
1022
|
+
self.btnSelectRecurringDateSingleSavedCard.isEnabled = true
|
|
1023
|
+
self.txtFieldSelectDateSingleSavedCard.isUserInteractionEnabled = true
|
|
1024
|
+
self.txtFieldSelectDateSingleSavedCard.isEnabled = true
|
|
1025
|
+
|
|
1026
|
+
self.btnSelectRecurringDateNewCardView.isEnabled = true
|
|
1027
|
+
self.txtFieldSelectDateNewCardView.isUserInteractionEnabled = true
|
|
1028
|
+
self.txtFieldSelectDateNewCardView.isEnabled = true
|
|
1029
|
+
|
|
1030
|
+
self.btnSelectRecurringDateViewBankFields.isEnabled = true
|
|
1031
|
+
self.txtFieldSelectDateViewBankFields.isUserInteractionEnabled = true
|
|
1032
|
+
self.txtFieldSelectDateViewBankFields.isEnabled = true
|
|
1033
|
+
|
|
1034
|
+
self.btnSelectRecurringDateGrailPayView.isEnabled = true
|
|
1035
|
+
self.txtFieldSelectDateGrailPayBankView.isUserInteractionEnabled = true
|
|
1036
|
+
self.txtFieldSelectDateGrailPayBankView.isEnabled = true
|
|
1037
|
+
|
|
1038
|
+
self.btnSelectRecurringDateNewGrailPayView.isEnabled = true
|
|
1039
|
+
self.txtFieldSelectDateNewGrailPayBankView.isUserInteractionEnabled = true
|
|
1040
|
+
self.txtFieldSelectDateNewGrailPayBankView.isEnabled = true
|
|
1041
|
+
|
|
1042
|
+
self.btnSelectRecurringDateSavedBankView.isEnabled = true
|
|
1043
|
+
self.txtFieldSelectDateSingleSavedBankView.isUserInteractionEnabled = true
|
|
1044
|
+
self.txtFieldSelectDateSingleSavedBankView.isEnabled = true
|
|
1045
|
+
|
|
1046
|
+
self.btnSelectRecurringDateNewBankView.isEnabled = true
|
|
1047
|
+
self.txtFieldSelectDateNewAccountView.isUserInteractionEnabled = true
|
|
1048
|
+
self.txtFieldSelectDateNewAccountView.isEnabled = true
|
|
1049
|
+
}
|
|
1050
|
+
|
|
1051
|
+
self.txtFieldStartDateCard.isHidden = false
|
|
1052
|
+
self.txtFieldSelectDateSingleSavedCard.isHidden = false
|
|
1053
|
+
self.txtFieldSelectDateNewCardView.isHidden = false
|
|
1054
|
+
self.txtFieldSelectDateViewBankFields.isHidden = false
|
|
1055
|
+
self.txtFieldSelectDateSingleSavedBankView.isHidden = false
|
|
1056
|
+
self.txtFieldSelectDateNewAccountView.isHidden = false
|
|
1057
|
+
self.txtFieldSelectDateGrailPayBankView.isHidden = false
|
|
1058
|
+
self.txtFieldSelectDateNewGrailPayBankView.isHidden = false
|
|
1059
|
+
|
|
1060
|
+
if request.saveAccount == false {
|
|
1061
|
+
self.heightViewBankFields.constant = 802
|
|
1062
|
+
self.heightViewNewAccountFields.constant = 852
|
|
1063
|
+
} else {
|
|
1064
|
+
self.heightViewBankFields.constant = 848
|
|
1065
|
+
self.heightViewNewAccountFields.constant = 902
|
|
1066
|
+
}
|
|
1067
|
+
|
|
1068
|
+
if request.saveCard == false {
|
|
1069
|
+
self.heightViewNewCardFields.constant = 595
|
|
1070
|
+
} else {
|
|
1071
|
+
self.heightViewNewCardFields.constant = 648
|
|
1072
|
+
}
|
|
1073
|
+
|
|
1074
|
+
self.heightSubViewNewAccountFields.constant = 872
|
|
1075
|
+
|
|
1076
|
+
// if request.recurringStartDateType == .custom {
|
|
1077
|
+
// self.txtFieldStartDateCard.isHidden = false
|
|
1078
|
+
// self.txtFieldSelectDateSingleSavedCard.isHidden = false
|
|
1079
|
+
// self.txtFieldSelectDateNewCardView.isHidden = false
|
|
1080
|
+
// self.txtFieldSelectDateViewBankFields.isHidden = false
|
|
1081
|
+
// self.txtFieldSelectDateSingleSavedBankView.isHidden = false
|
|
1082
|
+
// self.txtFieldSelectDateNewAccountView.isHidden = false
|
|
1083
|
+
// self.txtFieldSelectDateGrailPayBankView.isHidden = false
|
|
1084
|
+
// self.txtFieldSelectDateNewGrailPayBankView.isHidden = false
|
|
1085
|
+
//
|
|
1086
|
+
// if request.saveAccount == false {
|
|
1087
|
+
// self.heightViewBankFields.constant = 790
|
|
1088
|
+
// self.heightViewNewAccountFields.constant = 840
|
|
1089
|
+
// } else {
|
|
1090
|
+
// self.heightViewBankFields.constant = 836
|
|
1091
|
+
// self.heightViewNewAccountFields.constant = 890
|
|
1092
|
+
// }
|
|
1093
|
+
//
|
|
1094
|
+
// if request.saveCard == false {
|
|
1095
|
+
// self.heightViewNewCardFields.constant = 595
|
|
1096
|
+
// } else {
|
|
1097
|
+
// self.heightViewNewCardFields.constant = 648
|
|
1098
|
+
// }
|
|
1099
|
+
//
|
|
1100
|
+
// self.heightSubViewNewAccountFields.constant = 860
|
|
1101
|
+
// } else {
|
|
1102
|
+
// self.txtFieldStartDateCard.isHidden = true
|
|
1103
|
+
// self.txtFieldSelectDateSingleSavedCard.isHidden = true
|
|
1104
|
+
// self.txtFieldSelectDateNewCardView.isHidden = true
|
|
1105
|
+
// self.txtFieldSelectDateViewBankFields.isHidden = true
|
|
1106
|
+
// self.txtFieldSelectDateSingleSavedBankView.isHidden = true
|
|
1107
|
+
// self.txtFieldSelectDateNewAccountView.isHidden = true
|
|
1108
|
+
// self.txtFieldSelectDateGrailPayBankView.isHidden = true
|
|
1109
|
+
// self.txtFieldSelectDateNewGrailPayBankView.isHidden = true
|
|
1110
|
+
//
|
|
1111
|
+
// if request.saveAccount == false {
|
|
1112
|
+
// self.heightViewBankFields.constant = 700
|
|
1113
|
+
// self.heightViewNewAccountFields.constant = 742
|
|
1114
|
+
// } else {
|
|
1115
|
+
// self.heightViewBankFields.constant = 740
|
|
1116
|
+
// self.heightViewNewAccountFields.constant = 796
|
|
1117
|
+
// }
|
|
1118
|
+
//
|
|
1119
|
+
// if request.saveCard == false {
|
|
1120
|
+
// self.heightViewNewCardFields.constant = 500
|
|
1121
|
+
// } else {
|
|
1122
|
+
// self.heightViewNewCardFields.constant = 553
|
|
1123
|
+
// }
|
|
1124
|
+
//
|
|
1125
|
+
// self.heightSubViewNewAccountFields.constant = 745
|
|
1126
|
+
// }
|
|
1127
|
+
|
|
1128
|
+
self.txtFieldChosePlanCard.isHidden = false
|
|
705
1129
|
self.txtFieldSelectPlanSingleSavedCard.isHidden = false
|
|
706
1130
|
self.txtFieldSelectPlanNewCardView.isHidden = false
|
|
707
1131
|
self.txtFieldSelectPlanViewBankFields.isHidden = false
|
|
@@ -729,11 +1153,11 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
729
1153
|
self.txtFieldSelectDateNewGrailPayBankView.isHidden = true
|
|
730
1154
|
|
|
731
1155
|
if request.saveAccount == false {
|
|
732
|
-
self.heightViewBankFields.constant =
|
|
733
|
-
self.heightViewNewAccountFields.constant =
|
|
1156
|
+
self.heightViewBankFields.constant = 616
|
|
1157
|
+
self.heightViewNewAccountFields.constant = 656
|
|
734
1158
|
} else {
|
|
735
|
-
self.heightViewBankFields.constant =
|
|
736
|
-
self.heightViewNewAccountFields.constant =
|
|
1159
|
+
self.heightViewBankFields.constant = 656
|
|
1160
|
+
self.heightViewNewAccountFields.constant = 716
|
|
737
1161
|
}
|
|
738
1162
|
|
|
739
1163
|
if request.saveCard == false {
|
|
@@ -742,7 +1166,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
742
1166
|
self.heightViewNewCardFields.constant = 458
|
|
743
1167
|
}
|
|
744
1168
|
|
|
745
|
-
self.heightSubViewNewAccountFields.constant =
|
|
1169
|
+
self.heightSubViewNewAccountFields.constant = 662
|
|
746
1170
|
}
|
|
747
1171
|
|
|
748
1172
|
if selectedPaymentMethod == "Card" {
|
|
@@ -793,12 +1217,13 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
793
1217
|
btnNextTopCon.constant = 0
|
|
794
1218
|
if request.is_recurring == true {
|
|
795
1219
|
txtFieldSelectPlanSingleSavedCard.isHidden = false
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
1220
|
+
txtFieldSelectDateSingleSavedCard.isHidden = false
|
|
1221
|
+
// if request.recurringStartDateType == .custom {
|
|
1222
|
+
// txtFieldSelectDateSingleSavedCard.isHidden = false
|
|
1223
|
+
// }
|
|
1224
|
+
// else {
|
|
1225
|
+
// txtFieldSelectDateSingleSavedCard.isHidden = true
|
|
1226
|
+
// }
|
|
802
1227
|
}
|
|
803
1228
|
else {
|
|
804
1229
|
txtFieldSelectPlanSingleSavedCard.isHidden = true
|
|
@@ -883,12 +1308,13 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
883
1308
|
self.btnPayNowSingleAccountView.isHidden = false
|
|
884
1309
|
if request.is_recurring == true {
|
|
885
1310
|
self.txtFieldSelectPlanSingleSavedBankView.isHidden = false
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
1311
|
+
self.txtFieldSelectDateSingleSavedBankView.isHidden = false
|
|
1312
|
+
// if request.recurringStartDateType == .custom {
|
|
1313
|
+
// self.txtFieldSelectDateSingleSavedBankView.isHidden = false
|
|
1314
|
+
// }
|
|
1315
|
+
// else {
|
|
1316
|
+
// self.txtFieldSelectDateSingleSavedBankView.isHidden = true
|
|
1317
|
+
// }
|
|
892
1318
|
}
|
|
893
1319
|
else {
|
|
894
1320
|
self.txtFieldSelectPlanSingleSavedBankView.isHidden = true
|
|
@@ -942,12 +1368,12 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
942
1368
|
self.viewBtnShowSavedCardHeight.constant = 0
|
|
943
1369
|
self.viewBtnShowSavedCardTopCon.constant = 0
|
|
944
1370
|
}
|
|
945
|
-
// else {
|
|
946
|
-
// self.viewBtnShowSavedCards.isHidden = false
|
|
947
|
-
// self.lblBtnShowSaveCard.text = "Show Saved Accounts"
|
|
948
|
-
// self.viewBtnShowSavedCardHeight.constant = 50
|
|
949
|
-
// self.viewBtnShowSavedCardTopCon.constant = 20
|
|
950
|
-
// }
|
|
1371
|
+
// else {
|
|
1372
|
+
// self.viewBtnShowSavedCards.isHidden = false
|
|
1373
|
+
// self.lblBtnShowSaveCard.text = "Show Saved Accounts"
|
|
1374
|
+
// self.viewBtnShowSavedCardHeight.constant = 50
|
|
1375
|
+
// self.viewBtnShowSavedCardTopCon.constant = 20
|
|
1376
|
+
// }
|
|
951
1377
|
|
|
952
1378
|
self.OTPView.isHidden = true
|
|
953
1379
|
self.emailView.isHidden = true
|
|
@@ -1816,16 +2242,16 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
1816
2242
|
}
|
|
1817
2243
|
|
|
1818
2244
|
@IBAction func actionBtnSelectPlanViewBankFields(_ sender: UIButton) {
|
|
1819
|
-
guard
|
|
2245
|
+
guard let plans = request?.recurringIntervals, !plans.isEmpty else {
|
|
1820
2246
|
print("No recurring intervals available.")
|
|
1821
2247
|
return
|
|
1822
2248
|
}
|
|
1823
2249
|
|
|
1824
|
-
// Check if current payment method is only Bank
|
|
1825
|
-
if request?.selectedPaymentMethods.contains(.Bank) == true {
|
|
1826
|
-
// Remove 'daily' from plans
|
|
1827
|
-
plans.removeAll { $0 == .daily }
|
|
1828
|
-
}
|
|
2250
|
+
// // Check if current payment method is only Bank
|
|
2251
|
+
// if request?.selectedPaymentMethods.contains(.Bank) == true {
|
|
2252
|
+
// // Remove 'daily' from plans
|
|
2253
|
+
// plans.removeAll { $0 == .daily }
|
|
2254
|
+
// }
|
|
1829
2255
|
|
|
1830
2256
|
// Now present the filtered plans
|
|
1831
2257
|
PlanSelector.presentPlanOptions(from: self, sourceView: sender, allowedPlans: plans) { selectedPlan in
|
|
@@ -1842,16 +2268,16 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
1842
2268
|
}
|
|
1843
2269
|
|
|
1844
2270
|
@IBAction func actionBtnSelectPlanSingleSavedAccount(_ sender: UIButton) {
|
|
1845
|
-
guard
|
|
2271
|
+
guard let plans = request?.recurringIntervals, !plans.isEmpty else {
|
|
1846
2272
|
print("No recurring intervals available.")
|
|
1847
2273
|
return
|
|
1848
2274
|
}
|
|
1849
2275
|
|
|
1850
|
-
// Check if current payment method is only Bank
|
|
1851
|
-
if request?.selectedPaymentMethods.contains(.Bank) == true {
|
|
1852
|
-
// Remove 'daily' from plans
|
|
1853
|
-
plans.removeAll { $0 == .daily }
|
|
1854
|
-
}
|
|
2276
|
+
// // Check if current payment method is only Bank
|
|
2277
|
+
// if request?.selectedPaymentMethods.contains(.Bank) == true {
|
|
2278
|
+
// // Remove 'daily' from plans
|
|
2279
|
+
// plans.removeAll { $0 == .daily }
|
|
2280
|
+
// }
|
|
1855
2281
|
|
|
1856
2282
|
PlanSelector.presentPlanOptions(from: self, sourceView: sender, allowedPlans: plans) { selectedPlan in
|
|
1857
2283
|
self.txtFieldSelectPlanSingleSavedBankView.text = selectedPlan
|
|
@@ -1867,16 +2293,16 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
1867
2293
|
}
|
|
1868
2294
|
|
|
1869
2295
|
@IBAction func actionBtnSelectPlanNewAccountView(_ sender: UIButton) {
|
|
1870
|
-
guard
|
|
2296
|
+
guard let plans = request?.recurringIntervals, !plans.isEmpty else {
|
|
1871
2297
|
print("No recurring intervals available.")
|
|
1872
2298
|
return
|
|
1873
2299
|
}
|
|
1874
2300
|
|
|
1875
|
-
// Check if current payment method is only Bank
|
|
1876
|
-
if request?.selectedPaymentMethods.contains(.Bank) == true {
|
|
1877
|
-
// Remove 'daily' from plans
|
|
1878
|
-
plans.removeAll { $0 == .daily }
|
|
1879
|
-
}
|
|
2301
|
+
// // Check if current payment method is only Bank
|
|
2302
|
+
// if request?.selectedPaymentMethods.contains(.Bank) == true {
|
|
2303
|
+
// // Remove 'daily' from plans
|
|
2304
|
+
// plans.removeAll { $0 == .daily }
|
|
2305
|
+
// }
|
|
1880
2306
|
|
|
1881
2307
|
PlanSelector.presentPlanOptions(from: self, sourceView: sender, allowedPlans: plans) { selectedPlan in
|
|
1882
2308
|
self.txtFieldSelectPlanNewAccountView.text = selectedPlan
|
|
@@ -1969,11 +2395,16 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
1969
2395
|
btnNextHeight.constant = 0
|
|
1970
2396
|
btnNextTopCon.constant = isSelectForPay ? 0 : 8
|
|
1971
2397
|
|
|
2398
|
+
// // Handle recurring fields visibility
|
|
2399
|
+
// let showRecurringFields = isSelectForPay && request.is_recurring == true
|
|
2400
|
+
// let isCustomRecurring = request.recurringStartDateType == .custom
|
|
2401
|
+
// txtFieldSelectPlanSingleSavedCard.isHidden = !showRecurringFields
|
|
2402
|
+
// txtFieldSelectDateSingleSavedCard.isHidden = !(showRecurringFields && isCustomRecurring)
|
|
2403
|
+
|
|
1972
2404
|
// Handle recurring fields visibility
|
|
1973
2405
|
let showRecurringFields = isSelectForPay && request.is_recurring == true
|
|
1974
|
-
let isCustomRecurring = request.recurringStartDateType == .custom
|
|
1975
2406
|
txtFieldSelectPlanSingleSavedCard.isHidden = !showRecurringFields
|
|
1976
|
-
txtFieldSelectDateSingleSavedCard.isHidden = !
|
|
2407
|
+
txtFieldSelectDateSingleSavedCard.isHidden = !showRecurringFields // Show for both .custom and .fixed
|
|
1977
2408
|
|
|
1978
2409
|
// Set selected card based on tapped index
|
|
1979
2410
|
if isSelectForPay, index < savedCards.count {
|
|
@@ -2380,16 +2811,16 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
2380
2811
|
}
|
|
2381
2812
|
|
|
2382
2813
|
@IBAction func actionBtnChosePlanGrailPayBankView(_ sender: UIButton) {
|
|
2383
|
-
guard
|
|
2814
|
+
guard let plans = request?.recurringIntervals, !plans.isEmpty else {
|
|
2384
2815
|
print("No recurring intervals available.")
|
|
2385
2816
|
return
|
|
2386
2817
|
}
|
|
2387
2818
|
|
|
2388
|
-
// Check if current payment method is only Bank
|
|
2389
|
-
if request?.selectedPaymentMethods.contains(.Bank) == true {
|
|
2390
|
-
// Remove 'daily' from plans
|
|
2391
|
-
plans.removeAll { $0 == .daily }
|
|
2392
|
-
}
|
|
2819
|
+
// // Check if current payment method is only Bank
|
|
2820
|
+
// if request?.selectedPaymentMethods.contains(.Bank) == true {
|
|
2821
|
+
// // Remove 'daily' from plans
|
|
2822
|
+
// plans.removeAll { $0 == .daily }
|
|
2823
|
+
// }
|
|
2393
2824
|
|
|
2394
2825
|
PlanSelector.presentPlanOptions(from: self, sourceView: sender, allowedPlans: plans) { selectedPlan in
|
|
2395
2826
|
self.txtFieldChosePlanGrailPayBankView.text = selectedPlan
|
|
@@ -2405,16 +2836,16 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
2405
2836
|
}
|
|
2406
2837
|
|
|
2407
2838
|
@IBAction func actionBtnSelectPlanNewGrailPayBankView(_ sender: UIButton) {
|
|
2408
|
-
guard
|
|
2839
|
+
guard let plans = request?.recurringIntervals, !plans.isEmpty else {
|
|
2409
2840
|
print("No recurring intervals available.")
|
|
2410
2841
|
return
|
|
2411
2842
|
}
|
|
2412
2843
|
|
|
2413
|
-
// Check if current payment method is only Bank
|
|
2414
|
-
if request?.selectedPaymentMethods.contains(.Bank) == true {
|
|
2415
|
-
// Remove 'daily' from plans
|
|
2416
|
-
plans.removeAll { $0 == .daily }
|
|
2417
|
-
}
|
|
2844
|
+
// // Check if current payment method is only Bank
|
|
2845
|
+
// if request?.selectedPaymentMethods.contains(.Bank) == true {
|
|
2846
|
+
// // Remove 'daily' from plans
|
|
2847
|
+
// plans.removeAll { $0 == .daily }
|
|
2848
|
+
// }
|
|
2418
2849
|
|
|
2419
2850
|
PlanSelector.presentPlanOptions(from: self, sourceView: sender, allowedPlans: plans) { selectedPlan in
|
|
2420
2851
|
self.txtFieldChosePlanNewGrailPayBankView.text = selectedPlan
|
|
@@ -2445,12 +2876,8 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
2445
2876
|
uRLRequest.httpMethod = "POST"
|
|
2446
2877
|
uRLRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
|
|
2447
2878
|
|
|
2448
|
-
|
|
2449
|
-
|
|
2450
|
-
let apiSecret = EnvironmentConfig.apiSecret {
|
|
2451
|
-
uRLRequest.addValue(apiKey, forHTTPHeaderField: "x-api-key")
|
|
2452
|
-
uRLRequest.addValue(apiSecret, forHTTPHeaderField: "x-api-secret")
|
|
2453
|
-
}
|
|
2879
|
+
let token = UserStoreSingleton.shared.clientToken ?? ""
|
|
2880
|
+
uRLRequest.addValue(token, forHTTPHeaderField: "clientToken")
|
|
2454
2881
|
|
|
2455
2882
|
// Prepare parameters
|
|
2456
2883
|
let params: [String: Any] = [
|
|
@@ -2523,12 +2950,13 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
2523
2950
|
|
|
2524
2951
|
if self.request.is_recurring == true {
|
|
2525
2952
|
self.txtFieldChosePlanGrailPayBankView.isHidden = false
|
|
2526
|
-
|
|
2527
|
-
|
|
2528
|
-
|
|
2529
|
-
|
|
2530
|
-
|
|
2531
|
-
|
|
2953
|
+
self.txtFieldSelectDateGrailPayBankView.isHidden = false
|
|
2954
|
+
// if self.request.recurringStartDateType == .custom {
|
|
2955
|
+
// self.txtFieldSelectDateGrailPayBankView.isHidden = false
|
|
2956
|
+
// }
|
|
2957
|
+
// else {
|
|
2958
|
+
// self.txtFieldSelectDateGrailPayBankView.isHidden = true
|
|
2959
|
+
// }
|
|
2532
2960
|
}
|
|
2533
2961
|
|
|
2534
2962
|
if let accountNumber = account["account_number"] as? String {
|
|
@@ -2591,12 +3019,8 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
2591
3019
|
request.httpMethod = "POST"
|
|
2592
3020
|
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
|
|
2593
3021
|
|
|
2594
|
-
|
|
2595
|
-
|
|
2596
|
-
let apiSecret = EnvironmentConfig.apiSecret {
|
|
2597
|
-
request.addValue(apiKey, forHTTPHeaderField: "x-api-key")
|
|
2598
|
-
request.addValue(apiSecret, forHTTPHeaderField: "x-api-secret")
|
|
2599
|
-
}
|
|
3022
|
+
let token = UserStoreSingleton.shared.clientToken ?? ""
|
|
3023
|
+
request.addValue(token, forHTTPHeaderField: "clientToken")
|
|
2600
3024
|
|
|
2601
3025
|
// Save customer_id for use in charge API
|
|
2602
3026
|
let customerID = UserStoreSingleton.shared.customerId ?? ""
|
|
@@ -2678,12 +3102,13 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
2678
3102
|
|
|
2679
3103
|
if self.request.is_recurring == true {
|
|
2680
3104
|
self.txtFieldChosePlanNewGrailPayBankView.isHidden = false
|
|
2681
|
-
|
|
2682
|
-
|
|
2683
|
-
|
|
2684
|
-
|
|
2685
|
-
|
|
2686
|
-
|
|
3105
|
+
self.txtFieldSelectDateNewGrailPayBankView.isHidden = false
|
|
3106
|
+
// if self.request.recurringStartDateType == .custom {
|
|
3107
|
+
// self.txtFieldSelectDateNewGrailPayBankView.isHidden = false
|
|
3108
|
+
// }
|
|
3109
|
+
// else {
|
|
3110
|
+
// self.txtFieldSelectDateNewGrailPayBankView.isHidden = true
|
|
3111
|
+
// }
|
|
2687
3112
|
}
|
|
2688
3113
|
|
|
2689
3114
|
if let accountNumber = account["account_number"] as? String {
|
|
@@ -3117,71 +3542,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
3117
3542
|
}
|
|
3118
3543
|
}
|
|
3119
3544
|
|
|
3120
|
-
// func launchGrailPay() {
|
|
3121
|
-
// guard let grailPayParams = request.grailPayParams else {
|
|
3122
|
-
// print("GrailPay parameters not available in request")
|
|
3123
|
-
// return
|
|
3124
|
-
// }
|
|
3125
|
-
//
|
|
3126
|
-
// GrailPayHelper.presentGrailPay(from: self, request: grailPayParams) { [weak self] result in
|
|
3127
|
-
// guard let self = self else { return }
|
|
3128
|
-
//
|
|
3129
|
-
// switch result.type {
|
|
3130
|
-
// case .success:
|
|
3131
|
-
// if let chargeData = result.chargeData,
|
|
3132
|
-
// let dataArray = chargeData["data"] as? [[String: Any]],
|
|
3133
|
-
// let selectedAccount = dataArray.first {
|
|
3134
|
-
//
|
|
3135
|
-
// print("✅ Bank connected: \(selectedAccount)")
|
|
3136
|
-
// self.selectedGrailPayAccountType = selectedAccount["account_type"] as? String
|
|
3137
|
-
// self.selectedGrailPayAccountName = selectedAccount["name"] as? String
|
|
3138
|
-
//
|
|
3139
|
-
// if self.grailPaySource == .existingAccount {
|
|
3140
|
-
// self.accountConnectApi(account: selectedAccount)
|
|
3141
|
-
// self.lblGrailPayAabandonError.text = "Default account successfully set"
|
|
3142
|
-
// self.viewGrailPayAbandon.isHidden = false
|
|
3143
|
-
// } else if self.grailPaySource == .newAccount {
|
|
3144
|
-
// self.newGrailPayAccountConnectApi(account: selectedAccount)
|
|
3145
|
-
// self.lblAbandonGrailPayNewAccountView.text = "Default account successfully set"
|
|
3146
|
-
// self.viewAbandonGrailPayNewAccountView.isHidden = false
|
|
3147
|
-
//
|
|
3148
|
-
// self.selectedNewGrailPayAccountType = selectedAccount["account_type"] as? String
|
|
3149
|
-
// self.selectedNewGrailPayAccountName = selectedAccount["name"] as? String
|
|
3150
|
-
// }
|
|
3151
|
-
//
|
|
3152
|
-
// if self.selectedPaymentMethod == "Bank" {
|
|
3153
|
-
// self.viewBtnShowSavedCards.isHidden = true
|
|
3154
|
-
// }
|
|
3155
|
-
//
|
|
3156
|
-
// let amountText = String(format: "$%.2f", self.request.amount ?? 0)
|
|
3157
|
-
// let submitText = self.request.submitButtonText
|
|
3158
|
-
// let defaultTitle = (submitText?.isEmpty == false)
|
|
3159
|
-
// ? "\(submitText!) (\(amountText))"
|
|
3160
|
-
// : "Pay Now (\(amountText))"
|
|
3161
|
-
//
|
|
3162
|
-
// if self.grailPaySource == .existingAccount {
|
|
3163
|
-
// self.btnLinkBankAccount.setTitle(defaultTitle, for: .normal)
|
|
3164
|
-
// } else if self.grailPaySource == .newAccount {
|
|
3165
|
-
// self.btnLinkGrailPayAddNewAccount.setTitle(defaultTitle, for: .normal)
|
|
3166
|
-
// }
|
|
3167
|
-
//
|
|
3168
|
-
// } else {
|
|
3169
|
-
// print("⚠️ chargeData does not contain valid account data")
|
|
3170
|
-
// self.showGrailPayError(message: "Failed to retrieve account info")
|
|
3171
|
-
// }
|
|
3172
|
-
//
|
|
3173
|
-
// case .cancelled:
|
|
3174
|
-
// print("⚠️ GrailPay cancelled")
|
|
3175
|
-
// self.showGrailPayError(message: "User has abandoned the action")
|
|
3176
|
-
//
|
|
3177
|
-
// case .error:
|
|
3178
|
-
// let errorMsg = result.error?.localizedDescription ?? "Unknown error"
|
|
3179
|
-
// print("❌ GrailPay error: \(errorMsg)")
|
|
3180
|
-
// self.showGrailPayError(message: errorMsg)
|
|
3181
|
-
// }
|
|
3182
|
-
// }
|
|
3183
|
-
// }
|
|
3184
|
-
|
|
3185
3545
|
func launchGrailPay() {
|
|
3186
3546
|
guard let grailPayParams = request.grailPayParams else {
|
|
3187
3547
|
print("GrailPay parameters not available in request")
|
|
@@ -3305,13 +3665,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
3305
3665
|
print("Setting clientToken header: \(token ?? "None")")
|
|
3306
3666
|
uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
|
|
3307
3667
|
|
|
3308
|
-
if let apiKey = EnvironmentConfig.apiKey {
|
|
3309
|
-
uRLRequest.addValue(apiKey, forHTTPHeaderField: "X-Api-Key")
|
|
3310
|
-
}
|
|
3311
|
-
if let apiSecret = EnvironmentConfig.apiSecret {
|
|
3312
|
-
uRLRequest.addValue(apiSecret, forHTTPHeaderField: "X-Api-Secret")
|
|
3313
|
-
}
|
|
3314
|
-
|
|
3315
3668
|
var params: [String: Any] = [
|
|
3316
3669
|
"account_id": self.grailPayAccountID ?? "",
|
|
3317
3670
|
"account_type": self.selectedGrailPayAccountType ?? "",
|
|
@@ -3518,13 +3871,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
3518
3871
|
print("Setting clientToken header: \(token ?? "None")")
|
|
3519
3872
|
uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
|
|
3520
3873
|
|
|
3521
|
-
if let apiKey = EnvironmentConfig.apiKey {
|
|
3522
|
-
uRLRequest.addValue(apiKey, forHTTPHeaderField: "X-Api-Key")
|
|
3523
|
-
}
|
|
3524
|
-
if let apiSecret = EnvironmentConfig.apiSecret {
|
|
3525
|
-
uRLRequest.addValue(apiSecret, forHTTPHeaderField: "X-Api-Secret")
|
|
3526
|
-
}
|
|
3527
|
-
|
|
3528
3874
|
let emailText = txtFieldEmailGrailPayView.text
|
|
3529
3875
|
let emailPrefix = emailText.components(separatedBy: "@").first ?? ""
|
|
3530
3876
|
|
|
@@ -3748,13 +4094,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
3748
4094
|
print("Setting clientToken header: \(token ?? "None")")
|
|
3749
4095
|
uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
|
|
3750
4096
|
|
|
3751
|
-
if let apiKey = EnvironmentConfig.apiKey {
|
|
3752
|
-
uRLRequest.addValue(apiKey, forHTTPHeaderField: "X-Api-Key")
|
|
3753
|
-
}
|
|
3754
|
-
if let apiSecret = EnvironmentConfig.apiSecret {
|
|
3755
|
-
uRLRequest.addValue(apiSecret, forHTTPHeaderField: "X-Api-Secret")
|
|
3756
|
-
}
|
|
3757
|
-
|
|
3758
4097
|
var params: [String: Any] = [
|
|
3759
4098
|
"account_id": self.newGrailPayAccountID ?? "",
|
|
3760
4099
|
"account_type": self.selectedNewGrailPayAccountType ?? "",
|
|
@@ -3970,13 +4309,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
3970
4309
|
print("Setting clientToken header: \(token ?? "None")")
|
|
3971
4310
|
uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
|
|
3972
4311
|
|
|
3973
|
-
if let apiKey = EnvironmentConfig.apiKey {
|
|
3974
|
-
uRLRequest.addValue(apiKey, forHTTPHeaderField: "X-Api-Key")
|
|
3975
|
-
}
|
|
3976
|
-
if let apiSecret = EnvironmentConfig.apiSecret {
|
|
3977
|
-
uRLRequest.addValue(apiSecret, forHTTPHeaderField: "X-Api-Secret")
|
|
3978
|
-
}
|
|
3979
|
-
|
|
3980
4312
|
var params: [String: Any] = [
|
|
3981
4313
|
"account_id": selectedbankAccounts?.account_id ?? "",
|
|
3982
4314
|
"customer": selectedbankAccounts?.customer_id ?? "",
|
|
@@ -4840,7 +5172,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
4840
5172
|
}
|
|
4841
5173
|
}
|
|
4842
5174
|
}
|
|
4843
|
-
|
|
5175
|
+
|
|
4844
5176
|
@IBAction func actionBtnCloseSettingView(_ sender: UIButton) {
|
|
4845
5177
|
settingsView.isHidden = true
|
|
4846
5178
|
}
|
|
@@ -5420,13 +5752,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
5420
5752
|
print("Setting clientToken header: \(token ?? "None")")
|
|
5421
5753
|
request.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
|
|
5422
5754
|
|
|
5423
|
-
// Add API headers
|
|
5424
|
-
if let apiKey = EnvironmentConfig.apiKey,
|
|
5425
|
-
let apiSecret = EnvironmentConfig.apiSecret {
|
|
5426
|
-
request.addValue(apiKey, forHTTPHeaderField: "x-api-key")
|
|
5427
|
-
request.addValue(apiSecret, forHTTPHeaderField: "x-api-secret")
|
|
5428
|
-
}
|
|
5429
|
-
|
|
5430
5755
|
// Define the parameters for the request
|
|
5431
5756
|
let params: [String: Any] = [
|
|
5432
5757
|
"card_search_value": txtFieldEmail.text ?? "",
|
|
@@ -5507,13 +5832,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
5507
5832
|
print("Setting clientToken header: \(token ?? "None")")
|
|
5508
5833
|
urlRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
|
|
5509
5834
|
|
|
5510
|
-
// Add API headers
|
|
5511
|
-
if let apiKey = EnvironmentConfig.apiKey,
|
|
5512
|
-
let apiSecret = EnvironmentConfig.apiSecret {
|
|
5513
|
-
urlRequest.addValue(apiKey, forHTTPHeaderField: "x-api-key")
|
|
5514
|
-
urlRequest.addValue(apiSecret, forHTTPHeaderField: "x-api-secret")
|
|
5515
|
-
}
|
|
5516
|
-
|
|
5517
5835
|
// Safe access from main thread (assumes you call this from main thread)
|
|
5518
5836
|
let email = self.txtFieldEmail.text ?? ""
|
|
5519
5837
|
let otp = getCombinedOTP()
|
|
@@ -5665,13 +5983,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
5665
5983
|
print("🔑 Setting customerToken header: \(token ?? "None")")
|
|
5666
5984
|
uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Customer-Token")
|
|
5667
5985
|
|
|
5668
|
-
// Add API headers
|
|
5669
|
-
if let apiKey = EnvironmentConfig.apiKey,
|
|
5670
|
-
let apiSecret = EnvironmentConfig.apiSecret {
|
|
5671
|
-
uRLRequest.addValue(apiKey, forHTTPHeaderField: "x-api-key")
|
|
5672
|
-
uRLRequest.addValue(apiSecret, forHTTPHeaderField: "x-api-secret")
|
|
5673
|
-
}
|
|
5674
|
-
|
|
5675
5986
|
let session = URLSession.shared
|
|
5676
5987
|
let task = session.dataTask(with: uRLRequest) { [weak self] (data, response, error) in
|
|
5677
5988
|
guard let self = self else { return }
|
|
@@ -5767,9 +6078,10 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
5767
6078
|
|
|
5768
6079
|
if self.request.is_recurring == true {
|
|
5769
6080
|
self.txtFieldSelectPlanSingleSavedCard.isHidden = false
|
|
5770
|
-
|
|
5771
|
-
|
|
5772
|
-
|
|
6081
|
+
self.txtFieldSelectDateSingleSavedCard.isHidden = false
|
|
6082
|
+
// if self.request.recurringStartDateType == .custom {
|
|
6083
|
+
// self.txtFieldSelectDateSingleSavedCard.isHidden = false
|
|
6084
|
+
// }
|
|
5773
6085
|
} else {
|
|
5774
6086
|
self.txtFieldSelectPlanSingleSavedCard.isHidden = true
|
|
5775
6087
|
self.txtFieldSelectDateSingleSavedCard.isHidden = true
|
|
@@ -6529,13 +6841,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
6529
6841
|
print("Setting clientToken header: \(token ?? "None")")
|
|
6530
6842
|
uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
|
|
6531
6843
|
|
|
6532
|
-
// Add API headers
|
|
6533
|
-
if let apiKey = EnvironmentConfig.apiKey,
|
|
6534
|
-
let apiSecret = EnvironmentConfig.apiSecret {
|
|
6535
|
-
uRLRequest.addValue(apiKey, forHTTPHeaderField: "x-api-key")
|
|
6536
|
-
uRLRequest.addValue(apiSecret, forHTTPHeaderField: "x-api-secret")
|
|
6537
|
-
}
|
|
6538
|
-
|
|
6539
6844
|
let emailPrefix = UserStoreSingleton.shared.verificationEmail?.components(separatedBy: "@").first ?? ""
|
|
6540
6845
|
|
|
6541
6846
|
var params: [String: Any] = [
|
|
@@ -6948,13 +7253,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
6948
7253
|
print("Setting customerToken header: \(token ?? "None")")
|
|
6949
7254
|
request.addValue(token ?? "", forHTTPHeaderField: "Customer-Token")
|
|
6950
7255
|
|
|
6951
|
-
// Add API headers
|
|
6952
|
-
if let apiKey = EnvironmentConfig.apiKey,
|
|
6953
|
-
let apiSecret = EnvironmentConfig.apiSecret {
|
|
6954
|
-
request.addValue(apiKey, forHTTPHeaderField: "x-api-key")
|
|
6955
|
-
request.addValue(apiSecret, forHTTPHeaderField: "x-api-secret")
|
|
6956
|
-
}
|
|
6957
|
-
|
|
6958
7256
|
// Get the text fields from the selected cell and trim whitespace
|
|
6959
7257
|
let nameText = txtFieldNameOnCardUpdateCardView.text?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
|
|
6960
7258
|
let cvvText = txtFieldCVVUpdateCardView.text?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
|
|
@@ -7115,14 +7413,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
7115
7413
|
print("Customer-Token is nil")
|
|
7116
7414
|
}
|
|
7117
7415
|
|
|
7118
|
-
// Add API headers
|
|
7119
|
-
if let apiKey = EnvironmentConfig.apiKey {
|
|
7120
|
-
request.addValue(apiKey, forHTTPHeaderField: "x-api-key")
|
|
7121
|
-
}
|
|
7122
|
-
if let apiSecret = EnvironmentConfig.apiSecret {
|
|
7123
|
-
request.addValue(apiSecret, forHTTPHeaderField: "x-api-secret")
|
|
7124
|
-
}
|
|
7125
|
-
|
|
7126
7416
|
let session = URLSession.shared
|
|
7127
7417
|
let task = session.dataTask(with: request) { [weak self] data, response, error in
|
|
7128
7418
|
guard let self = self else { return }
|
|
@@ -7310,11 +7600,12 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
7310
7600
|
|
|
7311
7601
|
if self.request.is_recurring == true {
|
|
7312
7602
|
self.txtFieldSelectPlanSingleSavedBankView.isHidden = false
|
|
7313
|
-
|
|
7314
|
-
|
|
7315
|
-
|
|
7316
|
-
|
|
7317
|
-
|
|
7603
|
+
self.txtFieldSelectDateSingleSavedBankView.isHidden = false
|
|
7604
|
+
// if self.request.recurringStartDateType == .custom {
|
|
7605
|
+
// self.txtFieldSelectDateSingleSavedBankView.isHidden = false
|
|
7606
|
+
// } else {
|
|
7607
|
+
// self.txtFieldSelectDateSingleSavedBankView.isHidden = true
|
|
7608
|
+
// }
|
|
7318
7609
|
}
|
|
7319
7610
|
else {
|
|
7320
7611
|
self.txtFieldSelectPlanSingleSavedBankView.isHidden = true
|
|
@@ -7369,13 +7660,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
7369
7660
|
print("Setting clientToken header: \(token ?? "None")")
|
|
7370
7661
|
uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
|
|
7371
7662
|
|
|
7372
|
-
// Add API headers
|
|
7373
|
-
if let apiKey = EnvironmentConfig.apiKey,
|
|
7374
|
-
let apiSecret = EnvironmentConfig.apiSecret {
|
|
7375
|
-
uRLRequest.addValue(apiKey, forHTTPHeaderField: "x-api-key")
|
|
7376
|
-
uRLRequest.addValue(apiSecret, forHTTPHeaderField: "x-api-secret")
|
|
7377
|
-
}
|
|
7378
|
-
|
|
7379
7663
|
var params: [String: Any] = [
|
|
7380
7664
|
"name": txtFieldAccountName.text ?? "",
|
|
7381
7665
|
"email": txtFieldEmailAccountView.text,
|
|
@@ -7385,7 +7669,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
7385
7669
|
"routing_number": txtFieldRoutingNumber.text?.replacingOccurrences(of: " ", with: "") ?? "",
|
|
7386
7670
|
"account_number": txtFieldAccountNumber.text?.replacingOccurrences(of: " ", with: "") ?? "",
|
|
7387
7671
|
"payment_mode": "auth_and_capture",
|
|
7388
|
-
"payment_intent": UserStoreSingleton.shared.paymentIntent ?? "",
|
|
7389
7672
|
"levelIndicator": 1,
|
|
7390
7673
|
"payment_method": "ach"
|
|
7391
7674
|
]
|
|
@@ -7556,13 +7839,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
7556
7839
|
print("Setting clientToken header: \(token ?? "None")")
|
|
7557
7840
|
uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
|
|
7558
7841
|
|
|
7559
|
-
// Add API headers
|
|
7560
|
-
if let apiKey = EnvironmentConfig.apiKey,
|
|
7561
|
-
let apiSecret = EnvironmentConfig.apiSecret {
|
|
7562
|
-
uRLRequest.addValue(apiKey, forHTTPHeaderField: "x-api-key")
|
|
7563
|
-
uRLRequest.addValue(apiSecret, forHTTPHeaderField: "x-api-secret")
|
|
7564
|
-
}
|
|
7565
|
-
|
|
7566
7842
|
var params: [String: Any] = [
|
|
7567
7843
|
"name": !(request.name?.isEmpty ?? true) ? request.name! : (txtFieldAccountName.text ?? ""),
|
|
7568
7844
|
"email": txtFieldEmailAccountView.text,
|
|
@@ -7572,7 +7848,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
7572
7848
|
"routing_number": txtFieldRoutingNumber.text?.replacingOccurrences(of: " ", with: "") ?? "",
|
|
7573
7849
|
"account_number": txtFieldAccountNumber.text?.replacingOccurrences(of: " ", with: "") ?? "",
|
|
7574
7850
|
"payment_mode": "auth_and_capture",
|
|
7575
|
-
"payment_intent": UserStoreSingleton.shared.paymentIntent ?? "",
|
|
7576
7851
|
"levelIndicator": 1,
|
|
7577
7852
|
"payment_method": "ach"
|
|
7578
7853
|
]
|
|
@@ -7799,13 +8074,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
7799
8074
|
print("Setting clientToken header: \(token ?? "None")")
|
|
7800
8075
|
uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
|
|
7801
8076
|
|
|
7802
|
-
// Add API headers
|
|
7803
|
-
if let apiKey = EnvironmentConfig.apiKey,
|
|
7804
|
-
let apiSecret = EnvironmentConfig.apiSecret {
|
|
7805
|
-
uRLRequest.addValue(apiKey, forHTTPHeaderField: "x-api-key")
|
|
7806
|
-
uRLRequest.addValue(apiSecret, forHTTPHeaderField: "x-api-secret")
|
|
7807
|
-
}
|
|
7808
|
-
|
|
7809
8077
|
var params: [String: Any] = [
|
|
7810
8078
|
"account_id": selectedbankAccounts?.account_id ?? "",
|
|
7811
8079
|
"customer": selectedbankAccounts?.customer_id ?? "",
|
|
@@ -7964,13 +8232,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
7964
8232
|
print("Setting clientToken header: \(token ?? "None")")
|
|
7965
8233
|
uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
|
|
7966
8234
|
|
|
7967
|
-
// Add API headers
|
|
7968
|
-
if let apiKey = EnvironmentConfig.apiKey,
|
|
7969
|
-
let apiSecret = EnvironmentConfig.apiSecret {
|
|
7970
|
-
uRLRequest.addValue(apiKey, forHTTPHeaderField: "x-api-key")
|
|
7971
|
-
uRLRequest.addValue(apiSecret, forHTTPHeaderField: "x-api-secret")
|
|
7972
|
-
}
|
|
7973
|
-
|
|
7974
8235
|
var params: [String: Any] = [
|
|
7975
8236
|
"account_id": selectedbankAccounts?.account_id ?? "",
|
|
7976
8237
|
"customer": selectedbankAccounts?.customer_id ?? "",
|
|
@@ -8184,13 +8445,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
8184
8445
|
print("Setting clientToken header: \(token ?? "None")")
|
|
8185
8446
|
uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
|
|
8186
8447
|
|
|
8187
|
-
// Add API headers
|
|
8188
|
-
if let apiKey = EnvironmentConfig.apiKey,
|
|
8189
|
-
let apiSecret = EnvironmentConfig.apiSecret {
|
|
8190
|
-
uRLRequest.addValue(apiKey, forHTTPHeaderField: "x-api-key")
|
|
8191
|
-
uRLRequest.addValue(apiSecret, forHTTPHeaderField: "x-api-secret")
|
|
8192
|
-
}
|
|
8193
|
-
|
|
8194
8448
|
let accountName = txtFieldAccountNameNewAccountView.text?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
|
|
8195
8449
|
let routingNumber = txtFieldRoutingNumberNewAccountView.text?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
|
|
8196
8450
|
let accountType = txtFieldAccountTypeNewAccountView.text?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
|
|
@@ -8206,7 +8460,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
8206
8460
|
"routing_number": routingNumber,
|
|
8207
8461
|
"account_number": accountNumber,
|
|
8208
8462
|
"payment_mode": "auth_and_capture",
|
|
8209
|
-
"payment_intent": UserStoreSingleton.shared.paymentIntent ?? "",
|
|
8210
8463
|
"levelIndicator": 1,
|
|
8211
8464
|
]
|
|
8212
8465
|
|
|
@@ -8359,13 +8612,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
8359
8612
|
print("Setting clientToken header: \(token ?? "None")")
|
|
8360
8613
|
uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
|
|
8361
8614
|
|
|
8362
|
-
// Add API headers
|
|
8363
|
-
if let apiKey = EnvironmentConfig.apiKey,
|
|
8364
|
-
let apiSecret = EnvironmentConfig.apiSecret {
|
|
8365
|
-
uRLRequest.addValue(apiKey, forHTTPHeaderField: "x-api-key")
|
|
8366
|
-
uRLRequest.addValue(apiSecret, forHTTPHeaderField: "x-api-secret")
|
|
8367
|
-
}
|
|
8368
|
-
|
|
8369
8615
|
let accountName = txtFieldAccountNameNewAccountView.text?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
|
|
8370
8616
|
let routingNumber = txtFieldRoutingNumberNewAccountView.text?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
|
|
8371
8617
|
let accountType = txtFieldAccountTypeNewAccountView.text?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
|
|
@@ -8380,7 +8626,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
8380
8626
|
"routing_number": routingNumber,
|
|
8381
8627
|
"account_number": accountNumber,
|
|
8382
8628
|
"payment_mode": "auth_and_capture",
|
|
8383
|
-
"payment_intent": UserStoreSingleton.shared.paymentIntent ?? "",
|
|
8384
8629
|
"levelIndicator": 1,
|
|
8385
8630
|
]
|
|
8386
8631
|
|
|
@@ -8588,13 +8833,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
8588
8833
|
print("Setting clientToken header: \(token ?? "None")")
|
|
8589
8834
|
uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
|
|
8590
8835
|
|
|
8591
|
-
// Add API headers
|
|
8592
|
-
if let apiKey = EnvironmentConfig.apiKey,
|
|
8593
|
-
let apiSecret = EnvironmentConfig.apiSecret {
|
|
8594
|
-
uRLRequest.addValue(apiKey, forHTTPHeaderField: "x-api-key")
|
|
8595
|
-
uRLRequest.addValue(apiSecret, forHTTPHeaderField: "x-api-secret")
|
|
8596
|
-
}
|
|
8597
|
-
|
|
8598
8836
|
// Retrieve and trim text field values (removing leading and trailing whitespace)
|
|
8599
8837
|
let accountName = txtFieldAccountNameNewAccountView.text?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
|
|
8600
8838
|
let routingNumber = txtFieldRoutingNumberNewAccountView.text?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
|
|
@@ -8612,7 +8850,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
8612
8850
|
"routing_number": routingNumber,
|
|
8613
8851
|
"account_number": accountNumber,
|
|
8614
8852
|
"payment_mode": "auth_and_capture",
|
|
8615
|
-
"payment_intent": UserStoreSingleton.shared.paymentIntent ?? "",
|
|
8616
8853
|
"levelIndicator": 1,
|
|
8617
8854
|
"save_account": 1,
|
|
8618
8855
|
"payment_method": "ach"
|
|
@@ -8772,13 +9009,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
8772
9009
|
print("Setting customerToken header: \(token ?? "None")")
|
|
8773
9010
|
request.addValue(token ?? "", forHTTPHeaderField: "Customer-Token")
|
|
8774
9011
|
|
|
8775
|
-
// Add API headers
|
|
8776
|
-
if let apiKey = EnvironmentConfig.apiKey,
|
|
8777
|
-
let apiSecret = EnvironmentConfig.apiSecret {
|
|
8778
|
-
request.addValue(apiKey, forHTTPHeaderField: "x-api-key")
|
|
8779
|
-
request.addValue(apiSecret, forHTTPHeaderField: "x-api-secret")
|
|
8780
|
-
}
|
|
8781
|
-
|
|
8782
9012
|
let session = URLSession.shared
|
|
8783
9013
|
let task = session.dataTask(with: request) { [weak self] (serviceData, serviceResponse, error) in
|
|
8784
9014
|
guard let self = self else { return }
|
|
@@ -8854,13 +9084,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
8854
9084
|
print("Setting clientToken header: \(token ?? "None")")
|
|
8855
9085
|
urlRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
|
|
8856
9086
|
|
|
8857
|
-
// Add API headers
|
|
8858
|
-
if let apiKey = EnvironmentConfig.apiKey,
|
|
8859
|
-
let apiSecret = EnvironmentConfig.apiSecret {
|
|
8860
|
-
urlRequest.addValue(apiKey, forHTTPHeaderField: "x-api-key")
|
|
8861
|
-
urlRequest.addValue(apiSecret, forHTTPHeaderField: "x-api-secret")
|
|
8862
|
-
}
|
|
8863
|
-
|
|
8864
9087
|
var params: [String: Any] = [
|
|
8865
9088
|
"name": UserStoreSingleton.shared.merchantName ?? "",
|
|
8866
9089
|
"email": UserStoreSingleton.shared.merchantEmail ?? "",
|
|
@@ -9007,13 +9230,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
9007
9230
|
print("Setting clientToken header: \(token ?? "None")")
|
|
9008
9231
|
request.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
|
|
9009
9232
|
|
|
9010
|
-
// Add API headers
|
|
9011
|
-
if let apiKey = EnvironmentConfig.apiKey,
|
|
9012
|
-
let apiSecret = EnvironmentConfig.apiSecret {
|
|
9013
|
-
request.addValue(apiKey, forHTTPHeaderField: "x-api-key")
|
|
9014
|
-
request.addValue(apiSecret, forHTTPHeaderField: "x-api-secret")
|
|
9015
|
-
}
|
|
9016
|
-
|
|
9017
9233
|
let session = URLSession.shared
|
|
9018
9234
|
let task = session.dataTask(with: request) { [weak self] (data, response, error) in
|
|
9019
9235
|
guard let self = self else { return }
|
|
@@ -9073,13 +9289,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
9073
9289
|
print("Setting clientToken header: \(token ?? "None")")
|
|
9074
9290
|
uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
|
|
9075
9291
|
|
|
9076
|
-
// Add API headers
|
|
9077
|
-
if let apiKey = EnvironmentConfig.apiKey,
|
|
9078
|
-
let apiSecret = EnvironmentConfig.apiSecret {
|
|
9079
|
-
uRLRequest.addValue(apiKey, forHTTPHeaderField: "x-api-key")
|
|
9080
|
-
uRLRequest.addValue(apiSecret, forHTTPHeaderField: "x-api-secret")
|
|
9081
|
-
}
|
|
9082
|
-
|
|
9083
9292
|
var params: [String: Any] = [
|
|
9084
9293
|
"name": cardNameTextField.text,
|
|
9085
9294
|
"email": txtFieldEmailCardView.text,
|
|
@@ -9388,13 +9597,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
9388
9597
|
print("Setting clientToken header: \(token ?? "None")")
|
|
9389
9598
|
uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
|
|
9390
9599
|
|
|
9391
|
-
// Add API headers
|
|
9392
|
-
if let apiKey = EnvironmentConfig.apiKey,
|
|
9393
|
-
let apiSecret = EnvironmentConfig.apiSecret {
|
|
9394
|
-
uRLRequest.addValue(apiKey, forHTTPHeaderField: "x-api-key")
|
|
9395
|
-
uRLRequest.addValue(apiSecret, forHTTPHeaderField: "x-api-secret")
|
|
9396
|
-
}
|
|
9397
|
-
|
|
9398
9600
|
var params: [String: Any] = [
|
|
9399
9601
|
"name": nameText,
|
|
9400
9602
|
"email": UserStoreSingleton.shared.verificationEmail ?? "",
|
|
@@ -9763,9 +9965,10 @@ extension PaymentInfoVC: UICollectionViewDelegate, UICollectionViewDataSource, U
|
|
|
9763
9965
|
self.btnNextTopCon.constant = 0
|
|
9764
9966
|
if self.request.is_recurring == true {
|
|
9765
9967
|
self.txtFieldSelectPlanSingleSavedCard.isHidden = false
|
|
9766
|
-
|
|
9767
|
-
|
|
9768
|
-
|
|
9968
|
+
self.txtFieldSelectDateSingleSavedCard.isHidden = false
|
|
9969
|
+
// if request.recurringStartDateType == .custom {
|
|
9970
|
+
// self.txtFieldSelectDateSingleSavedCard.isHidden = false
|
|
9971
|
+
// }
|
|
9769
9972
|
}
|
|
9770
9973
|
else {
|
|
9771
9974
|
self.txtFieldSelectPlanSingleSavedCard.isHidden = true
|
|
@@ -11022,3 +11225,4 @@ extension PaymentInfoVC: UITextFieldDelegate {
|
|
|
11022
11225
|
}
|
|
11023
11226
|
|
|
11024
11227
|
}
|
|
11228
|
+
|