This guide will show you how to use Klarna Mobile SDK to implement Express Checkout in your Android mobile application, providing a fast and simple shopping experience for your users.
Please review this brief guide first to ensure you are prepared to offer this integration to your customers.
For a Mobile SDK integration your Payment Server and Mobile App must work together to offer one-click checkout experience:
sequenceDiagram
participant Consumer
participant Merchant App
participant Mobile SDK
participant Merchant Server
participant Klarna API
Consumer->>Merchant App: Navigate to checkout, shopping cart, product or wishlist page
Merchant App->>Mobile SDK: Create Express Checkout Button with session information
Merchant App->>Merchant App: Display the Express Checkout Button
Consumer->>Mobile SDK: Click the Express Checkout Button
Note over Mobile SDK: Consumer completes to purchase flow.
Mobile SDK-->>Merchant App: Provide authorization token (valid for 60 minutes)
Merchant App->>Merchant Server: Sends the authorization token for creating order
Merchant Server->>Klarna API: Create Order POST (setup/payments/v1/authorizations/{authorizationToken}/order)
Klarna API-->>Merchant Server: Provide order_id and redirect_url
Merchant Server-->>Merchant App: Provide order details
Merchant App->>Consumer: Redirected to order confirmation screen
Before you integrate Express checkout, check that you meet the following prerequisites:
1.
Make sure to have a payment solution with Klarna. Before integrating Express checkout into your website, you need to have a merchant account with Klarna and Klarna payments or Klarna checkout integrated in your checkout.
2.
Make sure to allowlist the domain of the page on which Express checkout will be integrated.** **If not all the domains are added to the allowlist, Express checkout will still load, however, the customer will see a "We couldn't load the next screen" error.
To allowlist the domain URLs, follow these steps:
Log into Klarna Merchant portal. If you want to test Express checkout, log into the playground Merchant portal. If you want to build a live integration, log into the production Merchant portal.
Once logged in, go to Payment settings > Client Identifiers. In the Allowed Origins for your integrations section, click Manage origins.
In the Register new origin field, add your domain’s URL. Then, click Register. The registered domain is now listed in Allowed origins.
1.
Generate a client identifier that will let you authenticate requests sent to Klarna:
Log into Klarna Merchant portal.
Once logged in, go to Payment settings > Client Identifiers.
To generate a new client identifier, navigate to Client Identifiers for your integrations and click Generate client identifier.
If you’ve previously generated a client identifier for your store, you can use it to build your Express checkout integration.
Create an instance of the KlarnaExpressCheckoutButton when your cart page or product detail page is loaded. This ensures that the button is readily available for user interaction. Depending on your integration setup, you can create and initiate the Express Checkout button using either a client-side session or a server-side session:
Client-side session: Use this method if you prefer to set a client ID from the Merchant Portal. This approach is typically used when the session management is handled entirely on the client side. You would need to provide the order details in this approach.
Server-side session: Choose this method if you have a client token generated by the backend for the server-side session. This is suitable when you want to manage sensitive session data on the server. You do not need to provide the order details with this approach.
Once the button is created, add it to your screen. This involves adding the button to the appropriate view hierarchy in your application's user interface.
Once a customer clicks the Express Checkout button, the Klarna payment authorization process will begin. You must provide a callback object when creating the button, which will handle Klarna's response. This callback is essential for managing the payment flow and updating the UI based on the authorization result.
If the authorization is successful, you will receive an authorization token from the authorization response within the callback object.
KOTLIN
1
2
3
4
5
6
7
8
9
10
overridefunonAuthorized(
view: KlarnaExpressCheckoutButton,
response: KlarnaExpressCheckoutButtonAuthorizationResponse){
if (response.approved && !response.authorizationToken.isNullOrBlank()) {
// authorization is successful, backend may create order
}
if (response.finalizeRequired) {
// finalize call is required, only applicable if you are setting autoFinalize to false// use response.clientToken to finalize
This is only required of autoFinalize is set to false in session options.
If the session needs to be finalized, you’ll need to perform this last step to get an authorization token from your checkout confirmation screen. This can be done via KlarnaPaymentView, using the clientToken from KlarnaExpressCheckoutButtonAuthorizationResponse to initialize the view and calling finalize method of that view.
Once you have the authorization token, you can create an order. When creating the order, make sure the shipping address provided in the request matches the collected shipping address returned alongside the authorization token.
To continue with the purchase, you have to create an order in Klarna's system. This step takes place in the server side through the Klarna payments API.
To create an order for a one-time payment, send a POST request to the {apiUrl}/payments/v1/authorizations/{authorizationToken}/order endpoint and include authorization_token in the path.
For example, if the authorization_token is b4bd3423-24e3, send your request to the {apiUrl}/payments/v1/authorizations/b4bd3423-24e3/order endpoint.
When you receive a success response, the customer gets charged and the Klarna payments session is closed.
As part of the response, you receive the following details:
order_id, an order identifier that you can later use to capture or refund the order using the Order management API
redirect_url, a URL to which you redirect the customer. This isn't included in the response received if you didn't include the URL when initiating a payment
fraud_status, an indicator of whether the transaction is suspected to be legitimate or fraudulent
authorized_payment_method, the payment method selected by your customer for this purchase
A success response to the order creation request for a one-time payment.
Send the customer browser to redirect_url provided in the response. Klarna places a cookie in the browser and redirects the customer back to the confirmation URL you provided when creating the session. This makes the checkout faster the next time the customer chooses to pay with Klarna.
An error response to the order creation request for a one-time payment.
Here are examples of common errors with troubleshooting suggestions. You can use the value in correlation_id to find entries related to the request under Logs in the Merchant portal.
Error code
Error message
Description
NOT_FOUND
Invalid authorization token
The authorization token has expired because the order was placed more than 60 minutes after authorization. To fix the error, request a new authorization_token and use it to place the order.
BAD_VALUE
Not matching fields: [billing_address.postal_code]
The data shared with Klarna in a previous step (create_session, load(), or authorize()) have been modified causing the validation to fail.
BAD_VALUE
Not matching fields: [Incorrect number of items in the cart. Expected: 2, Actual: 3]
The order lines or the cart were updated after the authorize() call. Please ensure that the cart is kept as-is or send a new authorization request.
REJECTED
Rejected
This is an edge case reason, but can be triggered in case the merchant is configured with being allowed to update the cart. This could be updated from the authorize to the place order in such a way that a new authorize is triggered. In this case this is rejected.
This section will help you customize the Express checkout button to ensure a seamless and trustworthy checkout experience, while leveraging Klarna’s strong brand to boost your conversions.
Styling the Express checkout button is crucial for integrating it into your application in a way that complements your brand and encourages user engagement. To modify the style of the button, edit the source code as explained in this guide.
The theme defines the button’s color. You can change the theme by setting the value of the theme attribute.
Apart from the default dark theme, you can apply the light theme to have the button displayed in white or choose auto mode so the theme is selected automatically based on the device’s configuration.
The button’s default theme color is dark. As the theme attribute is optional, the default theme is applied both when you set the attribute to default or if you omit it from the source code altogether.
There are three theme values available, DARK (default), LIGHT and AUTO.
Customizing the shape of the button to match your application’s look and feel is a key step in creating a visually cohesive and engaging user experience. To control the button's shape, change the value of the shape attribute.
There are three shapes available with the Express checkout button: ROUNDED_RECT (default), RECTANGLE and PILL.
Use the outlined style to make the button visible on all backgrounds. To apply this style, set the KlarnaButtonStyle attribute to OUTLINED, otherwise default value FILLED will be used instead.
The SDK will log events and errors while it’s running, which you can read in logcat console. You can set the logging level for the SDK through the loggingLevel property of integration instance.