This section assumes you've completed initial Integration. If you haven't, then please complete Integration first.
If unsure where to do it, the ViewController that will be presenting the journey is a good start
import Frames
This is the logical configuration:
- ensuring you receive access for the request
- enable us to prevalidate supported schemes at input stage
- prefill user information (Optional but may go a long way with User Experience if able to provide)
/**
This is optional and can use nil instead of this property.
But if you can provide these details for your user you can
- make their checkout experience easier by prefilling fields they may need to do
- improve acceptance success for card tokenisation
*/
let country = Country(iso3166Alpha2: "GB")
let address = Address(
addressLine1: "221B Baker Street",
addressLine2: "Marylebone",
city: "London",
state: "London",
zip: "NW1 6XE",
country: country)
let phone = Phone(number: "+44 2072243688",
country: country)
let billingFormData = BillingForm(
name: "Amazing Customer",
address: address,
phone: phone)
let configuration = PaymentFormConfiguration(
apiKey: "<Your Public Key>",
environment: .sandbox,
supportedSchemes: [.visa, .maestro, .mastercard],
billingFormData: billingFormData)
We will cover Make it your own later, for now we'll use Default Style
// Style applied on Card input screen (Payment Form)
let paymentFormStyle = DefaultPaymentFormStyle()
// Style applied on Billing input screen (Billing Form)
let billingFormStyle = DefaultBillingFormStyle()
// Frames Style
let style = PaymentStyle(
paymentFormStyle: paymentFormStyle,
billingFormStyle: billingFormStyle)
If the user completes flow without cancelling, the completion handler will be called, with a card token if successful, or with an error if failed
let completion: ((Result<TokenDetails, TokenRequestError>) -> Void) = { result in
switch result {
case .failure(let failure):
if failure == .userCancelled {
// Depending on needs, User Cancelled can be handled as an individual failure to complete, an error, or simply a callback that control is returned
print("User has cancelled")
} else {
print("Failed, received error", failure.localizedDescription)
}
case .success(let tokenDetails):
print("Success, received token", tokenDetails.token)
}
}
Using properties from Steps 2, 3 & 4, lets now create the ViewController
let framesViewController = PaymentFormFactory.buildViewController(
configuration: configuration, // Step 2
style: style, // Step 3
completionHandler: completion // Step 4
)
We now have created the ViewController needed to enable full tokenisation for your user. Let's present it.
/**
We are assuming you started the Walkthrough from the presenting ViewController
and that a Navigation Controller is available
You will need to make minor adjustments otherwise.
For the best experience we recommend embedding the presenting ViewController inside an UINavigationController
*/
navigationController?.pushViewController(framesViewController, animated: true)