Klarna Docs - GraphQL

GraphQL

Read about using GraphQL in your checkout.

Headless e-commerce architecture is based on a headless content management system (CMS) that stores, manages, and delivers content without a front end and only through an API.

On a headless platform, the front end (or the head) has been decoupled and removed, leaving only the back end.

Back-end developers use APIs to deliver things like products, blog posts, or customer reviews. Front-end developers work on how to present that content using any framework they desire.

GraphQL is a query language developers can use to retrieve data from a server. Adobe Commerce uses GraphQL as an alternative way of retrieving front-end information.
For more information about GraphQL, refer to the GraphQL checkout tutorial.

Klarna payments requires cart information to initiate the payment session. For this reason, the below steps can be executed only after a cart has been created. Please follow Adobe's GraphQL checkout tutorial tutorial to create a cart.

  1. The Progressive Web App (PWA) client calls the createKlarnaPaymentsSession mutation to generate the client_token and retrieve a list of payment_categories.
    This step can be executed at any time after the cart is created. However, we recommend that you add products to the cart and set the billing address, shipping address, and shipping method on the cart before you perform this step.
  2. Adobe Commerce forwards the request to Klarna.
  3. Klarna returns the client_token and the payment_categories available to the customer.
  4. Adobe Commerce forwards the token to the client.
  5. The client sends the cart query to retrieve the available payment methods.
  6. Adobe Commerce must always retrieve the latest status information from Klarna before returning the Klarna payments method as an option to the customer. This is important to ensure that the latest available payment options are always shown to the customer.
  7. Klarna returns an updated list of payment_categories.
  8. Adobe Commerce returns all available payment methods, including Klarna payment methods.
  9. The PWA client renders the Klarna payment widget.The PWA client uses the client_token and payment_categories to initialize the Klarna payments JavaScript SDK.
  10. The PWA client sends the authorization directly to Klarna.
    On the checkout page, the customer selects Klarna as the payment method and clicks Place Order. When this happens, the PWA client must send the authorize() call to Klarna. Then, the customer follows the authorization steps on the Klarna inline modal. During this phase, the communication between the PWA client and Klarna is handled directly by the Klarna Payments JS SDK.
  11. Klarna returns the authorization_token in response to the authorize call.
  12. Set the payment method providing the authorization_token as part of the setPaymentMethodOnCart mutation.
    The client uses the setPaymentMethodOnCart mutation to set the payment method to klarna_<identifier-value>. The authorization_token is passed in the klarna object.
  13. Adobe Commerce returns an updated cart object.
  14. The PWA client runs the placeOrder mutation.
  15. Adobe Commerce sends the place order request to Klarna.
  16. Klarna sends the response to Adobe Commerce.
  17. Adobe Commerce creates an order and sends an order ID in response to the placeOrder mutation.

During the purchase flow, the cart can be updated by adding additional products, applying coupons, and changing the billing or shipping address. All these events might cause a change in Klarna options for the specific customer.

In order to always present customers with the latest available payment options provided by Klarna, the PWA client must:

  1. Perform a cart update.
  2. Adobe Commerce returns an updated cart object.
  3. Send the cart query to retrieve the latest available payment methods.
  4. Adobe Commerce sends another request to Klarna with the latest information available from the cart.
  5. Klarna returns new list of payment methods. Note that the list might contain different options for the customer.
  6. Adobe Commerce returns an updated cart object.
  7. Reload the widget on the client side.

When you set the payment method to Klarna in the setPaymentMethodOnCart mutation, the payment_method object must contain a klarna object.

The following example shows the setPaymentMethodOnCart mutation constructed for the Klarna payment method.

mutation {
  setPaymentMethodOnCart(input: {
    cart_id: "3WxC8gQn4Fbo55yqVLSiUFJ9fmEwnlxG"
    payment_method: {
      code: "klarna_pay_later"
      klarna: {
        authorization_token: "e9abc610-6748-256f-a506-355626551326"
      }
    }
  }) {

A sample setPaymentMethodOnCart mutation for the Klarna payment method.

{
  "data": {
    "setPaymentMethodOnCart": {
     "cart": {
       "selected_payment_method": {
         "code": "klarna_pay_later"
        }
      }
    }
  }

A sample response to the setPaymentMethodOnCart mutation.