Deprecated Integration Methods
The iDEAL alternative payment method for a Web SDK and Mobile SDK integration, has been decommissioned.
To add iDEAL support to your Payments Widget:
- Set the currency code to EUR (Euro)
- Set the judoId
- Include iDEAL as a payment method
An example of a valid iDEAL configuration:
Once the currency and judoId are set, iDEAL will be available as a payment method in the Payments Widget.
To add iDEAL support to your Payments Widget, set:
- The currency code to EUR (Euro)
- The JudoId
The judoIdparameter can be set by calling setJudoIdon the Judo builder. An example of a valid iDEAL configuration:
Once the currency and judoId are set, iDEAL will be available as a payment method in the Payments Widget.
To add iDEAL support to your Payments Widget, set:
- Currency code to EUR (Euro)
- The judoId parameter in the JPConfiguration instance:
An example of a valid iDEAL configuration: configuration.judoId = @"my-judo-id";
Once the currency and judoId are set, iDEAL will be available as a payment method in the Payments Widget.
Ideal is an online payment method that enables consumers to pay through their own bank.
Make sure you have implemented the following prerequisites from the Web SDK integration guide:
The fields referred to in this step are part of the iFrame configuration object supplied in Step Two in the Prerequisites: createCardDetails() Call: judo.createCardDetails('payment-iFrame', iFrameConfiguration)
To add the iDEAL payment tab:
- Ensure the array set for the enabledPaymentMethods field includes ‘IDEAL’.
- For example: enabledPaymentMethods: ['CARD', 'IDEAL']

You can alter the timeout for iDEAL transactions by setting the field idealPollingTimeout. Set it as the number of ms you want the timeout to be. For example: idealPollingTimeout: 40000 would set the transaction timeout to 40000ms (40 seconds).
If the field is not provided, the default value is 60000ms
- Define the idealConfiguration object for the payment
Ensure the details used when creating the paymentSession match the values set in the following configuration:
To successfully process an iDEAL transaction, the currency must be ‘EUR’ (Euros).
2. Call getPaymentMethod() in your function that handles the payment button click for card payments. (If this is not already set up, add a function to handle this). getPaymentMethod() returns information on which tab is open in the iFrame. Call the appropriate Web SDK method to trigger the correct transaction.
For example:
- If the card form tab is open, getPaymentMethod will return “CARD”.
- For a payment, call: invokePayment()
- For a preAuth, call: invokePreauth()
- If the iDEAL tab is open, getPaymentMethod will return “IDEAL”.
- Call: invokePaymentWithIDEAL()
If you do not already have an event handler on your payment button to invoke the handlePaymentButtonClick():
- Add the onclick attribute to your payment button: <button id="submit-payment-button" onclick="handlePaymentButtonClick()"> Pay Now </button>
Make sure you have set :id ="submit-payment-button". This is required to perform form validation, where the Pay button will be greyed out until all the information has been entered.
The Klarna alternative payment method for a Web SDK integration, has been decommissioned.
Klarna is a payment method that allows consumers to pay for items in instalments, or at a later date. This does not impact the merchant as they will receive all of the funds upfront as Klarna pays the merchant in full, taking on the debt themselves.
Make sure you are using Web SDK Version 0.0.18 (or higher).
Make sure you have implemented the following prerequisites from the Web SDK integration guide:
The payment form iFrame must be loaded onto the page in order for payments to work. However displaying the form to the consumer is not required for this transaction type.
To hide the payment form iFrame, use: <div id="payment-iframe" style="position:absolute;width:0;height:0;border:0;"></div>

