Swish

Swish is a smart and secure payment app that allows consumers to pay online, in store and exchange money with friends.The app is easily usable by consumers , where they simply join using their mobile numbers and connect their bank accounts for payments. Named Sweden's strongest brand for three consecutive years with a share of checkout of over 39%, Swish is the preferred way to pay for Swedish consumers.

Payment Method Properties

MarketsSE
Processing currenciesSEK
Consumer currenciesSEK
Settlement currenciesGlobal
Minimum payment amount01 SEK
Maximum payment amount999999999999.99 SEK
Recurring Payment SupportNo , to be launched ~ Q1 2025
Separate Capture SupportNo
Refund- Full - Partial - Multiple Partial
Refund validity13 months
ChargebackNo
Sandbox availabilitySWISH

Transaction and Fund Flow

PPRO Offers Swish integrations across M-Commerce, In-Store and E-Commerce channel.

M-Commerce

There are two integration methods for the m-commerce journey: direct and indirect redirection. Each option has its own benefits, and the choice should depend on your specific needs and available resources.

Direct redirection

This approach enables direct navigation between merchant app or website and the Swish app, providing a seamless and native user experience.

Indirect redirection

This method redirects users merchant website to the Swish app and then back to merchant website, with a brief transition through the browser.

Summarised view is as follows:

DimensionDirect redirectionIndirect redirection
Suitable forLarge businessSmall to medium sized business
User ExperienceSuperior and seamlessNot Smooth
Consumer ExperienceExcellentGood
Development effortSignificantMinimal
Transaction Status updatePolled by MerchantPublished by PPRO

Our Recommendation

While both methods have their advantages, we recommend the direct redirection approach for merchants with the resources to implement it. This method offers a superior user experience, which can result in higher conversion rates and increased consumer satisfaction. However, if you are a small to medium-sized merchant seeking a quicker implementation with minimal development effort on your end, indirect redirection is a suitable choice.

Ultimately, the decision should be based on your specific business needs and development capabilities.

E-Commerce and In-Store

There are two main methods to generate the QR code for E-Commerce and In-Store journey:

  1. PPRO-rendered : PPRO's QR code generation simplifies the process by providing either a base64 encoded string for decoding or a ready to display QR image.
  2. Customer rendered through QR Payload : QR Payload to generate QR image , swish design specifications to be followed while generation.

Swish Design Specification for QR Payload Method

The QR code should be created in black and white. The Swish symbol is placed in the centre, on a white circular background. The symbol width should be 25% of the QR code width.
The Swish symbol can be downloaded from the Swish marketing toolbox and should follow the Swish trademark guidelines.

We strongly recommend using the PPRO rendered QR code generation, as it simplifies the process by removing the need to follow Swish design specifications on your end.

For reference, PPRO rendered QR code generation is demonstrated below, providing both a ready to display QR image and a Base64 encoded string.

Make a SWISH Payment

One-time Swish payments follow our standard authentication methods, ensuring quick and easy integration for any journey—whether M-Commerce, In-Store, or E-Commerce.

Simply add Swish to your integration in seconds, with the details for each channel summarised below for your convenience

JourneyConsumer Entry Point Authentication setting in RequestAuthentication method in Response
M-Commerce Merchant App-direct redirection APP_INTENT
App_INTENT
M-CommerceMerchant App-indirect redirectionAPP_INTENT
REDIRECT
M-CommerceMerchant Website-direct redirectionREDIRECT
App_INTENT
M-CommerceMerchant Website-indirect redirectionREDIRECT
REDIRECT
E-Commerce (QR)Desktop-PPRO Hosted REDIRECT
REDIRECT
E-Commerce
(QR)
Desktop-Merchant CheckoutREDIRECT
SCAN_CODE
<codeImage,
codePayLoad>
In-Store
(QR)
Till MachineNot Applicable SCAN_CODE
<codeImage,
codePayLoad>

To make a SWISH payment, you'll need to provide the following data at minimum when calling our /v1/payment-charges API:

Data FieldRequiredDescription
paymentMethodYSWISH
amount.valueYThe amount to be paid in the smallest units of the currency used.
amount.currencyYSEK
consumer.nameYFull name of the consumer
consumer.countryYThe country where the consumer is shopping
authenticationSettings: REDIRECT
settings.returnUrl
YAdd the url where the consumer should be redirected to after they complete the payment.
merchantPaymentChargeReferenceY(Recommended) add your internal reference id for the payment in this field.
webhooksUrlIf you want to override your pre-configured webhooks endpoint, you can receive webhooks for this payment here.

Request

POST /v1/payment-charges

{
    "paymentMethod": "SWISH",
    "amount": {
        "value": 1400,
        "currency": "SEK"
    },
    "consumer": {
        "name": "ReemijjjKKK ",
        "email": "[email protected]",
        "country": "SE"
    },
    "order": {
        "orderItems": [
            {
                "name": "product name2",
                "quantity": 14,
                "amount": 5000
            }
        ]
    },
    "authenticationSettings": [
          {
            "type": "APP_INTENT",
            "settings": {
                "mobileIntentUri": "flipkart://search?q=laptop"
            }
        }
      
           {
            "type": "REDIRECT",
            "settings": {
                "returnUrl": "https://amazon.com"
            }
        }      
        
    ],
    "paymentDescriptor": "for demo",
     "webhooksUrl": "https://paydrive-dev.giroops.com/sinkhole.php"
}

