Create device binding (yellow flow)
Visa Cloud Token Framework (CTF) device binding yellow flow occurs when the issuer requires step-up authentication using an ID&V method.
This flow starts the same way as the Create device binding (green flow), then pauses until the end user completes step-up authentication.
Prerequisites:
The payment card is already tokenized.
You have a
vProvisionedTokenId.The end user can authenticate on the device (PIN, passcode, fingerprint, Face ID, etc.).
The end user can complete the selected ID&V method (for example, OTP).
Flow
1
Start the device binding flow from the merchant application using the Thales SDK.
2
Thales SDK generates a device ID and a CTF key pair, then stores the CTF key pair securely on the device.
3
Thales SDK triggers end user authentication on the device.
4
Thales SDK generates and signs the Visa-defined payload.
5
Thales SDK sends the signed payload and the CTF public key to the Thales backend.
6
Thales backend converts the public key into a certificate using a Visa CA.
7
Thales backend enrolls the device and requests device binding to VTS.
8
VTS checks the issuer decision.
9
Issuer requires step-up authentication and provides supported ID&V methods (for example, OTP or app-to-app).
10
Thales backend is informed about the issuer decision.
11
Thales SDK gets the list of ID&V methods and passes them to the merchant application.
12
The merchant application shows the different options to the end user.
SDK integration
Create a binding
Call createBinding from the Thales SDK.
If the issuer requires step-up authentication, the SDK returns an IDVSession in:
onIssuerAuthenticationRequired(Android)idvSessionHandler(iOS)
Get the list of ID&V methods
The list of ID&V methods can be retrieved from the IDVSession object.
Use the IDVSession object to call getIdvMethods to get the list of supported ID&V methods.
Use the IDVSession object that is returned from the createBinding function to call idvMethods to get the list of supported ID&V methods.
Select an ID&V method
If the selected method is OTP-based, the SDK calls onIssuerAuthenticationReady and provides OtpActivationStatus.
OtpActivationStatus is returned only for OTP_EMAIL, OTP_SMS, and OTP_ONLINE_BANKING.
For OTP-based methods, selectIDVMethod returns OtpActivationStatus. Otherwise it returns nil.
Errors are returned in completionHandler.
OtpActivationStatus is returned only for OTP_EMAIL, OTP_SMS, and OTP_ONLINE_BANKING.
Activate the binding
Activate the binding based on the selected ID&V method:
APP_TO_APP: see Activate device binding with app-to-app.CUSTOMER_SERVICE: see Customer service flow.OTP_EMAIL,OTP_SMS, andOTP_ONLINE_BANKING: see OTP flow.
If the flow is interrupted while the binding state is PENDING_ACTIVATION, resume it using resumeBinding.
Resume a pending binding
Use resumeBinding when the binding state is PENDING_ACTIVATION.
Get the IDVSession object
In cases where an error occurs, the onError callback will be called, otherwise a IDVSession object will be returned.
After resumeBinding returns an IDVSession, use it to get the list of ID&V methods, select one and activate the binding as mentioned above.
Optional: resume flow examples (Android/iOS)
List<IDVMethod> idvMethods = idvSession.getIdvMethods();guard let idvSession = VisaService.shared.idvSession else { // no idv session return}// 1. Display list of idv methodsdo { let idvMethods = try idvSession.idvMethods} catch let error { // 2. handle error}
Select an ID&V method
IDVMethod selectedIdvMethod;idvSession.selectIdvMethod(selectedIdvMethod);Once the application submits the selected ID&V method, the onIssuerAuthenticationReady callback will be returned to the application.guard let idvSession = VisaService.shared.idvSession else { // no idv session return}// 1. Display list of idv methodsdo { let idvMethods = try idvSession.idvMethods let selectedIdvMethod = idvMethods[0] // user select 1 of the idvMethods available // 2. submit the idv method idvSession.selectIDVMethod(selectedIdvMethod) { (result) in if let otpActivationStatus = result { // 3.1. display page to enter OTP value } else { // 3.2. handle selected idv which is unrelated to otp, for example, asking for Customer Support } }} catch let error { // handle error}// 4. Failure in step 2, selectIDVMethod, will be handled in completionHandler.VisaService.shared.completionHandler = { (session, error) in // 5. Check if it is a selectIDVMethod error. if let session = session, let error = error, error.description == TMGError.invalidIdvMethod.description { VisaService.shared.idvSession = session // 6. Retry the IDV flow. }}TMGError illustrated above is not exhaustive. Use the most appropriate error code for your case.
Activate the binding
The binding activation can be done by following the steps for the method selected:
APP_TO_APP: see Activate binding with app-to-app.CUSTOMER_SERVICE: see Customer service flow.OTP_EMAIL,OTP_SMS, andOTP_ONLINE_BANKING: see OTP flow.
Last updated
Was this helpful?