Add the Klarna button to your web page:
Parameter | Value |
---|---|
backgroundColor |
|
color |
|
label |
|
width | number |
height | number |
borderRadius | number |
Make sure the following parameters are the same values as those entered in Create a paymentSession, otherwise the transaction will fail:
- merchantPaymentReference
- merchantConsumerReference
- JudoID
- Currency
- Amount
This is used to cross reference the validity of the transaction.
Your backend server should store the paymentSession response reference returned by Judopay's API. Use this reference from the response to populate yourPaymentSession.
Make sure you replace the klarnaConfiguration object values with your own.
For the specific input parameters of the products variable, refer to the Klarna Documentation.
PayByBankApp payment method for React Native is no longer supported and will no longer be updated.
To display the PayByBankApp as a Payment Method for ReactNative:
- Create a JudoPBBAConfiguration:
Parameter | Description |
---|---|
mobileNumber String | Consumer's mobile number. Sent with the transaction as an additional parameter. |
emailAddress String | Consumer's email address. Sent with the transaction as an additional parameter. |
appearsOnStatement String | Sent with the transaction as an additional parameter. |
deeplinkScheme String | Used in the deeplinking process to identify your app. |
deeplinkURL String | Specifies the app has opened as result of a redirect from the Bank App. The deeplink URL contains the information needed to start polling the transaction status. |
When the consumer invokes the PaybyBankApp transaction, in order to complete the transaction, the app redirects to the user's bank app. When the interaction is finished, the bank app redirects back to your app via the deeplinkScheme sending a deeplinkURL.
The deeplink scheme has to be set manually for iOS and Android, via the Info.plist (iOS) and the AndroidManifest.xml (Android).
The deeplinkURL can be used to start polling the transaction status. The deeplink events can be captured with the linking package already built in ReactNative.
Check the ReactNative sample app for the implementation reference.
Once you have captured the deeplinkURL, pass it to the deeplinkURL parameter of the JudoPBBAConfiguration. If this parameter is set once the invokePayByBankApp is called, the polling process should automatically start.
Not using the Mobile SDK Payments Widget?
To Integrate directly to your app:
- Instead of calling invokePayByBankApp:
- Add the branded PaybyBankApp button
- Add the method as a button press action
- Expose the PaybyBankApp button as follows:
Although, the JudoPBBAButton is referred to as a button, it does not handle button-related events, such as onPress. The JudoPBBAButton will need to be wrapped in a component that handles touch events, for example the TouchableOpacity component.
Xamarin SDK has been deprecated and will no longer be updated.
Prerequisites:
- You have set up your Judopay account.
- Sign up for your sandbox account, to receive access to your Judopay dashboard and the sandbox environment.
- Your judoIds and tokens are configured and enabled as appropriate.
- For more information on permissions, see Permissions.
- You have the latest version of the Android SDK.
- For more details, see Integrating Android with Judopay.
- You have the latest version of the iOS SDK.
- For more details, see Integrating iOS with Judopay.
For Mobile apps, we recommend using payment session authentication.
Integration Requirements:
- Xamarin Studio 6.1 / Visual Studio 2015
- Xamarin Forms 2.3.2.127
- Xcode 8
- Android 7.0 (API 24) SDK and build tools 24.0.3 installed
- The SDK is compatible with Android Jelly Bean (4.1) and above and iOS 8 and above.
Integrate Judopay into your project by visiting the Xamarin component store:
- Search for Judopay
- Add the component to your Android and iOS projects
Setting up Xamarin Ensure all integration steps are completed.
Add your app’s sandbox token and secret to your Judo instance in your Xamarin Forms page:
Add additional configuration depending on the project you are integrating, as follows:
Due to a bug in Xamarin.Forms the page does not resize correctly when the keyboard is visible.
An additional piece of code must be added to your Android Activity: Add the code snippet after the Xamarin.Forms.Forms.Init method call inside the OnCreate method of your Activity:
Going Live with Xamarin
You will need to have tested your app in the sandbox environment before going live. Point to the Live Environment Within your app’s Xamarin Forms page change the line specifying the targeted environment from SANDBOX to LIVE:
Environment = JudoEnvironment.Live,
Replace your sandbox API Token and Secret for the live API Token and Secret
Find these in JudopayPortal > Your apps > {app name} > Live Tokens Use the live environment for testing before deploying your app.
PayByBankApp payment method is no longer supported and will no longer be updated.
PayByBankApp is a new, easy and secure alternative payment method, that enables your consumers to pay online quickly and securely via their trusted mobile Bank app.
PayByBankApp facilitates the enablement of consumers using bank transfers to easily pay for goods and services online.
Without the need to enter card details or additional passwords every time a purchase is made, it is designed to simplify the checkout experience, giving consumers more control and visibility of their finances when making a purchase.
The consumer's journey on a mobile app, when selecting the PayByBankApp button:

Features of PayByBankApp:
- Strong authentication.
- PSD2 Compliant - Meeting the Strong Customer Authentication (SCA) Requirements.
- Increased Consumer Trust - Existing bank brands are known to the consumer.
- Works through the consumer’s existing Bank app.
- Merchant Liability Shifted to the Issuer:
- All transactions are authenticated via the consumers Bank app, so all liability is shifted away from the merchant to the issuing bank.
- Everything is tokenised:
- The merchant, Judopay and the distributor does not have any bank details of the consumer.
Your consumers:
- Can check their balances in real time.
- Choose which account to pay from.
- No need to enter card details, or any additional passwords.
- Can see money move from their account in seconds.
- Stay secure with payment authorisation taking place in their Bank app.
- Consumers will be auto-enrolled when their online Bank app is installed.
If a consumer uses PayByBankApp with more than one Bank app on their phone, they will get the choice of which Bank app to open at the point of purchase, with the choice of setting their default option.
Once the consumer clicks the PayByBankApp button, they will be taken to their Bank app to complete the payment.
PayByBankApp payment method is no longer supported and will no longer be updated.
To add the PayByBankApp button:
For the PayByBankApp button to appear in the Payments Widget, a banking app must already be installed.
The PayByBankApp Button is displayed:

To display the PayByBankApp as a Payment Method for Android:
Not using the Mobile SDK Payments Widget?

To Integrate directly to your app:
PayByBankApp payment method is no longer supported and will no longer be updated.
Integrating PayByBankApp using the Payments Widget for iOS
Displaying PayByBankApp as a Payment Method for iOS

