Full SDK (Flutter)

This page provides a step-by-step guide to integrating the Full Flutter SDK functionalities into your application.

Ensure all required Flutter SDK dependencies are included in your project before following the setup example.

Step 1: Add the SDK Dependency

To add the Yuno SDK to your Flutter project, run the following command:

dart pub add yuno

Step 2: Initialize the SDK with the Public Key

Create an instance of Yuno.init by providing a valid PUBLIC_API_KEY. Refer to the Yuno documentation for details on obtaining API credentials.

await Yuno.init(
  apiKey: 'your_api_key_here',
  countryCode: 'your_country_code',  // Full list of country codes is available at https://docs.y.uno/docs/country-coverage-yuno-sdk
  yunoConfig: YunoConfig(
    lang: YunoLanguage.en, // Supported languages: ENGLISH, SPANISH, PORTUGUESE, MALAY, INDONESIAN, THAI
    cardflow: CardFlow.multiStep, // Default card flow
    saveCardEnable: true, // Default save card option
    keepLoader: true, // Default keep loader option
  ),
  iosConfig: IosConfig(), // Optional, can use default value
);

Below is a table describing the parameters required for initializing the Yuno SDK in your Flutter application. These settings allow you to customize the SDK behavior to align with your application needs:

ParameterDescription
apiKeyYour unique public API key for authentication.
countryCodeThe user’s country code. Refer to the Country Coverage page for a complete list of supported country codes.
yunoConfigConfigures various SDK settings. Contains additional parameters listed below.
langThe language for SDK content. Supported options include:
en - English
es - Spanish
pt - Portuguese
ms - Malay
id - Indonesian
th - Thai
cardflowDefines the card flow type for the payment process. The default is CardFlow.multiStep.
saveCardEnableSpecifies whether to enable the "Save Card" option. Defaults to true.
keepLoaderControls whether to keep the loader visible. Defaults to true.
iosConfigOptional iOS-specific configurations. If omitted, the default configuration is used.

Step 3: Add the SDK Widget View

After initializing the SDK, implement the YunoPaymentMethods widget in your view to display available payment methods. Use the code below to add it to your layout.

YunoPaymentMethods(
  config: PaymentMethodConf(
    checkoutSession: 'your_checkout_session_id',
    countryCode: 'your_country_code',
    // Add additional configuration options as needed
  ),
  listener: (context, isSelected) {
    if (isSelected) {
      print('A payment method has been selected');
    } else {
      print('No payment method is currently selected');
    }
  },
)

The functions used in YunoPaymentMethods are described in the table below.

FunctionDescription
configAn instance of PaymentMethodConf that configures the payment method list based on session and locale. Key properties include:
- checkoutSession: Unique identifier for the current checkout session.
- countryCode: User’s country code for displaying relevant payment methods.
listenerTriggered when the payment method selection state changes. Parameters:
- context: Allows interactions with other UI elements or navigation.
- isSelected: Boolean indicating whether a payment method is selected (true) or not (false).

By using the listener callback, the merchant is notified as soon as a customer selects a payment method. This allows the merchant to initiate the payment process immediately upon selection, improving the user experience.

Step 4: Initiate the Payment Process

Once a payment method is selected, initiate the payment by calling the Yuno.startPayment method.

The isSelected variable indicates when the merchant has selected a payment option. This variable name, isSelected, is customizable by the merchant.

With isSelected set to true, proceed with the Yuno.startPayment method to initiate the payment process.

Yuno.startPayment(bool showPaymentStatus)

Step 5: Retrieve the One Time Token (OTT)

The YunoPaymentListener widget listens for updates in the payment process, specifically to retrieve a One-Time Token (OTT) once the customer has completed entering the required information. The OTT is used to initiate the payment.

YunoPaymentListener(
  listener: (state) {
    // Handle [state] - it is YunoState with [String token] and [PaymentStatus status]
    // - [token]: One Time Token
    // - [paymentStatus]: [reject, success, fail, processing, internalError, cancelByUser]
  },
  child: SomeWidget(),
)

Once you have the OTT, the next step is to create the payment. This process must be handled on the backend by calling Yuno's Create Payment endpoint. The merchant should call their backend to initiate the payment within Yuno, passing both the OTT and the checkout session to complete the payment process.

Ensure that your backend is set up to handle this call to Yuno’s Create Payment endpoint for successful payment processing.

Step 6: Create the Payment

Once you have the OTT (One-Time Token), initiate the payment within Yuno by using the Create Payment endpoint, leveraging both the OTT and the checkout session.

After the payment is created, some asynchronous payment methods may require additional customer action. In such cases, the Create Payment endpoint will indicate this requirement through the sdk_action_required field in the response, which will be set to true. When this occurs, you should call the Yuno.continuePayment() function in your mobile app to display the necessary screens for the customer, where they can complete the required steps for the payment.

If sdk_action_required is false, there is no need to call continuePayment, and you can proceed without it.

Yuno.continuePayment(bool showPaymentStatus)

Callback

After the payment is completed, the SDK can return different transaction states. The table below describes each transaction state.

Transaction StateDescription
successIndicates that the transaction or payment process has been completed successfully.
failIndicates that the transaction or payment process has failed. This means there was an error or issue during the payment process, preventing it from being completed successfully.
processingIndicates that the transaction or payment process is currently being processed. This state is typically used when there is a delay in processing the payment, such as waiting for approval from a third-party service or financial institution.
rejectIndicates that the transaction has been rejected. This rejection can occur for various reasons, such as insufficient funds, fraudulent activity, or a request that violates specific rules or policies.
internalErrorSuggests that an unexpected error occurred within the system or infrastructure handling the payment process. This indicates a problem on the server or backend side rather than an issue with the user's input or request.
userCancellIndicates that the user has voluntarily canceled or aborted the transaction or payment process. This state is typically used when there is an option for the user to cancel or abandon the payment process.

Additional Features

  • Continue Payment: Use continuePayment to handle asynchronous payment steps if required.
  • Customizations: Configure SDK appearance, update payment status, or integrate 3DS into your flow.

For a full implementation example, refer to the Demo App on GitHub.