From 9a642395a717dab691cf0ef9221ee6aee79170ae Mon Sep 17 00:00:00 2001 From: Arcapas Date: Wed, 11 Mar 2026 15:59:52 -0300 Subject: [PATCH 1/3] update --- docs/SDK Test (Do not delete)/_order.yaml | 3 - .../android-sdk-v2/_order.yaml | 3 - .../advanced-features-android-sdk-v2.md | 592 -------- .../android-sdk-release-notes.md | 212 --- .../code-examples-android-sdk-v2.md | 771 ----------- .../android-sdk-v2/index.md | 346 ----- .../ios-sdk-fix/_order.yaml | 2 - .../ios-sdk-fix/index.md | 499 ------- .../ios-sdk-fix/ios-advanced-features-fix.md | 657 --------- .../ios-sdk-fix/ios-examples-fix.md | 820 ------------ .../react-native-sdk-v2.md | 7 - docs/SDKs/Card Enrollment/_order.yaml | 3 + .../Card Enrollment/android-enrollment.md} | 125 +- .../Card Enrollment/ios-enrollment.md} | 111 +- .../Card Enrollment/web-enrollment.md} | 101 +- docs/SDKs/Customization/_order.yaml | 3 + .../Customization/android.md} | 0 .../Customization/ios.md} | 0 .../Customization}/secure-fields/_order.yaml | 0 .../secure-fields/enrollment-secure-fields.md | 0 .../Customization}/secure-fields/index.md | 0 .../secure-fields/payment-secure-fields.md | 0 docs/SDKs/Full Checkout/_order.yaml | 3 + docs/SDKs/Full Checkout/android-payments.md | 393 ++++++ .../Full Checkout/ios-payments.md} | 393 +----- docs/SDKs/Full Checkout/web-payments.md | 205 +++ docs/SDKs/Overview/References/_order.yaml | 3 + .../Overview/References/android.md} | 6 +- .../Overview/References/ios.md} | 6 +- .../Overview/References/web.md} | 10 +- docs/SDKs/Overview/Release Notes/_order.yaml | 3 + .../Overview/Release Notes/android.md} | 0 .../Overview/Release Notes/ios.md} | 0 .../Overview/Release Notes/web.md} | 0 docs/SDKs/Overview/_order.yaml | 7 + docs/SDKs/Overview/choose-integration.md | 133 ++ .../Overview}/country-coverage.md | 0 .../Overview}/languages-supported.md | 0 .../Overview/quickstart.md} | 104 -- .../Overview/understanding-flows.md} | 4 +- docs/SDKs/_order.yaml | 19 +- .../SDKs/android-sdk-integrations/_order.yaml | 7 - .../alternative-sdks-1/_order.yaml | 3 - .../headless-sdk-enrollment-android-1.md | 272 ---- .../headless-sdk-enrollment-android.md | 268 ---- .../headless-sdk-payment-android.md | 497 ------- .../alternative-sdks-1/index.md | 12 - .../card-scanning-ocr-android.md | 49 - .../clearsale-sdk-android.md | 136 -- .../full-checkout-android.md | 691 ---------- docs/SDKs/android-sdk-integrations/index.md | 57 - .../lite-sdk-android/_order.yaml | 2 - .../lite-sdk-android/enrollment-android.md | 521 ------- .../lite-sdk-android/index.md | 12 - .../lite-sdk-android/lite-checkout-android.md | 430 ------ .../requirements-android.md | 25 - .../seamless-sdk-payment-android.md | 317 ----- docs/SDKs/build-your-integration/_order.yaml | 7 - .../build-your-integration/enrollment-lite.md | 100 -- .../full-sdk-workflow.md | 207 --- .../headless-sdk-enrollment-steps.md | 89 -- .../headless-sdk-integration.md | 121 -- docs/SDKs/build-your-integration/index.md | 39 - .../build-your-integration/seamless-sdk.md | 86 -- .../build-your-integration/secure-fields.md | 52 - .../the-ultimate-checkout-lite.md | 225 ---- docs/SDKs/complementary-features-sdk.md | 519 ------- docs/SDKs/ios-sdk-integrations/_order.yaml | 5 - .../ios-sdk-integrations/clearsale-sdk-ios.md | 64 - .../ios-sdk-integrations/full-checkout-ios.md | 830 ------------ .../headless-sdks-ios/_order.yaml | 3 - .../headless-sdk-enrollment-ios-1.md | 172 --- .../headless-sdk-enrollment-ios.md | 178 --- .../headless-sdk-payment-ios.md | 365 ----- .../headless-sdks-ios/index.md | 12 - docs/SDKs/ios-sdk-integrations/index.md | 55 - .../lite-sdk-ios/_order.yaml | 2 - .../lite-sdk-ios/enrollment-ios.md | 371 ----- .../lite-sdk-ios/index.md | 12 - .../lite-sdk-ios/lite-checkout-ios.md | 808 ----------- docs/SDKs/ios-sdk-integrations/new-index.md | 132 -- .../new-ios-sdk-complementary-features.md | 506 ------- .../new-ios-sdk-enrollment-integration.md | 468 ------- .../new-ios-sdk-getting-started.md | 168 --- .../new-ios-sdk-payment-integration.md | 677 ---------- .../seamless-sdk-payment-ios.md | 367 ----- docs/SDKs/lite-sdk-implementation.md | 507 ------- docs/SDKs/react-native-sdk.md | 1192 ----------------- docs/SDKs/sdk-customizations-ios.md | 100 -- docs/SDKs/web-sdk-integrations/_order.yaml | 4 - .../full-checkout-sdk/_order.yaml | 3 - .../full-sdk-implementation.md | 631 --------- .../full-checkout-sdk/index.md | 139 -- .../headless-sdk-web/_order.yaml | 2 - .../headless-sdk-enrollment.md | 159 --- .../headless-sdk-web/headless-sdk-payment.md | 567 -------- .../headless-sdk-web/index.md | 8 - docs/SDKs/web-sdk-integrations/index.md | 79 -- .../lite-checkout-sdk/_order.yaml | 2 - .../lite-checkout-sdk/enrollment-lite-sdk.md | 456 ------- .../lite-checkout-sdk/index.md | 137 -- .../lite-checkout-sdk/lite-web-sdk-payment.md | 593 -------- .../seamless-sdk-payment-web.md | 281 ---- docs/Security and Compliance/3d-secure.md | 2 +- .../card-verification.md | 16 +- docs/Yuno SDKs/_order.yaml | 10 - docs/Yuno SDKs/android-sdks/_order.yaml | 6 - .../android-sdks/copy-of-payment-flows.md | 807 ----------- docs/Yuno SDKs/android-sdks/index.md | 7 - .../android-sdks/payment-flows-android.md | 817 ----------- docs/Yuno SDKs/choose-your-integration.md | 495 ------- docs/Yuno SDKs/ios-sdks/_order.yaml | 7 - .../ios-sdks/copy-of-enrollment-flows.md | 352 ----- docs/Yuno SDKs/ios-sdks/index.md | 7 - docs/Yuno SDKs/ios-sdks/payment-flows-ios.md | 789 ----------- docs/Yuno SDKs/lite-flutter.md | 533 -------- docs/Yuno SDKs/react-native-sdks/_order.yaml | 3 - .../advanced-features-react-native.md | 478 ------- .../code-examples-react-native.md | 491 ------- docs/Yuno SDKs/react-native-sdks/index.md | 348 ----- docs/Yuno SDKs/web-sdks/_order.yaml | 6 - docs/Yuno SDKs/web-sdks/index.md | 7 - docs/Yuno SDKs/web-sdks/payment-flows-web.md | 699 ---------- .../sdk-customizations-web/_order.yaml | 2 - .../web-sdks/sdk-customizations-web/index.md | 43 - .../sdk-customizations-default-design-web.md | 419 ------ ...dk-customizations-deprecated-design-web.md | 334 ----- .../payment-examples/bank-transfer-copy.md | 6 +- .../manage-payments/payment-examples/cards.md | 42 +- .../manage-payments/payment-examples/index.md | 8 +- .../payment-examples/wallet.md | 6 +- reference/banking-connectivity.json | 2 +- reference/creating-vouchers.json | 4 + reference/embedded-banking-v-2.json | 12 +- reference/otp.json | 2 +- reference/payment-api-authorize-payment.json | 330 +++++ ...yment-api-create-payment-back-to-back.json | 22 +- .../payment-api-refundcancel-payment.json | 8 +- reference/payment_links.json | 30 + reference/payments.json | 570 ++++++++ 140 files changed, 1800 insertions(+), 26263 deletions(-) delete mode 100644 docs/SDK Test (Do not delete)/_order.yaml delete mode 100644 docs/SDK Test (Do not delete)/android-sdk-v2/_order.yaml delete mode 100644 docs/SDK Test (Do not delete)/android-sdk-v2/advanced-features-android-sdk-v2.md delete mode 100644 docs/SDK Test (Do not delete)/android-sdk-v2/android-sdk-release-notes.md delete mode 100644 docs/SDK Test (Do not delete)/android-sdk-v2/code-examples-android-sdk-v2.md delete mode 100644 docs/SDK Test (Do not delete)/android-sdk-v2/index.md delete mode 100644 docs/SDK Test (Do not delete)/ios-sdk-fix/_order.yaml delete mode 100644 docs/SDK Test (Do not delete)/ios-sdk-fix/index.md delete mode 100644 docs/SDK Test (Do not delete)/ios-sdk-fix/ios-advanced-features-fix.md delete mode 100644 docs/SDK Test (Do not delete)/ios-sdk-fix/ios-examples-fix.md delete mode 100644 docs/SDK Test (Do not delete)/react-native-sdk-v2.md create mode 100644 docs/SDKs/Card Enrollment/_order.yaml rename docs/{Yuno SDKs/android-sdks/enrollment-flows-android.md => SDKs/Card Enrollment/android-enrollment.md} (59%) rename docs/{Yuno SDKs/ios-sdks/enrollment-flows-ios.md => SDKs/Card Enrollment/ios-enrollment.md} (69%) rename docs/{Yuno SDKs/web-sdks/enrollment-flows-web.md => SDKs/Card Enrollment/web-enrollment.md} (69%) create mode 100644 docs/SDKs/Customization/_order.yaml rename docs/{Yuno SDKs/android-sdks/android-customizations.md => SDKs/Customization/android.md} (100%) rename docs/{Yuno SDKs/ios-sdks/ios-customizations.md => SDKs/Customization/ios.md} (100%) rename docs/{Yuno SDKs/web-sdks => SDKs/Customization}/secure-fields/_order.yaml (100%) rename docs/{Yuno SDKs/web-sdks => SDKs/Customization}/secure-fields/enrollment-secure-fields.md (100%) rename docs/{Yuno SDKs/web-sdks => SDKs/Customization}/secure-fields/index.md (100%) rename docs/{Yuno SDKs/web-sdks => SDKs/Customization}/secure-fields/payment-secure-fields.md (100%) create mode 100644 docs/SDKs/Full Checkout/_order.yaml create mode 100644 docs/SDKs/Full Checkout/android-payments.md rename docs/{Yuno SDKs/ios-sdks/copy-of-payment-flows-1.md => SDKs/Full Checkout/ios-payments.md} (55%) create mode 100644 docs/SDKs/Full Checkout/web-payments.md create mode 100644 docs/SDKs/Overview/References/_order.yaml rename docs/{Yuno SDKs/android-sdks/android-sdk-common-reference.md => SDKs/Overview/References/android.md} (90%) rename docs/{Yuno SDKs/ios-sdks/ios-sdk-common-reference.md => SDKs/Overview/References/ios.md} (94%) rename docs/{Yuno SDKs/web-sdks/web-sdk-common-reference.md => SDKs/Overview/References/web.md} (94%) create mode 100644 docs/SDKs/Overview/Release Notes/_order.yaml rename docs/{Yuno SDKs/android-sdks/release-notes-android.md => SDKs/Overview/Release Notes/android.md} (100%) rename docs/{Yuno SDKs/ios-sdks/release-notes-ios.md => SDKs/Overview/Release Notes/ios.md} (100%) rename docs/{Yuno SDKs/web-sdks/release-notes-web.md => SDKs/Overview/Release Notes/web.md} (100%) create mode 100644 docs/SDKs/Overview/_order.yaml create mode 100644 docs/SDKs/Overview/choose-integration.md rename docs/{Yuno SDKs => SDKs/Overview}/country-coverage.md (100%) rename docs/{Yuno SDKs => SDKs/Overview}/languages-supported.md (100%) rename docs/{Yuno SDKs/quickstart-guide.md => SDKs/Overview/quickstart.md} (79%) rename docs/{Yuno SDKs/understanding-payment-and-enrollment-flows.md => SDKs/Overview/understanding-flows.md} (95%) delete mode 100644 docs/SDKs/android-sdk-integrations/_order.yaml delete mode 100644 docs/SDKs/android-sdk-integrations/alternative-sdks-1/_order.yaml delete mode 100644 docs/SDKs/android-sdk-integrations/alternative-sdks-1/headless-sdk-enrollment-android-1.md delete mode 100644 docs/SDKs/android-sdk-integrations/alternative-sdks-1/headless-sdk-enrollment-android.md delete mode 100644 docs/SDKs/android-sdk-integrations/alternative-sdks-1/headless-sdk-payment-android.md delete mode 100644 docs/SDKs/android-sdk-integrations/alternative-sdks-1/index.md delete mode 100644 docs/SDKs/android-sdk-integrations/card-scanning-ocr-android.md delete mode 100644 docs/SDKs/android-sdk-integrations/clearsale-sdk-android.md delete mode 100644 docs/SDKs/android-sdk-integrations/full-checkout-android.md delete mode 100644 docs/SDKs/android-sdk-integrations/index.md delete mode 100644 docs/SDKs/android-sdk-integrations/lite-sdk-android/_order.yaml delete mode 100644 docs/SDKs/android-sdk-integrations/lite-sdk-android/enrollment-android.md delete mode 100644 docs/SDKs/android-sdk-integrations/lite-sdk-android/index.md delete mode 100644 docs/SDKs/android-sdk-integrations/lite-sdk-android/lite-checkout-android.md delete mode 100644 docs/SDKs/android-sdk-integrations/requirements-android.md delete mode 100644 docs/SDKs/android-sdk-integrations/seamless-sdk-payment-android.md delete mode 100644 docs/SDKs/build-your-integration/_order.yaml delete mode 100644 docs/SDKs/build-your-integration/enrollment-lite.md delete mode 100644 docs/SDKs/build-your-integration/full-sdk-workflow.md delete mode 100644 docs/SDKs/build-your-integration/headless-sdk-enrollment-steps.md delete mode 100644 docs/SDKs/build-your-integration/headless-sdk-integration.md delete mode 100644 docs/SDKs/build-your-integration/index.md delete mode 100644 docs/SDKs/build-your-integration/seamless-sdk.md delete mode 100644 docs/SDKs/build-your-integration/secure-fields.md delete mode 100644 docs/SDKs/build-your-integration/the-ultimate-checkout-lite.md delete mode 100644 docs/SDKs/complementary-features-sdk.md delete mode 100644 docs/SDKs/ios-sdk-integrations/_order.yaml delete mode 100644 docs/SDKs/ios-sdk-integrations/clearsale-sdk-ios.md delete mode 100644 docs/SDKs/ios-sdk-integrations/full-checkout-ios.md delete mode 100644 docs/SDKs/ios-sdk-integrations/headless-sdks-ios/_order.yaml delete mode 100644 docs/SDKs/ios-sdk-integrations/headless-sdks-ios/headless-sdk-enrollment-ios-1.md delete mode 100644 docs/SDKs/ios-sdk-integrations/headless-sdks-ios/headless-sdk-enrollment-ios.md delete mode 100644 docs/SDKs/ios-sdk-integrations/headless-sdks-ios/headless-sdk-payment-ios.md delete mode 100644 docs/SDKs/ios-sdk-integrations/headless-sdks-ios/index.md delete mode 100644 docs/SDKs/ios-sdk-integrations/index.md delete mode 100644 docs/SDKs/ios-sdk-integrations/lite-sdk-ios/_order.yaml delete mode 100644 docs/SDKs/ios-sdk-integrations/lite-sdk-ios/enrollment-ios.md delete mode 100644 docs/SDKs/ios-sdk-integrations/lite-sdk-ios/index.md delete mode 100644 docs/SDKs/ios-sdk-integrations/lite-sdk-ios/lite-checkout-ios.md delete mode 100644 docs/SDKs/ios-sdk-integrations/new-index.md delete mode 100644 docs/SDKs/ios-sdk-integrations/new-ios-sdk-complementary-features.md delete mode 100644 docs/SDKs/ios-sdk-integrations/new-ios-sdk-enrollment-integration.md delete mode 100644 docs/SDKs/ios-sdk-integrations/new-ios-sdk-getting-started.md delete mode 100644 docs/SDKs/ios-sdk-integrations/new-ios-sdk-payment-integration.md delete mode 100644 docs/SDKs/ios-sdk-integrations/seamless-sdk-payment-ios.md delete mode 100644 docs/SDKs/lite-sdk-implementation.md delete mode 100644 docs/SDKs/react-native-sdk.md delete mode 100644 docs/SDKs/sdk-customizations-ios.md delete mode 100644 docs/SDKs/web-sdk-integrations/_order.yaml delete mode 100644 docs/SDKs/web-sdk-integrations/full-checkout-sdk/_order.yaml delete mode 100644 docs/SDKs/web-sdk-integrations/full-checkout-sdk/full-sdk-implementation.md delete mode 100644 docs/SDKs/web-sdk-integrations/full-checkout-sdk/index.md delete mode 100644 docs/SDKs/web-sdk-integrations/headless-sdk-web/_order.yaml delete mode 100644 docs/SDKs/web-sdk-integrations/headless-sdk-web/headless-sdk-enrollment.md delete mode 100644 docs/SDKs/web-sdk-integrations/headless-sdk-web/headless-sdk-payment.md delete mode 100644 docs/SDKs/web-sdk-integrations/headless-sdk-web/index.md delete mode 100644 docs/SDKs/web-sdk-integrations/index.md delete mode 100644 docs/SDKs/web-sdk-integrations/lite-checkout-sdk/_order.yaml delete mode 100644 docs/SDKs/web-sdk-integrations/lite-checkout-sdk/enrollment-lite-sdk.md delete mode 100644 docs/SDKs/web-sdk-integrations/lite-checkout-sdk/index.md delete mode 100644 docs/SDKs/web-sdk-integrations/lite-checkout-sdk/lite-web-sdk-payment.md delete mode 100644 docs/SDKs/web-sdk-integrations/seamless-sdk-payment-web.md delete mode 100644 docs/Yuno SDKs/_order.yaml delete mode 100644 docs/Yuno SDKs/android-sdks/_order.yaml delete mode 100644 docs/Yuno SDKs/android-sdks/copy-of-payment-flows.md delete mode 100644 docs/Yuno SDKs/android-sdks/index.md delete mode 100644 docs/Yuno SDKs/android-sdks/payment-flows-android.md delete mode 100644 docs/Yuno SDKs/choose-your-integration.md delete mode 100644 docs/Yuno SDKs/ios-sdks/_order.yaml delete mode 100644 docs/Yuno SDKs/ios-sdks/copy-of-enrollment-flows.md delete mode 100644 docs/Yuno SDKs/ios-sdks/index.md delete mode 100644 docs/Yuno SDKs/ios-sdks/payment-flows-ios.md delete mode 100644 docs/Yuno SDKs/lite-flutter.md delete mode 100644 docs/Yuno SDKs/react-native-sdks/_order.yaml delete mode 100644 docs/Yuno SDKs/react-native-sdks/advanced-features-react-native.md delete mode 100644 docs/Yuno SDKs/react-native-sdks/code-examples-react-native.md delete mode 100644 docs/Yuno SDKs/react-native-sdks/index.md delete mode 100644 docs/Yuno SDKs/web-sdks/_order.yaml delete mode 100644 docs/Yuno SDKs/web-sdks/index.md delete mode 100644 docs/Yuno SDKs/web-sdks/payment-flows-web.md delete mode 100644 docs/Yuno SDKs/web-sdks/sdk-customizations-web/_order.yaml delete mode 100644 docs/Yuno SDKs/web-sdks/sdk-customizations-web/index.md delete mode 100644 docs/Yuno SDKs/web-sdks/sdk-customizations-web/sdk-customizations-default-design-web.md delete mode 100644 docs/Yuno SDKs/web-sdks/sdk-customizations-web/sdk-customizations-deprecated-design-web.md diff --git a/docs/SDK Test (Do not delete)/_order.yaml b/docs/SDK Test (Do not delete)/_order.yaml deleted file mode 100644 index 3bf484307..000000000 --- a/docs/SDK Test (Do not delete)/_order.yaml +++ /dev/null @@ -1,3 +0,0 @@ -- ios-sdk-fix -- android-sdk-v2 -- react-native-sdk-v2 diff --git a/docs/SDK Test (Do not delete)/android-sdk-v2/_order.yaml b/docs/SDK Test (Do not delete)/android-sdk-v2/_order.yaml deleted file mode 100644 index 853889993..000000000 --- a/docs/SDK Test (Do not delete)/android-sdk-v2/_order.yaml +++ /dev/null @@ -1,3 +0,0 @@ -- advanced-features-android-sdk-v2 -- code-examples-android-sdk-v2 -- android-sdk-release-notes diff --git a/docs/SDK Test (Do not delete)/android-sdk-v2/advanced-features-android-sdk-v2.md b/docs/SDK Test (Do not delete)/android-sdk-v2/advanced-features-android-sdk-v2.md deleted file mode 100644 index 47170973c..000000000 --- a/docs/SDK Test (Do not delete)/android-sdk-v2/advanced-features-android-sdk-v2.md +++ /dev/null @@ -1,592 +0,0 @@ ---- -title: Advanced Features Android SDK - v2 -deprecated: false -hidden: true -metadata: - robots: index ---- -Advanced configuration and custom integrations for Android. - -## Lite SDK Flow - -For custom payment method selection, use `startPaymentLite()` instead of `startPayment()`: - -```kotlin -import com.yuno.sdk.payments.startCheckout -import com.yuno.sdk.payments.startPaymentLite -import com.yuno.sdk.payments.updateCheckoutSession -import com.yuno.presentation.core.components.PaymentSelected - -class CheckoutLiteActivity : AppCompatActivity() { - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_checkout_lite) - - // Initialize checkout with session and country - startCheckout( - checkoutSession = "your_checkout_session_id", - countryCode = "CO", - callbackPaymentState = ::onPaymentStateChange - ) - } - - private fun startPaymentWithSelectedMethod( - paymentMethodType: String, - vaultedToken: String? = null - ) { - startPaymentLite( - paymentSelected = PaymentSelected( - paymentMethodType = paymentMethodType, - vaultedToken = vaultedToken - ), - callBackTokenWithInformation = { ottModel -> - // Optional: Receive additional token information - Log.i("OTT Info", ottModel.toString()) - }, - callbackOTT = ::onTokenReceived, - showPaymentStatus = true - ) - } - - private fun onTokenReceived(token: String?) { - token?.let { - // Send token to your backend to create payment - createPaymentOnBackend(it) - } - } - - private fun onPaymentStateChange(state: String?) { - when (state) { - "SUCCEEDED" -> navigateToSuccess() - "FAIL" -> showError("Payment failed") - "PROCESSING" -> showPendingMessage() - "REJECT" -> showError("Payment rejected") - "INTERNAL_ERROR" -> showError("An error occurred") - "CANCELED" -> showCanceledMessage() - } - } -} -``` - -### PaymentSelected Data Class - -```kotlin -PaymentSelected( - paymentMethodType: String, // Payment type: "CARD", "PIX", etc. - vaultedToken: String? // Optional: Saved card token for vaulted payments -) -``` - -## Keep Loader Flow - -To keep Yuno's loading screen until payment is created, use `keepLoader = true` in YunoConfig and `startCompletePaymentFlow()`: - -```kotlin -// Step 1: Initialize with keepLoader = true -class CustomApplication : Application() { - override fun onCreate() { - super.onCreate() - Yuno.initialize( - this, - "your-api-key", - YunoConfig(keepLoader = true) - ) - } -} - -// Step 2: Use startCompletePaymentFlow instead of startPayment -class PaymentActivity : AppCompatActivity() { - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - - startCheckout( - callbackPaymentState = ::onPaymentStateChange - ) - - updateCheckoutSession( - checkoutSession = "your_checkout_session_id", - countryCode = "CO" - ) - } - - private fun processPayment() { - startCompletePaymentFlow( - paymentSelected = null, // null for Full SDK, PaymentSelected for Lite - showPaymentStatus = true, - createPaymentFun = { ott -> - // This suspend function keeps the loader until you complete - createPaymentOnBackend(ott) - }, - callbackPaymentState = ::onPaymentStateChange, - callbackOTT = ::onTokenReceived - ) - } - - private suspend fun createPaymentOnBackend(ott: String) { - // Call your backend API to create payment - // Loader stays visible until this function completes - apiClient.createPayment(ott) - } -} -``` - -## Enrollment (Save Cards) - -### Initialize Enrollment - -You must call `initEnrollment()` in the `onCreate()` method of your activity to register the callback: - -```kotlin -import com.yuno.sdk.enrollment.initEnrollment -import com.yuno.sdk.enrollment.startEnrollment - -class EnrollmentActivity : AppCompatActivity() { - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_enrollment) - - // Must be called in onCreate to register callback - initEnrollment(::onEnrollmentStateChange) - } - - private fun startEnrollmentFlow() { - startEnrollment( - customerSession = "your_customer_session_id", - countryCode = "CO", - showEnrollmentStatus = true - ) - } - - private fun onEnrollmentStateChange(enrollmentState: String?) { - enrollmentState?.let { - Log.d("Enrollment", "State: $it") - // Handle enrollment result - } - } -} -``` - -### Check Enrollment Status - -To check a previous enrollment status without starting a new enrollment: - -```kotlin -import com.yuno.sdk.enrollment.initEnrollment -import com.yuno.sdk.enrollment.enrollmentStatus - -class EnrollmentStatusActivity : AppCompatActivity() { - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - - // Must be called in onCreate - initEnrollment(::onEnrollmentStateChange) - } - - private fun checkStatus() { - // This does NOT start enrollment, only checks status - enrollmentStatus( - customerSession = "your_customer_session_id", - countryCode = "CO", - showEnrollmentStatus = false, - callbackEnrollmentState = ::onEnrollmentStateChange - ) - } - - private fun onEnrollmentStateChange(state: String?) { - // Handle enrollment status - } -} -``` - -> **Important:** `enrollmentStatus()` is read-only and does NOT start a new enrollment process. Use `startEnrollment()` to begin a new enrollment. - -## Vaulted Token Payments - -Pay with a saved card using the vaulted token: - -```kotlin -private fun payWithSavedCard(vaultedToken: String) { - startPaymentLite( - paymentSelected = PaymentSelected( - paymentMethodType = "CARD", - vaultedToken = vaultedToken - ), - callbackOTT = ::onTokenReceived, - showPaymentStatus = true - ) -} -``` - -## Payment Methods Views - -### Full SDK - PaymentMethodListView - -Display all available payment methods: - -```xml - -``` - -### Compose Integration - -```kotlin -import com.yuno.presentation.core.components.PaymentMethodListViewComponent - -composeView.setContent { - PaymentMethodListViewComponent( - activity = this@PaymentActivity, - onPaymentSelected = { isSelected -> - payButton.isEnabled = isSelected - } - ) -} -``` - -### Enrollment Methods Views - -Show only enrollment-available payment methods: - -```xml - -``` - -Show only enrolled payment methods: - -```xml - -``` - -Show only unenrolled payment methods: - -```xml - -``` - -## Custom Card Form (Secure Fields) - -Build custom card forms while maintaining PCI compliance using Yuno Secure Fields. - -### Step 1: Create Custom Layout - -Create `screen_payment_card_form.xml` to override the default card form: - -```xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + +``` + +**Test with**: Card `4111 1111 1111 1111`, any future date, any CVV + +For a comprehensive overview of all Web SDK parameters, see [Web SDK Common Reference](web-sdk-common-reference). + +[Complete Web guide →](payment-flows-web) + +## iOS + +### 1. Install + +**CocoaPods**: +```ruby +pod 'YunoSDK', '~> 2.11.1' +``` + +**Swift Package Manager**: +```swift +dependencies: [ + .package(url: "https://github.com/yuno-payments/yuno-sdk-ios", from: "2.11.1") +] +``` + +### 2. Initialize and implement delegate + +```swift +import YunoSDK + +// Initialize in AppDelegate or App struct +Yuno.initialize( + apiKey: "your-public-api-key", + config: YunoConfig() +) + +// In your view controller - implement YunoPaymentDelegate +class PaymentViewController: UIViewController, YunoPaymentDelegate { + + // Required delegate properties + var checkoutSession: String { "session-from-backend" } + var countryCode: String { "US" } + var language: String? { "en" } + var viewController: UIViewController? { self } + + override func viewDidLoad() { + super.viewDidLoad() + displayPaymentMethods() + } + + func displayPaymentMethods() async { + // Get payment methods view + let paymentView = await Yuno.getPaymentMethodViewAsync(delegate: self) + view.addSubview(paymentView) + // Add constraints... + } + + // Required: Create payment with one-time token + func yunoCreatePayment(with token: String) { + // Call your backend: POST /v1/payments + createPaymentOnBackend(token: token) { result in + // After payment creation, continue for async methods + Yuno.continuePayment() + } + } + + // Required: Handle payment result + func yunoPaymentResult(_ result: Yuno.Result) { + switch result { + case .succeeded: + print("Payment succeeded!") + case .fail: + print("Payment failed") + case .processing: + print("Payment processing") + default: + break + } + } +} + +// Start payment when user taps pay button +@IBAction func payButtonTapped(_ sender: UIButton) { + Yuno.startPayment(showPaymentStatus: true) +} +``` + +**Test with**: Card `4111 1111 1111 1111`, any future date, any CVV + +For a comprehensive overview of all iOS SDK parameters, see [iOS SDK Common Reference](ios-sdk-common-reference). + +[Complete iOS guide →](payment-flows-ios) + +## Android + +### 1. Install + +**build.gradle**: +```kotlin +repositories { + maven { url "https://yunopayments.jfrog.io/artifactory/snapshots-libs-release" } +} + +dependencies { + implementation 'com.yuno.payments:android-sdk:2.9.0' +} +``` + +### 2. Initialize and process payment + +**Initialize in Application**: +```kotlin +class MyApplication : Application() { + override fun onCreate() { + super.onCreate() + Yuno.initialize( + this, + publicApiKey = "your-public-api-key", + config = YunoConfig() + ) + } +} +``` + +**In Activity/Fragment**: +```kotlin +import com.yuno.payments.Yuno + +class PaymentActivity : ComponentActivity() { + private var checkoutSession: String? = null + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + // Create checkout session on your backend first + // Your backend calls: POST https://api-sandbox.y.uno/v1/checkout/sessions + lifecycleScope.launch { + val session = createCheckoutSession() // Your backend call + checkoutSession = session.id + + // Start checkout with session + startCheckout( + checkoutSession = session.id, + countryCode = "US", + callbackPaymentState = { state, subState -> + when (state) { + "SUCCEEDED" -> println("Payment succeeded!") + "FAILED" -> println("Payment failed") + "PROCESSING" -> println("Payment processing") + "REJECT" -> println("Payment rejected") + else -> println("Payment state: $state") + } + } + ) + } + + setContent { + var paymentMethodSelected by remember { mutableStateOf(false) } + + Column( + modifier = Modifier + .fillMaxSize() + .verticalScroll(rememberScrollState()) + ) { + // Display payment methods + PaymentMethodListViewComponent( + activity = this@PaymentActivity, + onPaymentSelected = { isSelected -> + paymentMethodSelected = isSelected + } + ) + + // Pay button + Button( + onClick = { + startPayment( + showStatusYuno = true, + callbackOTT = { token -> + token?.let { ott -> + // Call your backend: POST /v1/payments + // with { payment_method: { token: ott }, checkout_session: ... } + createPayment(ott, checkoutSession!!) + + // Required for async payment methods + continuePayment() + } + } + ) + }, + enabled = paymentMethodSelected + ) { + Text("Pay Now") + } + } + } + } +} +``` + +**Test with**: Card `4111 1111 1111 1111`, any future date, any CVV + +For a comprehensive overview of all Android SDK parameters, see [Android SDK Common Reference](android-sdk-common-reference). + +[Complete Android guide →](payment-flows-android) + +## React Native + +### 1. Install + +```bash +npm install @yuno-payments/yuno-sdk-react-native +``` + +**iOS**: +```bash +cd ios && pod install +``` + +### 2. Initialize and process payment + +```typescript +import React, { useState, useEffect } from 'react'; +import { View, Button, ScrollView, StyleSheet } from 'react-native'; +import { YunoSdk, YunoPaymentMethods } from '@yuno-payments/yuno-sdk-react-native'; + +// Initialize SDK (e.g., in App.tsx) +YunoSdk.initialize({ + apiKey: 'your-public-api-key', + countryCode: 'US', +}); + +// Payment screen +export default function PaymentScreen() { + const [checkoutSession, setCheckoutSession] = useState(null); + const [paymentMethodSelected, setPaymentMethodSelected] = useState(false); + + useEffect(() => { + // Create checkout session on your backend + // Your backend calls: POST https://api-sandbox.y.uno/v1/checkout/sessions + async function initCheckout() { + const session = await fetch('https://your-backend.com/api/create-session', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + customer_id: 'customer-123', + amount: { currency: 'USD', value: 2500 }, + country: 'US' + }) + }).then(r => r.json()); + + setCheckoutSession(session.checkout_session); + } + + initCheckout(); + + // Subscribe to payment status + const subscription = YunoSdk.onPaymentStatus((state) => { + switch (state.status) { + case 'SUCCEEDED': + console.log('Payment succeeded!'); + break; + case 'FAILED': + console.log('Payment failed'); + break; + case 'PROCESSING': + console.log('Payment processing'); + break; + } + }); + + return () => subscription.remove(); + }, []); + + const handlePayment = async () => { + // Start payment flow + await YunoSdk.startPayment(true); // true = show payment status + }; + + return ( + + {/* Display payment methods */} + {checkoutSession && ( + { + setPaymentMethodSelected(event.isSelected); + }} + /> + )} + + {/* Pay button */} +