PayTabs SDK makes the integration with the PayTabs payment gateway very easy by providing a ready-made payment screen that handles the card entry and billing & shipping information and completes the missing details.


This article is dedicated to walking you through how to initiate the payment/request payload using the configuration options and parameters that have already been clarified in the previous step, "Step 2 - Configure the integration method".


After making sure of configuring this SDK as you wish, you will need to import the SDK package classes in your code first to start, as shown below: 


import 'package:flutter_paytabs_bridge/BaseBillingShippingInfo.dart';
import 'package:flutter_paytabs_bridge/PaymentSdkConfigurationDetails.dart';
import 'package:flutter_paytabs_bridge/PaymentSdkLocale.dart';
import 'package:flutter_paytabs_bridge/PaymentSdkTokenFormat.dart';
import 'package:flutter_paytabs_bridge/PaymentSdkTokeniseType.dart';
import 'package:flutter_paytabs_bridge/flutter_paytabs_bridge.dart';
import 'package:flutter_paytabs_bridge/IOSThemeConfiguration.dart';
import 'package:flutter_paytabs_bridge/PaymentSdkTransactionClass.dart';
import 'package:flutter_paytabs_bridge/BaseBillingShippingInfo.dart';
import 'package:flutter_paytabs_bridge/PaymentSdkConfigurationDetails.dart';
import 'package:flutter_paytabs_bridge/PaymentSdkLocale.dart';
import 'package:flutter_paytabs_bridge/PaymentSdkTokenFormat.dart';
import 'package:flutter_paytabs_bridge/PaymentSdkTokeniseType.dart';
import 'package:flutter_paytabs_bridge/flutter_paytabs_bridge.dart';
import 'package:flutter_paytabs_bridge/IOSThemeConfiguration.dart';
import 'package:flutter_paytabs_bridge/PaymentSdkTransactionClass.dart';
Generic


Implementing this option will enable you to apply a discount for a specific bank card/s by giving card prefixes from 4 to 10 digits. To be able to do this, please follow the below instructions:


  1. Make sure you import PaymentSdkConfigurationDetails class.

  2. Configure the billing & shipping information for this payment, noting that the shipping information is optional. To know more about this, please check our 3.1 Flutter SDK | Manage Shipping and Billing details and 2.1 Flutter SDK | Configuration Options & Parameters solution articles. 
        
    var billingDetails = new BillingDetails(
           "First Last",  //billing name
           "[email protected]",  //billing domain
           "billing phone",
            "address line", 
            "SA",  //2 digit iso Country code
            "city", 
            "state", 
            "zip code"
    );
            
    var shippingDetails = new ShippingDetails(
           "First Last",  //Shipping name
           "[email protected]",  //Shipping domain
           "Shipping phone",
            "address line", 
            "SA",  //2 digit iso Country code
            "city", 
            "state", 
            "zip code"
    );
    Generic


  3. Now configure the discount, note that you can apply one or more discounts using an array of  PaymentSdkCardDiscount:

    PaymentSdkCardDiscount('discountCards','discountValue','discountTitle', 'isPercentage')
    discountCards
    Array of Strings, each string must have between 4 and 10 digits, and can't be empty.
    ["41111","400000"]
    discountValue
     Discount value in double
    discountTitle
    String title that will be displayed to the customer.
    isPercentage
    Boolean: true discountValue is a percentage, false is amount

       

     var cardDiscounts = [
          PaymentSDKCardDiscount(
              discountCards: ["4111"],
              discountValue: 50,
              discountTitle: "50% discount on cards starting with 4111",
              isPercentage: true),
          PaymentSDKCardDiscount(
              discountCards: ["4000", "41111"],
              discountValue: 2,
              discountTitle: "2 EGP discount on cards starting with 4000 and 41111",
              isPercentage: false)
        ];
      
  4. Then create an object from PaymentSdkConfigurationDetails and fill it out with your credentials and payment details. Of course, don't forget to set the discount via "cardDiscounts" method using the array created in the previous step. To know more about what is the exact values that should be passed here, please check our 2.1 Flutter SDK | Configuration Options & Parameters and 2.2 Flutter SDK | The PaymentSdkConfigurationDetails Object solution articles.     
     var configuration = PaymentSdkConfigurationDetails(
            profileId: "profile id",
            serverKey: "your server key",
            clientKey: "your client key",
            cartId: "cart id",
            cartDescription: "cart desc",
            merchantName: "merchant name",
            screentTitle: "Pay with Card",
            billingDetails: billingDetails,
            shippingDetails: shippingDetails,
            locale: PaymentSdkLocale.EN, //PaymentSdkLocale.AR or PaymentSdkLocale.DEFAULT 
            amount: "amount in double",
            currencyCode: "Currency code",
            merchantCountryCode: "2 chars iso country code",
            cardDiscounts: cardDiscounts 
    );
    Generic

      

  5. Only then you will be ready to start/initiate the payment by passing your PaymentSdkConfigurationDetails object to the startCardPayment function in which the callback event will handle/alter the payment response. To know more about this please check our 2.2 Flutter SDK | The PaymentSdkConfigurationDetails Object and Step 5 - Flutter SDK | Handle the payment response solution articles   

    FlutterPaytabsBridge.startCardPayment(configuration, (event) {
          setState(() {
            if (event["status"] == "success") {
              // Handle transaction details here.
              var transactionDetails = event["data"];
              print(transactionDetails);
              
              if (transactionDetails["isSuccess"]) {
                print("successful transaction");
              } else {
                print("failed transaction");
              }
            } else if (event["status"] == "error") {
              // Handle error here.
            } else if (event["status"] == "event") {
              // Handle events here.
            }
          });
        });
    Generic


    If the customer uses a bank card that does not match any of the discount filters, the discount will not applied and the customer will pay the full amount. 








⌂ To get familiar with the whole process and the other steps, kindly navigate to our "The Flutter (Bridge) SDK Integration Manual" solution article. 

 And to navigate to the previous step in the integration process "Step 2 - Configure the integration method" click here

 And to get familiar with the rest of the steps regarding the current step "Step 3 - Initiating the payment" click here.

⇨ Or you can navigate to the next step in the integration process "Step 4 - Accepting the payment" kindly click here.