Response

You'll receive one of our standard payment charge responses (see potential responses in the API Reference)

{
    "id": "charge_hnTj1DoZlwBwACU0Y0XGw",
    "paymentMethod": "SWISH",
    "paymentMedium": "ECOMMERCE",
    "scheduleType": "UNSCHEDULED",
    "instrumentId": "instr_auij0FJYiBiYDFPe5gpzv",
    "currency": "SEK",
    "country": "SE",
    "paymentDescriptor": "for demo",
    "status": "AUTHENTICATION_PENDING",
    "consumer": {
        "name": "ReemijjjKKK ",
        "email": "[email protected]",
        "country": "SE"
    },
    "order": {
        "orderItems": [
            {
                "name": "product name2",
                "quantity": 14,
                "amount": 5000
            }
        ],
        "industryData": []
    },
    "authenticationMethods": [
        {
            "details": {
                "requestUrl": "https://authman.qa.lp-pl.ppro.com/v0/pages/?redirection_token=eyJhbGciOiJIUzUxMiJ9.eyJzZXNzaW9uIjp7InIiOiJjaGFyZ2VfaG5UajFEb1psd0J3QUNVMFkwWEd3IiwicyI6Imh0dHBzOi8vYW1hem9uLmNvbSIsImYiOiJodHRwczovL2FtYXpvbi5jb20_aXNGYWlsdXJlPXRydWUiLCJtIjoiMTIzMDQ3NDE5NyJ9fQ.w3EKJ6hbR-MzYMRYJBOL62PxOO5y4ionuroADOFV9jhXFAfdLkcuNFvRVdtlkijzWU4iHUXx175YHoZEw29KEA",
                "requestMethod": "GET"
            },
            "type": "REDIRECT"
        },
        {
            "details": {
                "mobileIntentUri": "swish://paymentrequest?token=AAAAAAAAAAAAABYAAEUlGHvm1-2gXEH-&callbackurl=https%3A%2F%2Famazon.com"
            },
            "type": "APP_INTENT"
        },
        {
            "details": {
                "codeType": "QR",
                "codeImage": "<BASE-64 encoded QR String>",
                "codePayload": "DAAAAAAAAAAAAABYAAEUlGHvm1-2gXEH-"
            },
            "type": "SCAN_CODE"
        }
    ],
    "authorizations": [
        {
            "id": "authz_eCWJ4r6xg9fbmxP2zMU18",
            "amount": 1000,
            "status": "AUTHENTICATION_PENDING",
            "createdAt": "2024-11-07T08:40:01.428Z",
            "updatedAt": "2024-11-07T08:40:01.428Z"
        }
    ],
    "captures": [],
    "refunds": [],
    "voids": [],
    "createdAt": "2024-11-07T08:40:00.796Z",
    "updatedAt": "2024-11-07T08:40:01.428Z",
    "_links": {
        "authorizations": {
            "href": "/v1/payment-charges/charge_hnTj1DoZlwBwACU0Y0XGw/authorizations"
        },
        "captures": {
            "href": "/v1/payment-charges/charge_hnTj1DoZlwBwACU0Y0XGw/captures"
        },
        "refunds": {
            "href": "/v1/payment-charges/charge_hnTj1DoZlwBwACU0Y0XGw/refunds"
        },
        "voids": {
            "href": "/v1/payment-charges/charge_hnTj1DoZlwBwACU0Y0XGw/voids"
        }
    }

Consumer Authentication

SWISH requires a consumer authentication step before the payment is authorized and captured.

In your response to your charge creation request, you will receive the authenticationMethods list with type as APP_INTENT,REDIRECREDIRECT,SCAN_CODE. Depending on the intended consumer channel and experience, the consumer will either be redirected to the Merchant App or presented with a QR code. These processes are outlined in the table above (see Consumer Journey Mapping for Request and Response) . The consumer will navigate to their SWISH app and confirm the payment.

The payment charge will remain in the AUTHENTICATION_PENDING state until the consumer confirms the payment in their app. After this, the charge will transition to the CAPTURED state.

Handling the Payment Result


Depending on the intended consumer channel and experience, the consumer will either be redirected to the Merchant App or presented with a QR code. These processes are outlined in the table above (see Consumer Journey Mapping for Request and Response). The response flow varies based on whether the authorization is successful, fails, or if the user cancels or aborts the flow.

If the consumer fails to authenticate the payment within the timeout window, the charge will transition to the DISCARDED state.

You can receive webhooks for all changes to the payment charge state and use these to build business logic such as delivering the goods when the charge is CAPTURED.

Recurring Payments

Not Supported by Swish , expected to be launched by Q1 2025