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 perform tokenized with 3DS feature-enabled transactions using this SDK. 


To enable tokenization payments to avoid making your customers provide the card details in each payment, please follow the below instructions:

  1. Request a token in creating any payment request by passing the "tokeniseType" along with the "tokenFormat" with the preferred type and format that suits your business needs within your PaymentSDKConfiguration, as shown below. 

    configuration.tokeniseType = .userOptinoal
    configuration.tokenFormat = .hex32


    To know more about these parameters and what are the available values you can pass, please check the "2.3 Native IOS SDK | Enums" solution article.



  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 Native IOS SDK | Manage Shipping and Billing details and 2.1.1 Native IOS SDK | Configuration Options & Parameters solution articles.

    let billingDetails = PaymentSDKBillingDetails(name: "John Smith",
                                                email: "[email protected]",
                                                phone: "+2011111111",
                                                addressLine: "address",
                                                city: "Dubai",
                                               state: "Dubai",
                                               countryCode: "ae", // ISO alpha 2
                                               zip: "12345")
                                                       
    let shippingDetails = PaymentSDKShippingDetails(name: "John Smith",
                                                email: "[email protected]",
                                                phone: "+2011111111",
                                                addressLine: "address",
                                                city: "Dubai",
                                               state: "Dubai",
                                               countryCode: "ae", // ISO alpha 2
                                               zip: "12345")



  3. Then create an object from PaymentSDKConfiguration and fill it out with your credentials and payment details. To know more about what is the exact values that should be passed here, please check our 2.1.1 Native IOS SDK | Configuration Options & Parameters solution article.
    let configuration = PaymentSDKConfiguration(profileID: profileID,
                                           serverKey: serverKey,
                                           clientKey: clientKey,
                                           currency: "AED",
                                           amount: 5.0,
                                           merchantCountryCode: "AE")
                .cartDescription("Flowers")
                .cartID("1234")
                .screenTitle("Pay with Card")
                .billingDetails(billingDetails)



  4. Only then you will be ready to start/initiate the payment by passing your PaymentSDKConfiguration object along with the PaymentManagerDelegate object -in which you will handle the payment response- to the startApplePayPayment function. To know more about this please check our 2.2 Native IOS SDK | The PaymentSDKConfiguration Object, 2.1.2 Native IOS SDK | Delegates, and Step 5 - Native IOS SDK | Handle the payment responsesolution articles
    PaymentManager.startCardPayment(on: self, 
                                 configuration: configuration,
                                 delegate: self)
    
    



  5. After this, you will receive the token along with the masked card (PaymentInfoViewModel.paymentDescription) and its type within the PaymentManagerDelegate in which you handled the payment response. You will need to save them for future usage.

  6. Then perform any further 3DS tokenized payments according to your business needs by repeating steps 2 and 3 from this solution article, then directly start the 3DS tokenized card payment within the PaymmentManager class by passing the PaymentSDKConfiguration object and the PaymentManagerDelegate object -which you are handling your payment within- along with the token and the PaymentSDKSavedCardInfo, which includes the masked card and the card type (saved from the previous step ).
    PaymentManager.start3DSecureTokenizedCardPayment(on: self, 
                             configuration: configuration,
                             savedCardInfo: PaymentSDKSavedCardInfo(Masked_card, "Visa or MC or card type"),
                             token: *TOKEN*
                             delegate: self)


    This will make the payment behavior would be like the one below, in which your customers will have to provide only their CVVs instead of the whole card details.









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

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

 And to get familiar with the rest of the steps regarding the current step " Step 3 - Native IOS SDK | 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.