PostFinance Card & eFinance

Via the Saferpay JSON API, payments can be handled through PostFinance Card and eFinance.


Acceptance of PostFinance Card & eFinance requires:

  • A corresponding license and thus a valid identification with a username and password for the Saferpay system.

  • A valid contract with PostFinance.

Supported features



Secure Card Data

Recurring Payments

3D Secure

Dynamic Currency Conversion (DCC)

Mail Phone Order



The general integration of PostFinance eFinance/Card can be done via the Payment Page -However, other features require a different path. See further down in this chapter- and requires the following things to be noted:

PostFinance transactions are only valid for 30 days and must be captured in this time frame. After 30 days, the reservation will void and the authorized amount can no longer be transferred! However you have a guaranteed payout, within these 30 days!

Refunds may only be executed up to 14 months, after the original transaction.

Storage in the Secure Card Data Store

If you intend on saving PostFinance Card-data for later use, Saferpay provides the possibility of storing PostFinance’s Postcard inside the Saferpay Secure Card store. For this, the following requirements must be met:

  • Activation of Saferpay Secure Card Data in the Saferpay merchant account.

  • The feature must also be activated on PostFinance side.

  • Only the PostFinance Card is supported, not eFinance!

Alias Insert Request

The registration is done via the Saferpay Alias Store. Within the Alias Insert Request, you need to specify the parameter Type with the value POSTFINANCE, which signals, that you want to save Postcard payment means.

  "RegisterAlias": {
    "IdGenerator": "RANDOM_UNIQUE"
  "Type": "POSTFINANCE",
  "LanguageCode": "en",
  "RequestHeader": {
    "SpecVersion": "1.14",
    "CustomerId": "242225",
    "RequestId": "5f543be575b3f3ecff3214257ac6978a",
    "RetryIndicator": 0,
    "ClientInfo": {
      "ShopInfo": "My Shop",
      "OsInfo": "Windows Server 2013"
  "ReturnUrls": {
    "Success": "",
    "Fail": "",
    "Abort": ""

Redirect to PostFinance

The RedirectUrl then needs to be opened inside an iFrame, as a redirect, or lightbox.

Unlike with credit cards, PostFinance requires the card holder to agree to registration on its site, so a redirect will be done!

1 - Confirmation dialogue on PostFinance:

2 - After clicking on Next, card holders are asked to enter their card ID:

3 - Card holders must then confirm registration by entering a TAN. This is created using a card reader:

4 - After registration, the result is displayed to the customer, who is then returned to the shop:

Redirect to Shop

Once this process is done, the user gets redirected towards one of the previously defined ReturnUrls, depending on the outcome.

Alias Assert Insert

The merchant system then needs to execute the Alias Assert Insert Request, in order to gather the alias and other important payment mean details.

  "Token": "67tdpr8keb3ky3y6728kqv4gk",
  "RequestHeader": {
    "SpecVersion": "1.14",
    "CustomerId": "242225",
    "RequestId": "22c449e9cb06a227491c0f18532d9ef1",
    "RetryIndicator": 0,
    "ClientInfo": {
      "ShopInfo": "My Shop",
      "OsInfo": "Windows Server 2013"

Using the Alias

Once you have obtained the alias, you can go ahead and execute your recurring/subsequent transaction using the Transaction AuthorizeDirect request. The alias is set within the PaymentMeans.Alias container, but remember, that this transaction, like all PostFinance transactions, also must be captured for the money to flow.

Web View Web-to-App switch

If you are integrating PostFinance inisde a web-view, you may have to specifically configure your view, in order for the PostFinance app to open.

Here is example-code on how this is achieved.

This code has been directly provided by PostFinance. If you have any questions, please ask PostFinance for help.

private fun setUpWebViewClient() {
        binding.webView.webViewClient = object : WebViewClient() {
            override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
                Log.d(, "shouldOverrideUrlLoading: $url")
                if(url?.contains("") == true) {
                    startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)))
                    return true
                return false
            override fun onPageFinished(view: WebView?, url: String?) = onLoadingFinished()
            override fun onReceivedError(
                view: WebView?,
                request: WebResourceRequest?,
                error: WebResourceError?
            ) = onLoadingFinished()


Please refer to this chapter, if you want to test PostFinance.

Last updated