@jimrising/easymerchantsdk-react-native 2.2.9 → 2.3.1
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 +310 -171
- 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 +571 -369
- 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
|
@@ -82,6 +82,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
82
82
|
@IBOutlet weak var imgViewCalenderIconCard: UIImageView!
|
|
83
83
|
@IBOutlet weak var txtFieldEmailCardView: TextFieldStackView!
|
|
84
84
|
@IBOutlet weak var viewTxtFieldEmailCardView: UIView!
|
|
85
|
+
@IBOutlet weak var btnChosePlanCardView: UIButton!
|
|
85
86
|
|
|
86
87
|
@IBOutlet weak var btnScanCard: UIButton!
|
|
87
88
|
|
|
@@ -90,6 +91,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
90
91
|
@IBOutlet weak var btnNextEmailView: FilledButton!
|
|
91
92
|
@IBOutlet weak var viewTxtFieldEmail: UIView!
|
|
92
93
|
@IBOutlet weak var OTPView: UIView!
|
|
94
|
+
@IBOutlet weak var btnSelectRecurringDateCardView: UIButton!
|
|
93
95
|
|
|
94
96
|
//OTP View
|
|
95
97
|
@IBOutlet weak var viewTextOTP1: UIView!
|
|
@@ -134,6 +136,11 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
134
136
|
@IBOutlet weak var txtFieldSelectPlanSingleSavedCard: TextFieldStackView!
|
|
135
137
|
@IBOutlet weak var txtFieldSelectDateSingleSavedCard: TextFieldStackView!
|
|
136
138
|
|
|
139
|
+
@IBOutlet weak var DropDownIconSingleSavedCard: UIImageView!
|
|
140
|
+
@IBOutlet weak var btnChosePlanSingleSavedCard: UIButton!
|
|
141
|
+
|
|
142
|
+
@IBOutlet weak var btnSelectRecurringDateSingleSavedCard: UIButton!
|
|
143
|
+
|
|
137
144
|
//Update Card
|
|
138
145
|
@IBOutlet weak var btnSelectUpdateCardView: UIButton!
|
|
139
146
|
@IBOutlet weak var imgViewCardUpdateCardView: UIImageView!
|
|
@@ -167,6 +174,10 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
167
174
|
@IBOutlet weak var txtFieldSelectDateNewCardView: TextFieldStackView!
|
|
168
175
|
@IBOutlet weak var heightViewNewCardFields: NSLayoutConstraint!
|
|
169
176
|
|
|
177
|
+
@IBOutlet weak var btnSelectRecurringDateNewCardView: UIButton!
|
|
178
|
+
@IBOutlet weak var btnSelectPlanNewCardView: UIButton!
|
|
179
|
+
@IBOutlet weak var dropDownIconNewCardView: UIImageView!
|
|
180
|
+
|
|
170
181
|
//Bank
|
|
171
182
|
@IBOutlet weak var viewBankFields: UIView!
|
|
172
183
|
@IBOutlet weak var txtFieldAccountName: UITextField!
|
|
@@ -190,9 +201,14 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
190
201
|
@IBOutlet weak var txtFieldEmailAccountView: TextFieldStackView!
|
|
191
202
|
@IBOutlet weak var viewTxtFieldEmailAccountView: UIView!
|
|
192
203
|
|
|
204
|
+
@IBOutlet weak var dropDownIconViewBankFields: UIImageView!
|
|
205
|
+
@IBOutlet weak var btnSelectPlanViewBankFields: UIButton!
|
|
206
|
+
|
|
193
207
|
@IBOutlet weak var viewSaveCardForFutureCardView: UIStackView!
|
|
194
208
|
@IBOutlet weak var heightViewBankFields: NSLayoutConstraint!
|
|
195
209
|
|
|
210
|
+
@IBOutlet weak var btnSelectRecurringDateViewBankFields: UIButton!
|
|
211
|
+
|
|
196
212
|
//GrailPay
|
|
197
213
|
@IBOutlet weak var grailPayBankLinkView: UIView!
|
|
198
214
|
@IBOutlet weak var viewGrailPaySavedBank: UIStackView!
|
|
@@ -217,6 +233,10 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
217
233
|
@IBOutlet weak var txtFieldEmailGrailPayView: TextFieldStackView!
|
|
218
234
|
@IBOutlet weak var viewTxtFieldEmailGrailPayView: UIView!
|
|
219
235
|
|
|
236
|
+
@IBOutlet weak var btnSelectPlanGrailPayBankView: UIButton!
|
|
237
|
+
@IBOutlet weak var dropDownIconGrailPayBankView: UIImageView!
|
|
238
|
+
@IBOutlet weak var btnSelectRecurringDateGrailPayView: UIButton!
|
|
239
|
+
|
|
220
240
|
//New GrailPay Account
|
|
221
241
|
@IBOutlet weak var viewAddNewGrailPayAccount: UIView!
|
|
222
242
|
@IBOutlet weak var lblGrailPayNewAccount: UILabel!
|
|
@@ -242,6 +262,11 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
242
262
|
@IBOutlet weak var imgViewBankIconGrailPayNewBank: UIImageView!
|
|
243
263
|
@IBOutlet weak var viewSaveAccountForFututeNewGrailPayAccountView: UIStackView!
|
|
244
264
|
|
|
265
|
+
@IBOutlet weak var btnSelectPlanNewGrailPayBankView: UIButton!
|
|
266
|
+
@IBOutlet weak var dropDownIconNewGrailPayBankView: UIImageView!
|
|
267
|
+
@IBOutlet weak var btnSelectRecurringDateNewGrailPayView: UIButton!
|
|
268
|
+
|
|
269
|
+
|
|
245
270
|
//SavedBank
|
|
246
271
|
@IBOutlet weak var viewSingleSavedAccount: UIView!
|
|
247
272
|
@IBOutlet weak var viewTermAndConditionsSingleAccountView: UIStackView!
|
|
@@ -261,6 +286,11 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
261
286
|
@IBOutlet weak var txtFieldSelectPlanSingleSavedBankView: TextFieldStackView!
|
|
262
287
|
@IBOutlet weak var txtFieldSelectDateSingleSavedBankView: TextFieldStackView!
|
|
263
288
|
|
|
289
|
+
@IBOutlet weak var dropDownIconSingleSavedBankView: UIImageView!
|
|
290
|
+
@IBOutlet weak var btnSelectPlanSingleSavedBankView: UIButton!
|
|
291
|
+
|
|
292
|
+
@IBOutlet weak var btnSelectRecurringDateSavedBankView: UIButton!
|
|
293
|
+
|
|
264
294
|
//New Bank
|
|
265
295
|
@IBOutlet weak var viewNewBankAccount: UIView!
|
|
266
296
|
@IBOutlet weak var txtFieldAccountNameNewAccountView: UITextField!
|
|
@@ -289,6 +319,10 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
289
319
|
@IBOutlet weak var lblAgreeToTheNewAccountView: UILabel!
|
|
290
320
|
@IBOutlet weak var lblTermsAndConditionsNewAccountView: UILabel!
|
|
291
321
|
|
|
322
|
+
@IBOutlet weak var dropDownIconNewBankAccountView: UIImageView!
|
|
323
|
+
@IBOutlet weak var btnSelectPlanNewBankAccountView: UIButton!
|
|
324
|
+
@IBOutlet weak var btnSelectRecurringDateNewBankView: UIButton!
|
|
325
|
+
|
|
292
326
|
//Crypto
|
|
293
327
|
@IBOutlet weak var viewCrypto: UIView!
|
|
294
328
|
@IBOutlet weak var viewCryptoTryAgain: UIView!
|
|
@@ -413,30 +447,190 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
413
447
|
|
|
414
448
|
private var isErrorScreenPresented = false
|
|
415
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
|
+
|
|
416
459
|
//MARK: - View Did Load
|
|
417
460
|
override func viewDidLoad() {
|
|
418
461
|
super.viewDidLoad()
|
|
419
|
-
logOut()
|
|
420
462
|
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
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
|
|
426
548
|
DispatchQueue.main.async {
|
|
427
|
-
|
|
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
|
+
}
|
|
428
629
|
}
|
|
429
|
-
// Continue flow
|
|
430
|
-
} else {
|
|
431
|
-
print("Payment Intent failed")
|
|
432
|
-
// Handle failure
|
|
433
630
|
}
|
|
434
631
|
}
|
|
435
632
|
}
|
|
436
633
|
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
634
|
viewAppearanceOn()
|
|
441
635
|
|
|
442
636
|
uiFinishingTouchElements()
|
|
@@ -618,6 +812,23 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
618
812
|
|
|
619
813
|
}
|
|
620
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
|
+
|
|
621
832
|
//MARK: - View Wiil Appear
|
|
622
833
|
override func viewWillAppear(_ animated: Bool) {
|
|
623
834
|
uiFinishingTouchElements()
|
|
@@ -651,59 +862,270 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
651
862
|
self.viewCrypto.isHidden = true
|
|
652
863
|
|
|
653
864
|
if request.is_recurring == true {
|
|
654
|
-
|
|
655
|
-
if
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
self.
|
|
659
|
-
self.
|
|
660
|
-
self.
|
|
661
|
-
self.
|
|
662
|
-
self.
|
|
663
|
-
self.txtFieldSelectDateNewGrailPayBankView.isHidden = false
|
|
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
|
|
664
874
|
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
self.heightViewNewAccountFields.constant = 902
|
|
671
|
-
}
|
|
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
|
|
672
880
|
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
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
|
|
678
898
|
|
|
679
|
-
self.
|
|
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
|
|
680
916
|
} else {
|
|
681
|
-
|
|
682
|
-
self.
|
|
683
|
-
self.
|
|
684
|
-
self.
|
|
685
|
-
self.
|
|
686
|
-
self.
|
|
687
|
-
self.txtFieldSelectDateGrailPayBankView.isHidden = true
|
|
688
|
-
self.txtFieldSelectDateNewGrailPayBankView.isHidden = true
|
|
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
|
|
689
923
|
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
self.heightViewNewAccountFields.constant = 808
|
|
696
|
-
}
|
|
924
|
+
self.btnChosePlanSingleSavedCard.isEnabled = true
|
|
925
|
+
self.txtFieldSelectPlanSingleSavedCard.isUserInteractionEnabled = true
|
|
926
|
+
self.txtFieldSelectPlanSingleSavedCard.isEnabled = true
|
|
927
|
+
self.txtFieldSelectPlanSingleSavedCard.text = ""
|
|
928
|
+
self.DropDownIconSingleSavedCard.isHidden = false
|
|
697
929
|
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
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
|
|
703
1045
|
|
|
704
|
-
self.
|
|
1046
|
+
self.btnSelectRecurringDateNewBankView.isEnabled = true
|
|
1047
|
+
self.txtFieldSelectDateNewAccountView.isUserInteractionEnabled = true
|
|
1048
|
+
self.txtFieldSelectDateNewAccountView.isEnabled = true
|
|
705
1049
|
}
|
|
706
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
|
|
707
1129
|
self.txtFieldSelectPlanSingleSavedCard.isHidden = false
|
|
708
1130
|
self.txtFieldSelectPlanNewCardView.isHidden = false
|
|
709
1131
|
self.txtFieldSelectPlanViewBankFields.isHidden = false
|
|
@@ -795,12 +1217,13 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
795
1217
|
btnNextTopCon.constant = 0
|
|
796
1218
|
if request.is_recurring == true {
|
|
797
1219
|
txtFieldSelectPlanSingleSavedCard.isHidden = false
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
1220
|
+
txtFieldSelectDateSingleSavedCard.isHidden = false
|
|
1221
|
+
// if request.recurringStartDateType == .custom {
|
|
1222
|
+
// txtFieldSelectDateSingleSavedCard.isHidden = false
|
|
1223
|
+
// }
|
|
1224
|
+
// else {
|
|
1225
|
+
// txtFieldSelectDateSingleSavedCard.isHidden = true
|
|
1226
|
+
// }
|
|
804
1227
|
}
|
|
805
1228
|
else {
|
|
806
1229
|
txtFieldSelectPlanSingleSavedCard.isHidden = true
|
|
@@ -885,12 +1308,13 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
885
1308
|
self.btnPayNowSingleAccountView.isHidden = false
|
|
886
1309
|
if request.is_recurring == true {
|
|
887
1310
|
self.txtFieldSelectPlanSingleSavedBankView.isHidden = false
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
1311
|
+
self.txtFieldSelectDateSingleSavedBankView.isHidden = false
|
|
1312
|
+
// if request.recurringStartDateType == .custom {
|
|
1313
|
+
// self.txtFieldSelectDateSingleSavedBankView.isHidden = false
|
|
1314
|
+
// }
|
|
1315
|
+
// else {
|
|
1316
|
+
// self.txtFieldSelectDateSingleSavedBankView.isHidden = true
|
|
1317
|
+
// }
|
|
894
1318
|
}
|
|
895
1319
|
else {
|
|
896
1320
|
self.txtFieldSelectPlanSingleSavedBankView.isHidden = true
|
|
@@ -944,12 +1368,12 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
944
1368
|
self.viewBtnShowSavedCardHeight.constant = 0
|
|
945
1369
|
self.viewBtnShowSavedCardTopCon.constant = 0
|
|
946
1370
|
}
|
|
947
|
-
// else {
|
|
948
|
-
// self.viewBtnShowSavedCards.isHidden = false
|
|
949
|
-
// self.lblBtnShowSaveCard.text = "Show Saved Accounts"
|
|
950
|
-
// self.viewBtnShowSavedCardHeight.constant = 50
|
|
951
|
-
// self.viewBtnShowSavedCardTopCon.constant = 20
|
|
952
|
-
// }
|
|
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
|
+
// }
|
|
953
1377
|
|
|
954
1378
|
self.OTPView.isHidden = true
|
|
955
1379
|
self.emailView.isHidden = true
|
|
@@ -1818,16 +2242,16 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
1818
2242
|
}
|
|
1819
2243
|
|
|
1820
2244
|
@IBAction func actionBtnSelectPlanViewBankFields(_ sender: UIButton) {
|
|
1821
|
-
guard
|
|
2245
|
+
guard let plans = request?.recurringIntervals, !plans.isEmpty else {
|
|
1822
2246
|
print("No recurring intervals available.")
|
|
1823
2247
|
return
|
|
1824
2248
|
}
|
|
1825
2249
|
|
|
1826
|
-
// Check if current payment method is only Bank
|
|
1827
|
-
if request?.selectedPaymentMethods.contains(.Bank) == true {
|
|
1828
|
-
// Remove 'daily' from plans
|
|
1829
|
-
plans.removeAll { $0 == .daily }
|
|
1830
|
-
}
|
|
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
|
+
// }
|
|
1831
2255
|
|
|
1832
2256
|
// Now present the filtered plans
|
|
1833
2257
|
PlanSelector.presentPlanOptions(from: self, sourceView: sender, allowedPlans: plans) { selectedPlan in
|
|
@@ -1844,16 +2268,16 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
1844
2268
|
}
|
|
1845
2269
|
|
|
1846
2270
|
@IBAction func actionBtnSelectPlanSingleSavedAccount(_ sender: UIButton) {
|
|
1847
|
-
guard
|
|
2271
|
+
guard let plans = request?.recurringIntervals, !plans.isEmpty else {
|
|
1848
2272
|
print("No recurring intervals available.")
|
|
1849
2273
|
return
|
|
1850
2274
|
}
|
|
1851
2275
|
|
|
1852
|
-
// Check if current payment method is only Bank
|
|
1853
|
-
if request?.selectedPaymentMethods.contains(.Bank) == true {
|
|
1854
|
-
// Remove 'daily' from plans
|
|
1855
|
-
plans.removeAll { $0 == .daily }
|
|
1856
|
-
}
|
|
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
|
+
// }
|
|
1857
2281
|
|
|
1858
2282
|
PlanSelector.presentPlanOptions(from: self, sourceView: sender, allowedPlans: plans) { selectedPlan in
|
|
1859
2283
|
self.txtFieldSelectPlanSingleSavedBankView.text = selectedPlan
|
|
@@ -1869,16 +2293,16 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
1869
2293
|
}
|
|
1870
2294
|
|
|
1871
2295
|
@IBAction func actionBtnSelectPlanNewAccountView(_ sender: UIButton) {
|
|
1872
|
-
guard
|
|
2296
|
+
guard let plans = request?.recurringIntervals, !plans.isEmpty else {
|
|
1873
2297
|
print("No recurring intervals available.")
|
|
1874
2298
|
return
|
|
1875
2299
|
}
|
|
1876
2300
|
|
|
1877
|
-
// Check if current payment method is only Bank
|
|
1878
|
-
if request?.selectedPaymentMethods.contains(.Bank) == true {
|
|
1879
|
-
// Remove 'daily' from plans
|
|
1880
|
-
plans.removeAll { $0 == .daily }
|
|
1881
|
-
}
|
|
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
|
+
// }
|
|
1882
2306
|
|
|
1883
2307
|
PlanSelector.presentPlanOptions(from: self, sourceView: sender, allowedPlans: plans) { selectedPlan in
|
|
1884
2308
|
self.txtFieldSelectPlanNewAccountView.text = selectedPlan
|
|
@@ -1971,11 +2395,16 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
1971
2395
|
btnNextHeight.constant = 0
|
|
1972
2396
|
btnNextTopCon.constant = isSelectForPay ? 0 : 8
|
|
1973
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
|
+
|
|
1974
2404
|
// Handle recurring fields visibility
|
|
1975
2405
|
let showRecurringFields = isSelectForPay && request.is_recurring == true
|
|
1976
|
-
let isCustomRecurring = request.recurringStartDateType == .custom
|
|
1977
2406
|
txtFieldSelectPlanSingleSavedCard.isHidden = !showRecurringFields
|
|
1978
|
-
txtFieldSelectDateSingleSavedCard.isHidden = !
|
|
2407
|
+
txtFieldSelectDateSingleSavedCard.isHidden = !showRecurringFields // Show for both .custom and .fixed
|
|
1979
2408
|
|
|
1980
2409
|
// Set selected card based on tapped index
|
|
1981
2410
|
if isSelectForPay, index < savedCards.count {
|
|
@@ -2382,16 +2811,16 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
2382
2811
|
}
|
|
2383
2812
|
|
|
2384
2813
|
@IBAction func actionBtnChosePlanGrailPayBankView(_ sender: UIButton) {
|
|
2385
|
-
guard
|
|
2814
|
+
guard let plans = request?.recurringIntervals, !plans.isEmpty else {
|
|
2386
2815
|
print("No recurring intervals available.")
|
|
2387
2816
|
return
|
|
2388
2817
|
}
|
|
2389
2818
|
|
|
2390
|
-
// Check if current payment method is only Bank
|
|
2391
|
-
if request?.selectedPaymentMethods.contains(.Bank) == true {
|
|
2392
|
-
// Remove 'daily' from plans
|
|
2393
|
-
plans.removeAll { $0 == .daily }
|
|
2394
|
-
}
|
|
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
|
+
// }
|
|
2395
2824
|
|
|
2396
2825
|
PlanSelector.presentPlanOptions(from: self, sourceView: sender, allowedPlans: plans) { selectedPlan in
|
|
2397
2826
|
self.txtFieldChosePlanGrailPayBankView.text = selectedPlan
|
|
@@ -2407,16 +2836,16 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
2407
2836
|
}
|
|
2408
2837
|
|
|
2409
2838
|
@IBAction func actionBtnSelectPlanNewGrailPayBankView(_ sender: UIButton) {
|
|
2410
|
-
guard
|
|
2839
|
+
guard let plans = request?.recurringIntervals, !plans.isEmpty else {
|
|
2411
2840
|
print("No recurring intervals available.")
|
|
2412
2841
|
return
|
|
2413
2842
|
}
|
|
2414
2843
|
|
|
2415
|
-
// Check if current payment method is only Bank
|
|
2416
|
-
if request?.selectedPaymentMethods.contains(.Bank) == true {
|
|
2417
|
-
// Remove 'daily' from plans
|
|
2418
|
-
plans.removeAll { $0 == .daily }
|
|
2419
|
-
}
|
|
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
|
+
// }
|
|
2420
2849
|
|
|
2421
2850
|
PlanSelector.presentPlanOptions(from: self, sourceView: sender, allowedPlans: plans) { selectedPlan in
|
|
2422
2851
|
self.txtFieldChosePlanNewGrailPayBankView.text = selectedPlan
|
|
@@ -2447,12 +2876,8 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
2447
2876
|
uRLRequest.httpMethod = "POST"
|
|
2448
2877
|
uRLRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
|
|
2449
2878
|
|
|
2450
|
-
|
|
2451
|
-
|
|
2452
|
-
let apiSecret = EnvironmentConfig.apiSecret {
|
|
2453
|
-
uRLRequest.addValue(apiKey, forHTTPHeaderField: "x-api-key")
|
|
2454
|
-
uRLRequest.addValue(apiSecret, forHTTPHeaderField: "x-api-secret")
|
|
2455
|
-
}
|
|
2879
|
+
let token = UserStoreSingleton.shared.clientToken ?? ""
|
|
2880
|
+
uRLRequest.addValue(token, forHTTPHeaderField: "clientToken")
|
|
2456
2881
|
|
|
2457
2882
|
// Prepare parameters
|
|
2458
2883
|
let params: [String: Any] = [
|
|
@@ -2525,12 +2950,13 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
2525
2950
|
|
|
2526
2951
|
if self.request.is_recurring == true {
|
|
2527
2952
|
self.txtFieldChosePlanGrailPayBankView.isHidden = false
|
|
2528
|
-
|
|
2529
|
-
|
|
2530
|
-
|
|
2531
|
-
|
|
2532
|
-
|
|
2533
|
-
|
|
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
|
+
// }
|
|
2534
2960
|
}
|
|
2535
2961
|
|
|
2536
2962
|
if let accountNumber = account["account_number"] as? String {
|
|
@@ -2593,12 +3019,8 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
2593
3019
|
request.httpMethod = "POST"
|
|
2594
3020
|
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
|
|
2595
3021
|
|
|
2596
|
-
|
|
2597
|
-
|
|
2598
|
-
let apiSecret = EnvironmentConfig.apiSecret {
|
|
2599
|
-
request.addValue(apiKey, forHTTPHeaderField: "x-api-key")
|
|
2600
|
-
request.addValue(apiSecret, forHTTPHeaderField: "x-api-secret")
|
|
2601
|
-
}
|
|
3022
|
+
let token = UserStoreSingleton.shared.clientToken ?? ""
|
|
3023
|
+
request.addValue(token, forHTTPHeaderField: "clientToken")
|
|
2602
3024
|
|
|
2603
3025
|
// Save customer_id for use in charge API
|
|
2604
3026
|
let customerID = UserStoreSingleton.shared.customerId ?? ""
|
|
@@ -2680,12 +3102,13 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
2680
3102
|
|
|
2681
3103
|
if self.request.is_recurring == true {
|
|
2682
3104
|
self.txtFieldChosePlanNewGrailPayBankView.isHidden = false
|
|
2683
|
-
|
|
2684
|
-
|
|
2685
|
-
|
|
2686
|
-
|
|
2687
|
-
|
|
2688
|
-
|
|
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
|
+
// }
|
|
2689
3112
|
}
|
|
2690
3113
|
|
|
2691
3114
|
if let accountNumber = account["account_number"] as? String {
|
|
@@ -3119,71 +3542,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
3119
3542
|
}
|
|
3120
3543
|
}
|
|
3121
3544
|
|
|
3122
|
-
// func launchGrailPay() {
|
|
3123
|
-
// guard let grailPayParams = request.grailPayParams else {
|
|
3124
|
-
// print("GrailPay parameters not available in request")
|
|
3125
|
-
// return
|
|
3126
|
-
// }
|
|
3127
|
-
//
|
|
3128
|
-
// GrailPayHelper.presentGrailPay(from: self, request: grailPayParams) { [weak self] result in
|
|
3129
|
-
// guard let self = self else { return }
|
|
3130
|
-
//
|
|
3131
|
-
// switch result.type {
|
|
3132
|
-
// case .success:
|
|
3133
|
-
// if let chargeData = result.chargeData,
|
|
3134
|
-
// let dataArray = chargeData["data"] as? [[String: Any]],
|
|
3135
|
-
// let selectedAccount = dataArray.first {
|
|
3136
|
-
//
|
|
3137
|
-
// print("✅ Bank connected: \(selectedAccount)")
|
|
3138
|
-
// self.selectedGrailPayAccountType = selectedAccount["account_type"] as? String
|
|
3139
|
-
// self.selectedGrailPayAccountName = selectedAccount["name"] as? String
|
|
3140
|
-
//
|
|
3141
|
-
// if self.grailPaySource == .existingAccount {
|
|
3142
|
-
// self.accountConnectApi(account: selectedAccount)
|
|
3143
|
-
// self.lblGrailPayAabandonError.text = "Default account successfully set"
|
|
3144
|
-
// self.viewGrailPayAbandon.isHidden = false
|
|
3145
|
-
// } else if self.grailPaySource == .newAccount {
|
|
3146
|
-
// self.newGrailPayAccountConnectApi(account: selectedAccount)
|
|
3147
|
-
// self.lblAbandonGrailPayNewAccountView.text = "Default account successfully set"
|
|
3148
|
-
// self.viewAbandonGrailPayNewAccountView.isHidden = false
|
|
3149
|
-
//
|
|
3150
|
-
// self.selectedNewGrailPayAccountType = selectedAccount["account_type"] as? String
|
|
3151
|
-
// self.selectedNewGrailPayAccountName = selectedAccount["name"] as? String
|
|
3152
|
-
// }
|
|
3153
|
-
//
|
|
3154
|
-
// if self.selectedPaymentMethod == "Bank" {
|
|
3155
|
-
// self.viewBtnShowSavedCards.isHidden = true
|
|
3156
|
-
// }
|
|
3157
|
-
//
|
|
3158
|
-
// let amountText = String(format: "$%.2f", self.request.amount ?? 0)
|
|
3159
|
-
// let submitText = self.request.submitButtonText
|
|
3160
|
-
// let defaultTitle = (submitText?.isEmpty == false)
|
|
3161
|
-
// ? "\(submitText!) (\(amountText))"
|
|
3162
|
-
// : "Pay Now (\(amountText))"
|
|
3163
|
-
//
|
|
3164
|
-
// if self.grailPaySource == .existingAccount {
|
|
3165
|
-
// self.btnLinkBankAccount.setTitle(defaultTitle, for: .normal)
|
|
3166
|
-
// } else if self.grailPaySource == .newAccount {
|
|
3167
|
-
// self.btnLinkGrailPayAddNewAccount.setTitle(defaultTitle, for: .normal)
|
|
3168
|
-
// }
|
|
3169
|
-
//
|
|
3170
|
-
// } else {
|
|
3171
|
-
// print("⚠️ chargeData does not contain valid account data")
|
|
3172
|
-
// self.showGrailPayError(message: "Failed to retrieve account info")
|
|
3173
|
-
// }
|
|
3174
|
-
//
|
|
3175
|
-
// case .cancelled:
|
|
3176
|
-
// print("⚠️ GrailPay cancelled")
|
|
3177
|
-
// self.showGrailPayError(message: "User has abandoned the action")
|
|
3178
|
-
//
|
|
3179
|
-
// case .error:
|
|
3180
|
-
// let errorMsg = result.error?.localizedDescription ?? "Unknown error"
|
|
3181
|
-
// print("❌ GrailPay error: \(errorMsg)")
|
|
3182
|
-
// self.showGrailPayError(message: errorMsg)
|
|
3183
|
-
// }
|
|
3184
|
-
// }
|
|
3185
|
-
// }
|
|
3186
|
-
|
|
3187
3545
|
func launchGrailPay() {
|
|
3188
3546
|
guard let grailPayParams = request.grailPayParams else {
|
|
3189
3547
|
print("GrailPay parameters not available in request")
|
|
@@ -3307,13 +3665,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
3307
3665
|
print("Setting clientToken header: \(token ?? "None")")
|
|
3308
3666
|
uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
|
|
3309
3667
|
|
|
3310
|
-
if let apiKey = EnvironmentConfig.apiKey {
|
|
3311
|
-
uRLRequest.addValue(apiKey, forHTTPHeaderField: "X-Api-Key")
|
|
3312
|
-
}
|
|
3313
|
-
if let apiSecret = EnvironmentConfig.apiSecret {
|
|
3314
|
-
uRLRequest.addValue(apiSecret, forHTTPHeaderField: "X-Api-Secret")
|
|
3315
|
-
}
|
|
3316
|
-
|
|
3317
3668
|
var params: [String: Any] = [
|
|
3318
3669
|
"account_id": self.grailPayAccountID ?? "",
|
|
3319
3670
|
"account_type": self.selectedGrailPayAccountType ?? "",
|
|
@@ -3520,13 +3871,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
3520
3871
|
print("Setting clientToken header: \(token ?? "None")")
|
|
3521
3872
|
uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
|
|
3522
3873
|
|
|
3523
|
-
if let apiKey = EnvironmentConfig.apiKey {
|
|
3524
|
-
uRLRequest.addValue(apiKey, forHTTPHeaderField: "X-Api-Key")
|
|
3525
|
-
}
|
|
3526
|
-
if let apiSecret = EnvironmentConfig.apiSecret {
|
|
3527
|
-
uRLRequest.addValue(apiSecret, forHTTPHeaderField: "X-Api-Secret")
|
|
3528
|
-
}
|
|
3529
|
-
|
|
3530
3874
|
let emailText = txtFieldEmailGrailPayView.text
|
|
3531
3875
|
let emailPrefix = emailText.components(separatedBy: "@").first ?? ""
|
|
3532
3876
|
|
|
@@ -3750,13 +4094,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
3750
4094
|
print("Setting clientToken header: \(token ?? "None")")
|
|
3751
4095
|
uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
|
|
3752
4096
|
|
|
3753
|
-
if let apiKey = EnvironmentConfig.apiKey {
|
|
3754
|
-
uRLRequest.addValue(apiKey, forHTTPHeaderField: "X-Api-Key")
|
|
3755
|
-
}
|
|
3756
|
-
if let apiSecret = EnvironmentConfig.apiSecret {
|
|
3757
|
-
uRLRequest.addValue(apiSecret, forHTTPHeaderField: "X-Api-Secret")
|
|
3758
|
-
}
|
|
3759
|
-
|
|
3760
4097
|
var params: [String: Any] = [
|
|
3761
4098
|
"account_id": self.newGrailPayAccountID ?? "",
|
|
3762
4099
|
"account_type": self.selectedNewGrailPayAccountType ?? "",
|
|
@@ -3972,13 +4309,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
3972
4309
|
print("Setting clientToken header: \(token ?? "None")")
|
|
3973
4310
|
uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
|
|
3974
4311
|
|
|
3975
|
-
if let apiKey = EnvironmentConfig.apiKey {
|
|
3976
|
-
uRLRequest.addValue(apiKey, forHTTPHeaderField: "X-Api-Key")
|
|
3977
|
-
}
|
|
3978
|
-
if let apiSecret = EnvironmentConfig.apiSecret {
|
|
3979
|
-
uRLRequest.addValue(apiSecret, forHTTPHeaderField: "X-Api-Secret")
|
|
3980
|
-
}
|
|
3981
|
-
|
|
3982
4312
|
var params: [String: Any] = [
|
|
3983
4313
|
"account_id": selectedbankAccounts?.account_id ?? "",
|
|
3984
4314
|
"customer": selectedbankAccounts?.customer_id ?? "",
|
|
@@ -4842,7 +5172,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
4842
5172
|
}
|
|
4843
5173
|
}
|
|
4844
5174
|
}
|
|
4845
|
-
|
|
5175
|
+
|
|
4846
5176
|
@IBAction func actionBtnCloseSettingView(_ sender: UIButton) {
|
|
4847
5177
|
settingsView.isHidden = true
|
|
4848
5178
|
}
|
|
@@ -5422,13 +5752,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
5422
5752
|
print("Setting clientToken header: \(token ?? "None")")
|
|
5423
5753
|
request.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
|
|
5424
5754
|
|
|
5425
|
-
// Add API headers
|
|
5426
|
-
if let apiKey = EnvironmentConfig.apiKey,
|
|
5427
|
-
let apiSecret = EnvironmentConfig.apiSecret {
|
|
5428
|
-
request.addValue(apiKey, forHTTPHeaderField: "x-api-key")
|
|
5429
|
-
request.addValue(apiSecret, forHTTPHeaderField: "x-api-secret")
|
|
5430
|
-
}
|
|
5431
|
-
|
|
5432
5755
|
// Define the parameters for the request
|
|
5433
5756
|
let params: [String: Any] = [
|
|
5434
5757
|
"card_search_value": txtFieldEmail.text ?? "",
|
|
@@ -5509,13 +5832,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
5509
5832
|
print("Setting clientToken header: \(token ?? "None")")
|
|
5510
5833
|
urlRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
|
|
5511
5834
|
|
|
5512
|
-
// Add API headers
|
|
5513
|
-
if let apiKey = EnvironmentConfig.apiKey,
|
|
5514
|
-
let apiSecret = EnvironmentConfig.apiSecret {
|
|
5515
|
-
urlRequest.addValue(apiKey, forHTTPHeaderField: "x-api-key")
|
|
5516
|
-
urlRequest.addValue(apiSecret, forHTTPHeaderField: "x-api-secret")
|
|
5517
|
-
}
|
|
5518
|
-
|
|
5519
5835
|
// Safe access from main thread (assumes you call this from main thread)
|
|
5520
5836
|
let email = self.txtFieldEmail.text ?? ""
|
|
5521
5837
|
let otp = getCombinedOTP()
|
|
@@ -5667,13 +5983,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
5667
5983
|
print("🔑 Setting customerToken header: \(token ?? "None")")
|
|
5668
5984
|
uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Customer-Token")
|
|
5669
5985
|
|
|
5670
|
-
// Add API headers
|
|
5671
|
-
if let apiKey = EnvironmentConfig.apiKey,
|
|
5672
|
-
let apiSecret = EnvironmentConfig.apiSecret {
|
|
5673
|
-
uRLRequest.addValue(apiKey, forHTTPHeaderField: "x-api-key")
|
|
5674
|
-
uRLRequest.addValue(apiSecret, forHTTPHeaderField: "x-api-secret")
|
|
5675
|
-
}
|
|
5676
|
-
|
|
5677
5986
|
let session = URLSession.shared
|
|
5678
5987
|
let task = session.dataTask(with: uRLRequest) { [weak self] (data, response, error) in
|
|
5679
5988
|
guard let self = self else { return }
|
|
@@ -5769,9 +6078,10 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
5769
6078
|
|
|
5770
6079
|
if self.request.is_recurring == true {
|
|
5771
6080
|
self.txtFieldSelectPlanSingleSavedCard.isHidden = false
|
|
5772
|
-
|
|
5773
|
-
|
|
5774
|
-
|
|
6081
|
+
self.txtFieldSelectDateSingleSavedCard.isHidden = false
|
|
6082
|
+
// if self.request.recurringStartDateType == .custom {
|
|
6083
|
+
// self.txtFieldSelectDateSingleSavedCard.isHidden = false
|
|
6084
|
+
// }
|
|
5775
6085
|
} else {
|
|
5776
6086
|
self.txtFieldSelectPlanSingleSavedCard.isHidden = true
|
|
5777
6087
|
self.txtFieldSelectDateSingleSavedCard.isHidden = true
|
|
@@ -6531,13 +6841,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
6531
6841
|
print("Setting clientToken header: \(token ?? "None")")
|
|
6532
6842
|
uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
|
|
6533
6843
|
|
|
6534
|
-
// Add API headers
|
|
6535
|
-
if let apiKey = EnvironmentConfig.apiKey,
|
|
6536
|
-
let apiSecret = EnvironmentConfig.apiSecret {
|
|
6537
|
-
uRLRequest.addValue(apiKey, forHTTPHeaderField: "x-api-key")
|
|
6538
|
-
uRLRequest.addValue(apiSecret, forHTTPHeaderField: "x-api-secret")
|
|
6539
|
-
}
|
|
6540
|
-
|
|
6541
6844
|
let emailPrefix = UserStoreSingleton.shared.verificationEmail?.components(separatedBy: "@").first ?? ""
|
|
6542
6845
|
|
|
6543
6846
|
var params: [String: Any] = [
|
|
@@ -6950,13 +7253,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
6950
7253
|
print("Setting customerToken header: \(token ?? "None")")
|
|
6951
7254
|
request.addValue(token ?? "", forHTTPHeaderField: "Customer-Token")
|
|
6952
7255
|
|
|
6953
|
-
// Add API headers
|
|
6954
|
-
if let apiKey = EnvironmentConfig.apiKey,
|
|
6955
|
-
let apiSecret = EnvironmentConfig.apiSecret {
|
|
6956
|
-
request.addValue(apiKey, forHTTPHeaderField: "x-api-key")
|
|
6957
|
-
request.addValue(apiSecret, forHTTPHeaderField: "x-api-secret")
|
|
6958
|
-
}
|
|
6959
|
-
|
|
6960
7256
|
// Get the text fields from the selected cell and trim whitespace
|
|
6961
7257
|
let nameText = txtFieldNameOnCardUpdateCardView.text?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
|
|
6962
7258
|
let cvvText = txtFieldCVVUpdateCardView.text?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
|
|
@@ -7117,14 +7413,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
7117
7413
|
print("Customer-Token is nil")
|
|
7118
7414
|
}
|
|
7119
7415
|
|
|
7120
|
-
// Add API headers
|
|
7121
|
-
if let apiKey = EnvironmentConfig.apiKey {
|
|
7122
|
-
request.addValue(apiKey, forHTTPHeaderField: "x-api-key")
|
|
7123
|
-
}
|
|
7124
|
-
if let apiSecret = EnvironmentConfig.apiSecret {
|
|
7125
|
-
request.addValue(apiSecret, forHTTPHeaderField: "x-api-secret")
|
|
7126
|
-
}
|
|
7127
|
-
|
|
7128
7416
|
let session = URLSession.shared
|
|
7129
7417
|
let task = session.dataTask(with: request) { [weak self] data, response, error in
|
|
7130
7418
|
guard let self = self else { return }
|
|
@@ -7312,11 +7600,12 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
7312
7600
|
|
|
7313
7601
|
if self.request.is_recurring == true {
|
|
7314
7602
|
self.txtFieldSelectPlanSingleSavedBankView.isHidden = false
|
|
7315
|
-
|
|
7316
|
-
|
|
7317
|
-
|
|
7318
|
-
|
|
7319
|
-
|
|
7603
|
+
self.txtFieldSelectDateSingleSavedBankView.isHidden = false
|
|
7604
|
+
// if self.request.recurringStartDateType == .custom {
|
|
7605
|
+
// self.txtFieldSelectDateSingleSavedBankView.isHidden = false
|
|
7606
|
+
// } else {
|
|
7607
|
+
// self.txtFieldSelectDateSingleSavedBankView.isHidden = true
|
|
7608
|
+
// }
|
|
7320
7609
|
}
|
|
7321
7610
|
else {
|
|
7322
7611
|
self.txtFieldSelectPlanSingleSavedBankView.isHidden = true
|
|
@@ -7371,13 +7660,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
7371
7660
|
print("Setting clientToken header: \(token ?? "None")")
|
|
7372
7661
|
uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
|
|
7373
7662
|
|
|
7374
|
-
// Add API headers
|
|
7375
|
-
if let apiKey = EnvironmentConfig.apiKey,
|
|
7376
|
-
let apiSecret = EnvironmentConfig.apiSecret {
|
|
7377
|
-
uRLRequest.addValue(apiKey, forHTTPHeaderField: "x-api-key")
|
|
7378
|
-
uRLRequest.addValue(apiSecret, forHTTPHeaderField: "x-api-secret")
|
|
7379
|
-
}
|
|
7380
|
-
|
|
7381
7663
|
var params: [String: Any] = [
|
|
7382
7664
|
"name": txtFieldAccountName.text ?? "",
|
|
7383
7665
|
"email": txtFieldEmailAccountView.text,
|
|
@@ -7387,7 +7669,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
7387
7669
|
"routing_number": txtFieldRoutingNumber.text?.replacingOccurrences(of: " ", with: "") ?? "",
|
|
7388
7670
|
"account_number": txtFieldAccountNumber.text?.replacingOccurrences(of: " ", with: "") ?? "",
|
|
7389
7671
|
"payment_mode": "auth_and_capture",
|
|
7390
|
-
"payment_intent": UserStoreSingleton.shared.paymentIntent ?? "",
|
|
7391
7672
|
"levelIndicator": 1,
|
|
7392
7673
|
"payment_method": "ach"
|
|
7393
7674
|
]
|
|
@@ -7558,13 +7839,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
7558
7839
|
print("Setting clientToken header: \(token ?? "None")")
|
|
7559
7840
|
uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
|
|
7560
7841
|
|
|
7561
|
-
// Add API headers
|
|
7562
|
-
if let apiKey = EnvironmentConfig.apiKey,
|
|
7563
|
-
let apiSecret = EnvironmentConfig.apiSecret {
|
|
7564
|
-
uRLRequest.addValue(apiKey, forHTTPHeaderField: "x-api-key")
|
|
7565
|
-
uRLRequest.addValue(apiSecret, forHTTPHeaderField: "x-api-secret")
|
|
7566
|
-
}
|
|
7567
|
-
|
|
7568
7842
|
var params: [String: Any] = [
|
|
7569
7843
|
"name": !(request.name?.isEmpty ?? true) ? request.name! : (txtFieldAccountName.text ?? ""),
|
|
7570
7844
|
"email": txtFieldEmailAccountView.text,
|
|
@@ -7574,7 +7848,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
7574
7848
|
"routing_number": txtFieldRoutingNumber.text?.replacingOccurrences(of: " ", with: "") ?? "",
|
|
7575
7849
|
"account_number": txtFieldAccountNumber.text?.replacingOccurrences(of: " ", with: "") ?? "",
|
|
7576
7850
|
"payment_mode": "auth_and_capture",
|
|
7577
|
-
"payment_intent": UserStoreSingleton.shared.paymentIntent ?? "",
|
|
7578
7851
|
"levelIndicator": 1,
|
|
7579
7852
|
"payment_method": "ach"
|
|
7580
7853
|
]
|
|
@@ -7801,13 +8074,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
7801
8074
|
print("Setting clientToken header: \(token ?? "None")")
|
|
7802
8075
|
uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
|
|
7803
8076
|
|
|
7804
|
-
// Add API headers
|
|
7805
|
-
if let apiKey = EnvironmentConfig.apiKey,
|
|
7806
|
-
let apiSecret = EnvironmentConfig.apiSecret {
|
|
7807
|
-
uRLRequest.addValue(apiKey, forHTTPHeaderField: "x-api-key")
|
|
7808
|
-
uRLRequest.addValue(apiSecret, forHTTPHeaderField: "x-api-secret")
|
|
7809
|
-
}
|
|
7810
|
-
|
|
7811
8077
|
var params: [String: Any] = [
|
|
7812
8078
|
"account_id": selectedbankAccounts?.account_id ?? "",
|
|
7813
8079
|
"customer": selectedbankAccounts?.customer_id ?? "",
|
|
@@ -7966,13 +8232,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
7966
8232
|
print("Setting clientToken header: \(token ?? "None")")
|
|
7967
8233
|
uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
|
|
7968
8234
|
|
|
7969
|
-
// Add API headers
|
|
7970
|
-
if let apiKey = EnvironmentConfig.apiKey,
|
|
7971
|
-
let apiSecret = EnvironmentConfig.apiSecret {
|
|
7972
|
-
uRLRequest.addValue(apiKey, forHTTPHeaderField: "x-api-key")
|
|
7973
|
-
uRLRequest.addValue(apiSecret, forHTTPHeaderField: "x-api-secret")
|
|
7974
|
-
}
|
|
7975
|
-
|
|
7976
8235
|
var params: [String: Any] = [
|
|
7977
8236
|
"account_id": selectedbankAccounts?.account_id ?? "",
|
|
7978
8237
|
"customer": selectedbankAccounts?.customer_id ?? "",
|
|
@@ -8186,13 +8445,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
8186
8445
|
print("Setting clientToken header: \(token ?? "None")")
|
|
8187
8446
|
uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
|
|
8188
8447
|
|
|
8189
|
-
// Add API headers
|
|
8190
|
-
if let apiKey = EnvironmentConfig.apiKey,
|
|
8191
|
-
let apiSecret = EnvironmentConfig.apiSecret {
|
|
8192
|
-
uRLRequest.addValue(apiKey, forHTTPHeaderField: "x-api-key")
|
|
8193
|
-
uRLRequest.addValue(apiSecret, forHTTPHeaderField: "x-api-secret")
|
|
8194
|
-
}
|
|
8195
|
-
|
|
8196
8448
|
let accountName = txtFieldAccountNameNewAccountView.text?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
|
|
8197
8449
|
let routingNumber = txtFieldRoutingNumberNewAccountView.text?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
|
|
8198
8450
|
let accountType = txtFieldAccountTypeNewAccountView.text?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
|
|
@@ -8208,7 +8460,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
8208
8460
|
"routing_number": routingNumber,
|
|
8209
8461
|
"account_number": accountNumber,
|
|
8210
8462
|
"payment_mode": "auth_and_capture",
|
|
8211
|
-
"payment_intent": UserStoreSingleton.shared.paymentIntent ?? "",
|
|
8212
8463
|
"levelIndicator": 1,
|
|
8213
8464
|
]
|
|
8214
8465
|
|
|
@@ -8361,13 +8612,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
8361
8612
|
print("Setting clientToken header: \(token ?? "None")")
|
|
8362
8613
|
uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
|
|
8363
8614
|
|
|
8364
|
-
// Add API headers
|
|
8365
|
-
if let apiKey = EnvironmentConfig.apiKey,
|
|
8366
|
-
let apiSecret = EnvironmentConfig.apiSecret {
|
|
8367
|
-
uRLRequest.addValue(apiKey, forHTTPHeaderField: "x-api-key")
|
|
8368
|
-
uRLRequest.addValue(apiSecret, forHTTPHeaderField: "x-api-secret")
|
|
8369
|
-
}
|
|
8370
|
-
|
|
8371
8615
|
let accountName = txtFieldAccountNameNewAccountView.text?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
|
|
8372
8616
|
let routingNumber = txtFieldRoutingNumberNewAccountView.text?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
|
|
8373
8617
|
let accountType = txtFieldAccountTypeNewAccountView.text?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
|
|
@@ -8382,7 +8626,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
8382
8626
|
"routing_number": routingNumber,
|
|
8383
8627
|
"account_number": accountNumber,
|
|
8384
8628
|
"payment_mode": "auth_and_capture",
|
|
8385
|
-
"payment_intent": UserStoreSingleton.shared.paymentIntent ?? "",
|
|
8386
8629
|
"levelIndicator": 1,
|
|
8387
8630
|
]
|
|
8388
8631
|
|
|
@@ -8590,13 +8833,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
8590
8833
|
print("Setting clientToken header: \(token ?? "None")")
|
|
8591
8834
|
uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
|
|
8592
8835
|
|
|
8593
|
-
// Add API headers
|
|
8594
|
-
if let apiKey = EnvironmentConfig.apiKey,
|
|
8595
|
-
let apiSecret = EnvironmentConfig.apiSecret {
|
|
8596
|
-
uRLRequest.addValue(apiKey, forHTTPHeaderField: "x-api-key")
|
|
8597
|
-
uRLRequest.addValue(apiSecret, forHTTPHeaderField: "x-api-secret")
|
|
8598
|
-
}
|
|
8599
|
-
|
|
8600
8836
|
// Retrieve and trim text field values (removing leading and trailing whitespace)
|
|
8601
8837
|
let accountName = txtFieldAccountNameNewAccountView.text?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
|
|
8602
8838
|
let routingNumber = txtFieldRoutingNumberNewAccountView.text?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
|
|
@@ -8614,7 +8850,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
8614
8850
|
"routing_number": routingNumber,
|
|
8615
8851
|
"account_number": accountNumber,
|
|
8616
8852
|
"payment_mode": "auth_and_capture",
|
|
8617
|
-
"payment_intent": UserStoreSingleton.shared.paymentIntent ?? "",
|
|
8618
8853
|
"levelIndicator": 1,
|
|
8619
8854
|
"save_account": 1,
|
|
8620
8855
|
"payment_method": "ach"
|
|
@@ -8774,13 +9009,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
8774
9009
|
print("Setting customerToken header: \(token ?? "None")")
|
|
8775
9010
|
request.addValue(token ?? "", forHTTPHeaderField: "Customer-Token")
|
|
8776
9011
|
|
|
8777
|
-
// Add API headers
|
|
8778
|
-
if let apiKey = EnvironmentConfig.apiKey,
|
|
8779
|
-
let apiSecret = EnvironmentConfig.apiSecret {
|
|
8780
|
-
request.addValue(apiKey, forHTTPHeaderField: "x-api-key")
|
|
8781
|
-
request.addValue(apiSecret, forHTTPHeaderField: "x-api-secret")
|
|
8782
|
-
}
|
|
8783
|
-
|
|
8784
9012
|
let session = URLSession.shared
|
|
8785
9013
|
let task = session.dataTask(with: request) { [weak self] (serviceData, serviceResponse, error) in
|
|
8786
9014
|
guard let self = self else { return }
|
|
@@ -8856,13 +9084,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
8856
9084
|
print("Setting clientToken header: \(token ?? "None")")
|
|
8857
9085
|
urlRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
|
|
8858
9086
|
|
|
8859
|
-
// Add API headers
|
|
8860
|
-
if let apiKey = EnvironmentConfig.apiKey,
|
|
8861
|
-
let apiSecret = EnvironmentConfig.apiSecret {
|
|
8862
|
-
urlRequest.addValue(apiKey, forHTTPHeaderField: "x-api-key")
|
|
8863
|
-
urlRequest.addValue(apiSecret, forHTTPHeaderField: "x-api-secret")
|
|
8864
|
-
}
|
|
8865
|
-
|
|
8866
9087
|
var params: [String: Any] = [
|
|
8867
9088
|
"name": UserStoreSingleton.shared.merchantName ?? "",
|
|
8868
9089
|
"email": UserStoreSingleton.shared.merchantEmail ?? "",
|
|
@@ -9009,13 +9230,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
9009
9230
|
print("Setting clientToken header: \(token ?? "None")")
|
|
9010
9231
|
request.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
|
|
9011
9232
|
|
|
9012
|
-
// Add API headers
|
|
9013
|
-
if let apiKey = EnvironmentConfig.apiKey,
|
|
9014
|
-
let apiSecret = EnvironmentConfig.apiSecret {
|
|
9015
|
-
request.addValue(apiKey, forHTTPHeaderField: "x-api-key")
|
|
9016
|
-
request.addValue(apiSecret, forHTTPHeaderField: "x-api-secret")
|
|
9017
|
-
}
|
|
9018
|
-
|
|
9019
9233
|
let session = URLSession.shared
|
|
9020
9234
|
let task = session.dataTask(with: request) { [weak self] (data, response, error) in
|
|
9021
9235
|
guard let self = self else { return }
|
|
@@ -9075,13 +9289,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
9075
9289
|
print("Setting clientToken header: \(token ?? "None")")
|
|
9076
9290
|
uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
|
|
9077
9291
|
|
|
9078
|
-
// Add API headers
|
|
9079
|
-
if let apiKey = EnvironmentConfig.apiKey,
|
|
9080
|
-
let apiSecret = EnvironmentConfig.apiSecret {
|
|
9081
|
-
uRLRequest.addValue(apiKey, forHTTPHeaderField: "x-api-key")
|
|
9082
|
-
uRLRequest.addValue(apiSecret, forHTTPHeaderField: "x-api-secret")
|
|
9083
|
-
}
|
|
9084
|
-
|
|
9085
9292
|
var params: [String: Any] = [
|
|
9086
9293
|
"name": cardNameTextField.text,
|
|
9087
9294
|
"email": txtFieldEmailCardView.text,
|
|
@@ -9390,13 +9597,6 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
|
|
|
9390
9597
|
print("Setting clientToken header: \(token ?? "None")")
|
|
9391
9598
|
uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
|
|
9392
9599
|
|
|
9393
|
-
// Add API headers
|
|
9394
|
-
if let apiKey = EnvironmentConfig.apiKey,
|
|
9395
|
-
let apiSecret = EnvironmentConfig.apiSecret {
|
|
9396
|
-
uRLRequest.addValue(apiKey, forHTTPHeaderField: "x-api-key")
|
|
9397
|
-
uRLRequest.addValue(apiSecret, forHTTPHeaderField: "x-api-secret")
|
|
9398
|
-
}
|
|
9399
|
-
|
|
9400
9600
|
var params: [String: Any] = [
|
|
9401
9601
|
"name": nameText,
|
|
9402
9602
|
"email": UserStoreSingleton.shared.verificationEmail ?? "",
|
|
@@ -9765,9 +9965,10 @@ extension PaymentInfoVC: UICollectionViewDelegate, UICollectionViewDataSource, U
|
|
|
9765
9965
|
self.btnNextTopCon.constant = 0
|
|
9766
9966
|
if self.request.is_recurring == true {
|
|
9767
9967
|
self.txtFieldSelectPlanSingleSavedCard.isHidden = false
|
|
9768
|
-
|
|
9769
|
-
|
|
9770
|
-
|
|
9968
|
+
self.txtFieldSelectDateSingleSavedCard.isHidden = false
|
|
9969
|
+
// if request.recurringStartDateType == .custom {
|
|
9970
|
+
// self.txtFieldSelectDateSingleSavedCard.isHidden = false
|
|
9971
|
+
// }
|
|
9771
9972
|
}
|
|
9772
9973
|
else {
|
|
9773
9974
|
self.txtFieldSelectPlanSingleSavedCard.isHidden = true
|
|
@@ -11024,3 +11225,4 @@ extension PaymentInfoVC: UITextFieldDelegate {
|
|
|
11024
11225
|
}
|
|
11025
11226
|
|
|
11026
11227
|
}
|
|
11228
|
+
|