To display the PayByBankApp as a Payment Method for iOS:
Not using the Mobile SDK Payments Widget?
To Integrate directly to your app:
Prerequisites
- You have set your app's URL Scheme.
- You have added zapp to the ApplicationQueriesSchemes:
An example of the Info.plist file:

Step 1: Initialising the SDK
To integrate with the Judopay SDK directly to your iOS app, you can use either a:
- basic authorization
- session authorization
You can select the sandbox mode for testing purposes. Set the value:isSandboxed = true
Step 2: Check for Installed Bank Apps
To ensure a good customer experience, it is recommended to only display the PayByBankApp button when the consumer has a compatible mobile Banking app.
Before adding the PayByBankApp button in Step 3, check if any compatible PayByBankApp Bank apps are installed, using the JudoKit isBankingAppAvailable method:
Step 3: Adding the PayByBankApp Button
We recommend you use the branded button to invoke a PayByBankApp transaction, however it is not mandatory.

The PayByBankApp Button uses the delegate property. The delegate property points to any class that implements the JPPBBAButtonDelegate interface:
The JPBBAButton is a subclass of UIView, not UIButton. Take this into consideration when integrating the PayByBankApp button via the Interface Builder.
The JPPBBAButtonDelegate interface has only one method: pbbaButtonDidPress(sender:), which is responsible for handling the button tap action.
Recommended PayByBankApp Button Size:
- Minimum: Width 160pt | Height 40pt
- Maximum: Width 310pt | Height 48pt
Step 4: Adding the Delegate Method
The delegate method is responsible for the button tap action.
To add the delegate method:
- Call the invokePBBA method in the Judopay SDK and provide the required configuration parameters:
- Each Judopay transaction takes a JPConfiguration instance as a parameter.The configuration object sets up all the required parameters for a successful transaction. It also sets any optional parameters which you can configure to personalise the payment flow.
- PayByBankApp transactions require some extra parameters to be set up, in addition to the basic transaction configuration. These optional parameters are defined in the JPPBBAConfiguration class, and used to add additional information to the transaction. The following two parameters are recommended:
- deeplinkScheme
- deeplinkURL
- Call the invokePBBA method from the Judopay SDK.
The PayByBankApp flow will be triggered, opening the Bank app for consumers to make their transactions.
A deeplinkScheme identifies your app during the redirect process. When a consumer has completed their transaction using their bank app, the bank app will attempt to redirect the consumer back to your app.
The deeplinkScheme name should match the URL scheme defined in the Info.plist file. For example: myapp -> myapp:/
The deeplinkURL
The deeplink URL enables the app to open the consumer's mobile Banking app, so they can complete the transaction.
When the Bank app redirects the consumer back to your app, it also provides you with a URL that you can use to poll the transaction status.
Add the deeplinkURL to the main configuration object. This will be sent as a parameter to the transaction method.
It is a good idea to handle the errors within this step.
The most important information from the response is the orderId, accessed via response.orderDetails.orderId.
The orderId is used to manually check the transaction status.
Step 5: Handling the deeplinkURL
Following the completed transaction, the bank flow will be triggered when the invokePBBA method is called, even if the deeplinkURL parameter is not provided.
However, if the deeplinkURL parameter is provided, calling invokePBBA will trigger the transaction status polling logic.
To handle the deeplinkURL:
- Listen to this event.
- Capture the redirect URL.
To capture the redirect URL:
- In your AppDelegate file, add the following methods:
- application(_:open:options:)
- application(_:didFinishLaunchingWithOptions:)
Pass the URL to the JPPBBAConfiguration instance. For the purpose of this exercise, the deeplinkURL is saved in the app's UserDefaults. You can save the deeplinkURL in the Keychain or any alternative.
Step 6: Polling the Transaction Status
Once the Bank app has redirected the consumer back to your app, you can start polling the transaction status.
To start the PayByBankApp polling status:
- Add the deeplinkURL to the configuration
Call the invokePBBA(configuration:) method:
In the JPResponse object, you can inspect the orderDetails containing information about the transaction status.
Another option is to put a check in your viewDidAppear(animated:) method. If a deeplinkURL is set up, add it to the configuration and call the invokePBBA(configuration:) method again. This will start the polling status.
Manually Checking the Transaction Status
There may be cases where the Bank app closes before the transaction flow completes. This would mean the deeplinkURL is not returned and the polling process to check the transaction status will not begin.
To manually check the transaction status:
- Invoke a manual order status request:
- Get the orderId from the initial request:
When the Bank app is invoked during the PayByBankApp request, (Step 4) the orderId is captured from the callback response:
Use the orderId to manually check the transaction status: You would do this in the same way as Initialising the Judopay SDK, see Step 1: Initialising the SDK.
Call the invokeOrderStatus method, with the orderId:
The response will contain both the transaction status, and the order details of the transaction.
For a sample app, see Judopay's Judokit for iOS on Github.