> ## Documentation Index
> Fetch the complete documentation index at: https://dokumentation.websale.de/llms.txt
> Use this file to discover all available pages before exploring further.

# Payment methods

> How a payment method is created in the shop.config, when it is offered, how it appears grayed out, which additional inputs are possible, and which parameters the individual payment methods bring along.

Payment methods are the part of the `shop.config` with the most sections. This is because each payment method gets its own section, all sections share the same set of standard parameters, and some payment methods bring along their own additional parameters.

This page is therefore structured from the inside out. First, the common schema of all payment method sections. Then the standard parameters that may appear in each of these sections. After that, the four subsections and the two central dependency sections that let you control availability more finely. Finally, the special features of the individual payment methods and the accompanying sections for credit checks, credit card types, and error messages from service providers.

Reference: Shop configuration shop.config, overview of all sections

## The `PaymentXXX-Txt` schema

Each payment method is configured in its own section whose name follows the pattern `PaymentXXX-Txt`. `XXX` stands for the identifier of the payment method. For SOFORT Überweisung, this results in `PaymentDIRECTebanking-Txt`; for cash on delivery, `PaymentCashOnDelivery-Txt`.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<PaymentCashOnDelivery-Txt>
   Allow            = yes
   Name             = Nachnahme
   NameSuffix       = zzgl. ~Cost~ ~WS-Currency~ Nachnahmegebühr
   Img              = logo-nachnahme.png
   Cost-List        = (0:5.90)
   BillCountry-Rule = AllowCountries
   BillCountry-List = DEU
</PaymentCashOnDelivery-Txt>
```

### When a section is read at all

Before any further parameter is evaluated, the kernel checks three things. If one of these checks fails, the entire section is discarded without any message appearing.

| Condition | Behavior if not met |
| - | - |
| `Name` is filled | The payment method isn't activated, even with `Allow = yes` |
| `Allow = yes` | The payment method isn't activated |
| `TestMode` matches the shop mode | A section with `TestMode = yes` is only read in payment method test mode |

> [!NOTE]
>
> If both a test section and a production section for the same payment method are in the configuration and test mode is active, the test section wins. The production section is then no longer read.

For all payment methods that run via online clearing, a fourth condition applies. If the corresponding clearing isn't enabled for the shop, the payment method is deactivated, even if the section is completely and correctly filled in. This affects PayPal, iDEAL, giropay online transfer, SOFORT Überweisung, TWINT, Apple Pay, and Google Pay, among others. Enabling isn't a setting in the `shop.config`; it is done by WEBSALE AG.

## Standard parameters

The following parameters are allowed in every `PaymentXXX-Txt` section. They're grouped by task here, because alphabetical order hides the relationship between parameters that belong together.

### Basic setting and display

| Parameter | Purpose | Values |
| - | - | - |
| `Allow` | Offer the payment method in the shop | `yes`, `no`. Default: `no` |
| `TestMode` | Section applies only in payment method test mode | `yes`, `no`. Default: `no` |
| `Name` | Name of the payment method. Required, see above | Text |
| `NameSuffix` | Additional text for the payment method, with local tags | see below |
| `Img` | Icon, by default from `../../navigation/grafiken/` | File name, for example `logo-paymentXYZ.jpg` |
| `Link` | Link with further information about the payment method | URL |
| `Confirm-Txt` | Text on the confirmation page | Text |
| `Dependencies` | Free note text about other dependencies | Text, see note below |
| `DisplayInList-Flag` | Show the payment method in the global list of available payment methods | `yes`, `no`. Default: `yes` |
| `RadioOnClick` | JavaScript when clicking the radio button | for example `selectPayment(~ID~);` |
| `ImgOnClick` | JavaScript when clicking the icon | for example `selectPaymentImage('~ID~');` |

`RadioOnClick` and `ImgOnClick` only take effect if the payment method selection is implemented with DIV containers. In `RadioOnClick`, the local tags `RadiobuttonID` and `ID` are available; in `ImgOnClick`, the tags `Link` and `ID`.

> [!NOTE]
>
> If `Dependencies` contains HTML, `WS-TplComment` must be prepended for technical reasons, for example like this:
>
> ```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
> Dependencies = {WS-TplComment} {/WS-TplComment} <div class="alert">Nur bis 100.00 EUR gültig.</div>
> ```

#### Local tags in `NameSuffix`

| Tag | Output |
| - | - |
| `WS-Currency` | Currency |
| `WS-CurrencySymbol` | Currency symbol |
| `Cost` | Cost of the payment method |
| `GrossCost` | Gross cost of the payment method |
| `NetCost` | Net cost of the payment method |
| `Discount` | Granted discount as an absolute value |
| `DiscountRate` | Granted discount as a percentage |
| `UserPaymentCostDiscountRate` | Customer-specific discount on payment costs, as a percentage |
| `UserPaymentCostDiscount` | Customer-specific discount on payment costs, absolute |
| `UserPaymentCostDiscountNet` | The same discount as a net amount |
| `UserPaymentCostDiscountGross` | The same discount as a gross amount |
| `AltCurrencyCost` | Cost in the alternative currency |
| `AltCurrencyNetCost` | Net cost in the alternative currency |
| `AltCurrencyGrossCost` | Gross cost in the alternative currency |
| `AltCurrencyISO` | ISO code of the alternative currency |
| `AltCurrencySymbol` | Symbol of the alternative currency |

### Costs and discounts

| Parameter | Purpose | Values |
| - | - | - |
| `Cost` | Label of the payment costs, only for the order data | Text |
| `Cost-List` | Costs depending on merchandise value, absolute or as a percentage | see below |
| `Discount` | Label of the discount for display in the order data | Text, for example `Zahlungsartenrabatt` |
| `Discount-Value` | Discount of the payment method as a percentage of the total merchandise value | for example `3` |
| `UserDiscount-Allow` | Allow a customer-specific discount or waiver on payment costs | `yes`, `no`. Default: `yes` |
| `TotalSumAddition` | Safety surcharge for authorization via online clearing | Amount, for example `0.01` |

`Cost-List` is written as a sequence of tiers in parentheses. Before the colon is the merchandise value from which the tier applies; after it, the costs. A trailing percent sign turns the absolute amount into a percentage of the merchandise value.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
# ab 0 Euro: 3 Euro, ab 10 Euro: 1 Euro, ab 30 Euro: 3 Prozent, ab 100 Euro: kostenlos
Cost-List = (0:3)(10:1)(30:3%)(100:0)
```

Up to 500 tiers are possible.

`TotalSumAddition` absorbs rounding differences. If the payment is only authorized and the merchandise management system later wants to collect one cent more than was authorized, this fails without the surcharge.

### Availability by amount and weight

| Parameter | The payment method is offered if |
| - | - |
| `MinOrder-Value` | this total merchandise value is reached |
| `MaxOrder-Value` | this total merchandise value isn't exceeded |
| `MaxOrderForNewUser-Value` | for new customers without a customer number, this value isn't exceeded |
| `MaxOrderForReseller-Value` | for resellers, this value isn't exceeded |
| `MinTotal-Value` | this grand total is reached |
| `MaxTotal-Value` | this grand total isn't exceeded |
| `MinWeight-Value` | this total weight is reached |
| `MaxWeight-Value` | this total weight isn't exceeded |

A fixed order determines which maximum value actually applies. First `MaxOrderForNewUser-Value`, if the buyer has no customer number and the value is set. Then `MaxOrderForReseller-Value`, if the buyer is a reseller and the value is set. Then the value stored in the customer account, if `MaxOrderForUserAccount-Allow` is enabled. Only after that `MaxOrder-Value`.

| Parameter | Purpose | Values |
| - | - | - |
| `MaxOrderForUserAccount-Allow` | Use the maximum order value stored in the customer account | `yes`, `no`. Default: `no` |
| `IgnoreMaxOrderValueForReseller-Allow` | Skip the maximum value check entirely for resellers | `yes`, `no`. Default: `no` |

> [!NOTE]
>
> `MaxOrderForUserAccount-Allow` and `IgnoreMaxOrderValueForReseller-Allow` aren't described in the previous documentation. They're evaluated by the kernel and have been added in this migration.

### Availability by country

| Parameter | Purpose | Values |
| - | - | - |
| `BillCountry-Rule` | Rule for the country of the billing address | `AllowCountries`, `DenyCountries` |
| `BillCountry-List` | Countries for the billing address rule | comma-separated 3-letter ISO codes |
| `DeliveryCountry-Rule` | Rule for the country of the different delivery address | `AllowCountries`, `DenyCountries` |
| `DeliveryCountry-List` | Countries for the delivery address rule | comma-separated 3-letter ISO codes |

Any value other than `AllowCountries` acts like `DenyCountries`, including an empty one. If both rule and list remain empty, no country restriction applies.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
# Zahlungsart in allen Ländern, typisch für Kreditkarte
BillCountry-Rule     =
BillCountry-List     =
DeliveryCountry-Rule =
DeliveryCountry-List =

# nur Rechnungs- und Lieferadresse in Deutschland, typisch für Nachnahme
BillCountry-Rule     = AllowCountries
BillCountry-List     = DEU
DeliveryCountry-Rule = AllowCountries
DeliveryCountry-List = DEU

# nur Rechnungsadresse in Deutschland, Lieferadresse unerheblich, typisch für Lastschrift
BillCountry-Rule     = AllowCountries
BillCountry-List     = DEU
DeliveryCountry-Rule =
DeliveryCountry-List =

# Lieferung nach DACH
DeliveryCountry-Rule = AllowCountries
DeliveryCountry-List = DEU,CHE,AUT
```

### Availability by customer

| Parameter | Purpose | Values |
| - | - | - |
| `NewUser-Allow` | Offer the payment method to new customers without a customer number | `yes`, `no`. Default: `yes` |
| `GuestOrder-Allow` | Offer the payment method to guest buyers | `yes`, `no`. Default: `yes` |
| `Warranty` | Offer the payment method only to buyers with one of these authorization IDs | comma-separated list |
| `InfoScore-Allow` | Use the Infoscore credit check for this payment method | `yes`, `no`. Default: `no` |
| `CreditPass-Allow` | Use the creditPass credit check for this payment method | `yes`, `no`. Default: `no` |
| `EmailAddress` | Different recipient of the order notification to the seller | Email address |

### Availability by basket contents

| Parameter | The payment method isn't offered if | Values |
| - | - | - |
| `DenyForDownload` | at least one download product is in the basket | `yes`, `no`. Default: `no` |
| `DenyWishlist` | at least one product from a wish list is in the basket | `yes`, `no`. Default: `no` |
| `DenyForInventoryState` | at least one product with this stock level is in the basket | `green`, `yellow`, `red`, comma-separated |
| `HideZeroTotal-Allow` | the grand total is zero | `yes`, `no`. Default: `no` |
| `DenyDifferentDeliveryAddress` | a different delivery address was specified | `yes`, `no`. Default: `no` |
| `DenyDifferentDeliveryAddressForNewUser` | a new customer specified a different delivery address | `yes`, `no`. Default: `no` |

| Parameter | The payment method is offered if | Values |
| - | - | - |
| `InstantVoucherProducts-Allow` | at least one purchase voucher is in the basket | `yes`, `no`. Default: `no` |
| `eBooks-Allow` | at least one eBook is in the basket | `yes`, `no`. Default: `no` |

> [!NOTE]
>
> `eBooks-Allow` isn't described as a parameter in the previous documentation, even though rejection reason 20 refers to it. It has been added in this migration.

### Availability by shipping method

| Parameter | Purpose | Values |
| - | - | - |
| `DelivererID-List` | List of shipping methods for which this payment method is offered | IDs from the `+Deliverer` sections |

Reference: Section +Deliverer

### Additional inputs for the payment method

| Parameter | Purpose | Values |
| - | - | - |
| `InputSuffix1` to `InputSuffix3` | Label of an additional input field for the payment method | Text |
| `*InputSuffix1` to `*InputSuffix3` | The same, but the field is then a required field | Text |

> [!NOTE]
>
> These six parameters aren't described in the previous documentation and have been added in this migration. The leading asterisk is part of the parameter name. For each number, the kernel first looks for the variant with an asterisk and only if it's missing, for the variant without. If both are in the configuration, the variant with the asterisk wins and the field is a required field.

For more extensive additional inputs with selection lists, country dependency, and a required field message, use the `+CountryRule` subsections instead.

### Dependencies by ID

| Parameter | Purpose |
| - | - |
| `+UsePaymentEnvironmentDependency-ID` | links the payment method to a rule from `PaymentEnvironmentDependencies-Definitions` |
| `+UseProductDependency-ID` | links the payment method to a rule from `PaymentProductDependencies-Definitions` |

### Display as deactivated

| Parameter | Purpose | Values |
| - | - | - |
| `ShowDisabled-Allow` | Show an unavailable payment method grayed out | `never`, `always`, or a list of rejection reasons. Default: `never` |

The kernel evaluates this parameter in three stages. An empty value and `never` switch the display off. `always` always switches it on. **Any other value is read as a comma-separated list of rejection reasons**, including a typo. If you write `allways`, for example, you don't get an error message, but a list with the single unknown entry `allways`, which doesn't match any rejection reason.

## `ShowDisabled-Txt`

This subsection of a `PaymentXXX-Txt` section contains the note texts that appear for a grayed-out payment method. You can specify a separate text for each rejection reason, plus a text under the key `default` for all reasons without their own text.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<PaymentXXX-Txt>
   ...
   ShowDisabled-Allow = 1,2,3
   <ShowDisabled-Txt>
      1       = Diese Zahlungsart ist für Download-Produkte nicht möglich.
      2       = Diese Zahlungsart steht für Ihre Bestellung nicht zur Verfügung.
      3       = Diese Zahlungsart steht für Ihre Bestellung nicht zur Verfügung.
      default = Diese Zahlungsart steht leider nicht zur Verfügung.
   </ShowDisabled-Txt>
   ...
</PaymentXXX-Txt>
```

> [!NOTE]
>
> A subsection of the same name also exists for shipping methods, there within `DelivererShowDisabled-Definitions`.

### Rejection reasons

| Number | Reason |
| - | - |
| 1 | Download product in the basket, payment method not allowed for it |
| 2 | Infoscore check negative |
| 3 | creditPass check negative |
| 4 | Billing country dependency not met, see `BillCountry-Rule` and `BillCountry-List` |
| 5 | Delivery country dependency not met, see `DeliveryCountry-Rule` and `DeliveryCountry-List` |
| 6 | Minimum order value as merchandise value not reached, see `MinOrder-Value` |
| 7 | Maximum order value as merchandise value exceeded, see `MaxOrder-Value` |
| 8 | Not available for new customers, see `NewUser-Allow` |
| 9 | Customer isn't assigned to the payment method, see `Warranty` |
| 10 | Wish list order, payment method not permitted for it, see `DenyWishlist` |
| 11 | Payment method not available due to the delivery status of some products |
| 12 | Grand total is zero, see `HideZeroTotal-Allow` |
| 13 | Authorization not present |
| 14 | Minimum order value as grand total not reached, see `MinTotal-Value` |
| 15 | Maximum order value as grand total exceeded, see `MaxTotal-Value` |
| 16 | Minimum weight not reached, see `MinWeight-Value` |
| 17 | Maximum weight exceeded, see `MaxWeight-Value` |
| 18 | At least one product in the basket can't be ordered with this payment method |
| 19 | Address filter applies, see subsection `AddressFilter` |
| 20 | eBooks in the basket, payment method not available for them |
| 21 | Different delivery address, payment method not allowed for it, see `DenyDifferentDeliveryAddress` |
| 22 | Printable purchase voucher in the basket, see `InstantVoucherProducts-Allow` |
| 23 | Payment method Paymorrow finally rejected, deactivated for the session |
| 24 | New customer with a different delivery address, see `DenyDifferentDeliveryAddressForNewUser` |
| 25 | Error with invoice via Paymorrow, for example missing legal form |
| 26 | Error with direct debit via Paymorrow, for example missing legal form |
| 27 | easyCredit installment purchase isn't available |
| 28 | Payment method isn't available to guest buyers, see `GuestOrder-Allow` |
| 29 | Payment method isn't available for this device, see `PaymentEnvironmentDependencies-Definitions` |
| 30 | Payment method isn't available for these products, see `PaymentProductDependencies-Definitions` |

## `AddressFilter`

With this subsection, you make the payment method dependent on a specific input in the **billing address**. A typical use is a free address field containing, for example, a customer group or a sales channel.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<PaymentXXX-Txt>
   ...
   <AddressFilter>
      Allow              = yes
      TechnicalFieldName = Suffix12
      Rule               = Allow
      Values-List        = B2B,Grosskunde
      Country-List       = DEU,AUT
   </AddressFilter>
   ...
</PaymentXXX-Txt>
```

| Parameter | Purpose | Values |
| - | - | - |
| `Allow` | Use the address filter | `yes`, `no`. Default: `no` |
| `TechnicalFieldName` | Technical field name from `AddressFields-Txt`. Billing address fields only | for example `Suffix12` |
| `Rule` | Offer or exclude the payment method on a match | `Allow`, `Deny` |
| `Values-List` | Inputs to which the rule applies. `*` is allowed | comma-separated list, maximum 255 characters |
| `Country-List` | Optional. Apply the filter only if the billing country is in the list | comma-separated country codes |

> [!WARNING]
>
> The default value of `Rule` is **`Allow`**, not `Deny`. The kernel sets `Allow` as the initial value and only switches to `Deny` if exactly this value is in the configuration. The previous documentation stated `Deny` as the default. This has been corrected in this migration. If you relied on the old default, you get exactly the opposite behavior.

The filter switches itself off if `TechnicalFieldName` is empty or `Values-List` is empty. In both cases, the payment method remains available without any message appearing.

If the buyer didn't fill in the field, the filter doesn't apply either. If the filter should always apply, the address field must be a required field.

> [!NOTE]
>
> The `AddressFilter` section may appear **multiple times** within a `PaymentXXX-Txt` section. The kernel reads the blocks one after another. The previous documentation describes it only in the singular.

Reference: Section AddressFields-Txt

## `+CountryRule`

With these subsections, you request additional information for a payment method, for example a phone number for the clearing service provider or a consent checkbox. Up to ten `+CountryRule` sections are possible per `PaymentXXX-Txt` section. The order in the configuration determines the order in the shop.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<PaymentXXX-Txt>
   ...
   <+CountryRule>
      ID                          = kundengruppe
      FieldDescr-Txt              = Ihre Kundengruppe
      Type                        = listbox
      CountryList-ISO             = DEU,AUT
      UseAddressInput             = customer
      UserDependency              = company
      Required                    = yes
      RequiredErrorMessage-Txt    = Bitte wählen Sie Ihre Kundengruppe aus.
      MaxLength                   = 64
      HideInReadableOrder-Allow   = no
      SaveInputForNextOrder-Allow = yes
      <+listentry>
         Entry-Txt = Bitte wählen Sie
      </+listentry>
      <+listentry>
         Entry-Txt = Handel
         ID        = 100
      </+listentry>
   </+CountryRule>
</PaymentXXX-Txt>
```

> [!WARNING]
>
> If you request additional information for the payment method, the error message `PaymentInputSuffix` must be defined in the `NotifyMessages-Txt` section. If it's missing, the required field check gives no visible feedback.

### Parameters

| Parameter | Purpose | Values |
| - | - | - |
| `ID` | Technical ID of the additional information, maximum 64 characters | see below on reserved IDs |
| `FieldDescr-Txt` | Text before the input field, also the label in the readable order | Text, maximum 4096 characters |
| `Type` | Type of input field | `input`, `listbox`, `dateofbirth`, `checkbox`. Default: `input` |
| `MaxLength` | Maximum length of the input | Number up to 128 |
| `Required` | Required field | `yes`, `no`. Default: `no` |
| `RequiredErrorMessage-Txt` | Error message for an empty required field | Text |
| `CountryList-ISO` | Countries for which the additional information is requested | comma-separated 3-letter ISO codes or `*` |
| `UseAddressInput` | Which country is used for the check | `customer`, `delivery`, `onlydelivery`. Default: `customer` |
| `UserDependency` | Dependency on the company name field | `no`, `private`, `company`. Default: `no` |
| `HideInReadableOrder-Allow` | Keep the input out of the readable order | `yes`, `no`. Default: `no` |
| `SaveInputForNextOrder-Allow` | Save the input in the customer account for the next order | `yes`, `no`. Default: `yes` |

`UseAddressInput` determines which address supplies the country. `customer` uses the billing address. `delivery` uses the delivery address if one was chosen, otherwise the billing address. `onlydelivery` uses only the delivery address and doesn't request anything at all if no different delivery address was chosen.

`UserDependency` refers to the company name field. `company` only requests the input if a company name is entered. `private` only requests it if none is entered. Any value other than `private` and `company` acts like `no`.

> [!NOTE]
>
> Several peculiarities of the evaluation aren't described in the previous documentation and are added here.
>
> `MaxLength` is silently set to the internal maximum for a value less than or equal to zero and for a value above that maximum. There is no error message.
>
> `Type = checkbox` fixes `MaxLength` at 10, because only `checked` or nothing is stored as the value.
>
> `Type = dateofbirth` fixes `UseAddressInput` to `customer`. The input is additionally saved in the customer data.
>
> Any value of `Type` other than `listbox`, `dateofbirth`, or `checkbox` results in `input`.

Each `Type` has a technical ID that can be queried in the template using the `PAY-` tags.

| Value | Technical ID |
| - | - |
| `listbox` | 0 |
| `input` | 1 |
| `dateofbirth` | 2 |
| `checkbox` | 3 |

### `+listentry`

You define the entries of a selection list in `+listentry` subsections. Up to 100 entries are possible. The section is only needed if `Type = listbox` is set.

| Parameter | Purpose | Values |
| - | - | - |
| `Entry-Txt` | Displayed text, also appears in the readable order | Text, maximum 128 characters |
| `ID` | Technical value, appears in the technical order | Text, maximum 64 characters |

If you omit `ID` for an entry, you get a selection option without a technical value, for example for the entry "Please select".

> [!WARNING]
>
> The value of `ID` is transmitted to the external system if the additional information is used for a payment or clearing procedure.

### Reserved IDs

All IDs with the prefix `ws_` are reserved. Additional information with these IDs is evaluated by certain clearing and credit check procedures. For these, the kernel overrides part of your configuration so that the procedure receives the data in the expected form.

| ID | Purpose | Enforced settings |
| - | - | - |
| `ws_clearing_easycredit` | Checkbox for consent and data transmission for easyCredit installment purchase | none |
| `ws_clearing_computop_paypal_state` | "State" parameter for PayPal via Computop | `UseAddressInput = delivery` |
| `ws_clearing_computop_cc_state` | "State" parameter for credit card via Computop, required for 3-D Secure 2.0 | `UseAddressInput = delivery` |
| `ws_clearing_paypal_state` | "State" parameter for PayPal in the direct integration | `UseAddressInput = delivery` |
| `ws_clearing_computop_clickandbuy_customer_state` | "State" of the billing address for ClickAndBuy via Computop | `UseAddressInput = customer` |
| `ws_clearing_computop_clickandbuy_delivery_state` | "State" of the delivery address for ClickAndBuy via Computop | `UseAddressInput = onlydelivery` |
| `ws_clearing_computop_klarna_gender` | Gender for Klarna via Computop | `UseAddressInput = customer`, `CountryList-ISO = *`, `UserDependency = private`, `Required = yes` |
| `ws_clearing_computop_klarna_ssn` | Social security number for Klarna via Computop | `UseAddressInput = customer` |
| `ws_clearing_computop_klarna_salary` | Income information for Klarna via Computop | `UseAddressInput = customer` |
| `ws_clearing_computop_klarna_mobilenr` | Mobile number for Klarna via Computop | `UseAddressInput = customer`, `CountryList-ISO = *`, `Required = yes` |
| `ws_clearing_computop_klarna_reference` | Reference for Klarna via Computop | `UseAddressInput = customer`, `CountryList-ISO = *`, `UserDependency = company`, `Required = yes` |
| `ws_clearing_computop_potfinance_accowner` | Account holder for PostFinance via Computop | `UseAddressInput = customer`, `Type = input`, `CountryList-ISO = *`, `Required = yes` |
| `ws_clearing_paymorrow_phone` | "Phone" parameter for Paymorrow | `UseAddressInput = customer`, `CountryList-ISO = *`, `Required = yes`, only without an existing phone number |
| `ws_clearing_ppc_invoice_phone` | Phone number for purchase on invoice via RatePay and PayPal Checkout | `UseAddressInput = customer`, `CountryList-ISO = *`, `Required = yes`, only without an existing phone number |

> [!NOTE]
>
> The previous documentation lists only seven of these IDs and states no enforced settings for `ws_clearing_easycredit` and `ws_clearing_ppc_invoice_phone`. The table has been completed in this migration based on the kernel.
>
> The two entries with the addition "only without an existing phone number" aren't requested at all if the billing address already contains a phone or mobile number. The required field is then omitted.

## `PaymentEnvironmentDependencies-Definitions`

Here you specify that a payment method is only offered on certain devices. The basis is the user agent that the buyer's browser transmits. The assignment to the payment method is made via the `+UsePaymentEnvironmentDependency-ID` parameter in the `PaymentXXX-Txt` section.

The section may appear only **once** in the `shop.config` and needs at least one `+EnvironmentDependency` subsection.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<PaymentEnvironmentDependencies-Definitions>
   <+EnvironmentDependency>
      ID               = useapple
      ShowDisabled-Txt = Diese Zahlungsart steht auf Ihrem Gerät nicht zur Verfügung.
      <+DependencyGroup>
         <+Dependency>
            Field = useragent
            Type  = contains
            Value = Safari
         </+Dependency>
      </+DependencyGroup>
   </+EnvironmentDependency>
</PaymentEnvironmentDependencies-Definitions>
```

> [!WARNING]
>
> The conditions in this section make a payment method **available** when they're met. The reverse case can't be configured. A condition that applies can't exclude a payment method.

| Parameter | Purpose | Values |
| - | - | - |
| `+EnvironmentDependency` | Independent subsection, not linked to others | |
| `ID` | Unique ID for the assignment to the payment method | for example `useapple` |
| `ShowDisabled-Txt` | Text for the grayed-out display | Text |
| `+DependencyGroup` | Multiple of these sections are linked with **or** | |
| `+Dependency` | Multiple of these sections within a group are linked with **and** | |
| `Field` | Technical field name of the checked value | `useragent` |
| `Type` | Type of check | see below |
| `Value` | Checked value, only relevant for `value`, `contains`, `notcontains`, `greater`, and `smaller` | Text |

| `Type` | The condition is met if |
| - | - |
| `empty` | the field is empty |
| `filled` | the field is filled |
| `value` | the field value equals the value in `Value` |
| `contains` | the value from `Value` is part of the field |
| `notcontains` | the value from `Value` isn't part of the field |
| `greater` | the field value is greater than the value in `Value` |
| `smaller` | the field value is less than the value in `Value` |

Note the nesting. `+EnvironmentDependency` contains `+DependencyGroup`, which contains `+Dependency`.

## `PaymentProductDependencies-Definitions`

Here you specify that a payment method depends on the product index, the product number, or a free product data field. The assignment is made via `+UseProductDependency-ID` in the `PaymentXXX-Txt` section.

This section, too, may appear only **once** in the `shop.config` and needs at least one `+ProductDependency` subsection.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<PaymentProductDependencies-Definitions>
   <+ProductDependency>
      ProductDependency-ID = keine_sperrgut
      ShowDisabled-Txt     = Für Speditionsware steht diese Zahlungsart nicht zur Verfügung.
      <+DependencyGroup>
         <+Dependency>
            <+Condition>
               Field          = AF-Versandart
               Type           = notvalue
               Value          = Spedition
               SetBehavior    = Single
               BasketBehavior = match-all
            </+Condition>
         </+Dependency>
      </+DependencyGroup>
   </+ProductDependency>
</PaymentProductDependencies-Definitions>
```

> [!WARNING]
>
> As with the section for devices, the conditions make a payment method **available** when they're met. An exclusion can't be expressed. If you want to exclude a payment method for certain products, phrase the condition negatively, for example with `notvalue` or `notinlist`.

| Parameter | Purpose | Values |
| - | - | - |
| `+ProductDependency` | Independent subsection, not linked to others | |
| `ProductDependency-ID` | Unique ID for the assignment to the payment method | alphanumeric, hyphen, and underscore |
| `ShowDisabled-Txt` | Text for the grayed-out display. **Takes precedence** over the text from the payment method's `ShowDisabled-Txt` subsection | Text |
| `+DependencyGroup` | Multiple of these sections are linked with **or** | |
| `+Dependency` | Multiple of these sections within a group are linked with **and** | |
| `+Condition` | The actual condition | |
| `Field` | Checked field | `ProdIndex`, `ProdNumber`, or `AF-<free product field>` |
| `Type` | Type of check | see below |
| `Value` | Checked value, not relevant for `Type = empty` | Text |
| `SetBehavior` | Handling of set products | `asUnit`, `Single`. Default: `Single` |
| `BasketBehavior` | How many products in the basket must meet the condition | `match-all`, `match-once`. Default: `match-all` |

Free product fields carry the prefix `AF-`, for example `AF-DeliveryTime`. They must also be enabled for the basket in the `AdditionalProductFieldsInBasket` section.

| `Type` | The condition is met if |
| - | - |
| `empty` | the product data field is empty |
| `inlist` | the value from `Value` is contained in the list of `Field` |
| `notinlist` | the value from `Value` isn't contained in the list of `Field` |
| `value` | the field value exactly equals the value in `Value` |
| `notvalue` | the field value doesn't equal the value in `Value` |
| `prefix` | the field value starts with the value in `Value` |
| `notprefix` | the field value doesn't start with the value in `Value` |
| `includedinlist` | the value from `Value` is in the value list of the product data field |
| `notincludedinlist` | the value from `Value` isn't in the value list of the product data field |
| `greater` | the field value is greater than the value in `Value` |
| `smaller` | the field value is less than the value in `Value` |
| `matchsimplewildcard` | the field value matches the pattern in `Value` |
| `notmatchsimplewildcard` | the field value doesn't match the pattern in `Value` |

For `greater` and `smaller`, both values are converted to integers. A value that can't be converted is read as 0.

For `matchsimplewildcard` and `notmatchsimplewildcard`, `?` stands for exactly one arbitrary character at that position and `*` for any number of characters. The asterisk may only appear at the end.

> [!NOTE]
>
> In the source documentation, this section contained two errors that are corrected here. The note on nesting said `<+ProducttDependency>` with a double t. For the `BasketBehavior` parameter, the permitted value was given as `matche-once` instead of `match-once`.

## The individual payment methods

All of the following sections also understand all standard parameters from above. Only their own parameters are listed.

### Without their own parameters

These sections get by with the standard parameters.

| Section | Payment method |
| - | - |
| `PaymentBill-Txt` | Invoice. Depending on the provider, parameters are added in separate sections |
| `PaymentCashOnDelivery-Txt` | Cash on delivery |
| `PaymentAccount-Txt` | Customer account |
| `PaymentIDeal-Txt` | iDEAL |
| `PaymentOnlineTransfer-Txt` | giropay online transfer |
| `PaymentTWINT-Txt` | TWINT. Usually restricted with `BillCountry-List = CHE` |
| `PaymentUserDef1-Txt` to `PaymentUserDef5-Txt` | freely definable payment methods |

### `PaymentPrepayment-Txt`

Prepayment. The three parameters fill the display of the bank details.

| Parameter | Purpose |
| - | - |
| `TableHeader` | Title of the HTML table, for example `Bankverbindung` |
| `BankInfo1` | Text for the "Bank" element |
| `BankInfo2` | Text for the "Account no." element |

### `PaymentCreditCard-Txt`

Credit card. You also define the offered card types in the `Card1` to `Card5` sections.

| Parameter | Purpose | Values |
| - | - | - |
| `Holder` | Label for the "Cardholder" field | Text |
| `Number` | Label for the "Credit card number" field | Text |
| `Valid` | Label for the "Validity" field | Text |
| `UserDescr` | Freely selectable name of the card in the customer account | Text |
| `SelectCCNoSaveEntry` | Entry for "enter once, don't save" | Text |
| `SelectCCEntryPrefix` | Entry for saved credit card data | Text |
| `SelectCCSeparator` | Visual separator in the selection box | Text |
| `ShowCardDataAfterOnlineClearing` | Display of the card data in the order | `no`, `protected`, `unsafe`. Default: `no` |
| `CtopHostedCbDefChecked` | Preselect the checkbox for saving the card data in the Computop template | `yes`, `no` |
| `CtopHostedCustomField5` to `CtopHostedCustomField10` | CustomFields to the Computop Paygate | Text with tags |
| `ComputopChDesc` | Text on the credit card statement | maximum 30 characters |
| `ComputopClearingLinkValidForSeconds` | Validity period of the clearing link to Computop | Seconds. Default: 600 |
| `DummyItemAddition` | Dummy product for additional costs when integrated via PayPal Checkout | Product name |
| `LanguageCode` | Language code according to BCP 47 when integrated via PayPal Checkout | for example `de-DE` |

> [!WARNING]
>
> `ShowCardDataAfterOnlineClearing` determines whether credit card data becomes visible in the order.
>
> `no` doesn't display it and is the recommended setting.
>
> `protected` displays it exclusively in the encrypted Online Service Area.
>
> `unsafe` is intended exclusively for pseudo credit card numbers that the payment service provider generates and that are worthless without its integration. This setting may only be enabled in justified exceptional cases and after consultation with WEBSALE AG.

The content of the CustomFields is truncated to 50 characters after parsing and then UTF-8 encoded.

### `PaymentDebitNote-Txt`

Direct debit. This section covers three variants: classic direct debit, direct debit via Paymorrow, and direct debit via PayPal Checkout. Accordingly, not all parameters are relevant for every integration.

#### Input field labels

| Parameter | Field |
| - | - |
| `Owner` | Account holder |
| `IBAN` | IBAN |
| `BIC` | BIC |
| `Bank` | Bank |
| `Country` | Country |
| `AccountNbr` | Account number. Not needed with `SEPAMode = on` |
| `BankRoutingNbr` | Bank code. Not needed with `SEPAMode = on` |
| `UserDescr` | Customer's individual label for the bank details |
| `AccountDataNotProofed` | Error message if the bank details weren't verified |

#### Required fields and visibility

| Parameter | Purpose | Values |
| - | - | - |
| `BankRequired` | Bank name is a required field | `yes`, `no`. Default: `yes` |
| `UserDescrRequired` | Individual label is a required field | `yes`, `no`. Default: `no` |
| `BICRequired` | BIC is always a required field | `yes`, `no`. Default: `no` |
| `BICRequired-List` | Country codes for the country-dependent requirement. Only applies with `BICRequired = no` | comma-separated list |
| `BICRequired-ListType` | Requirement for the listed countries or for all others | `inList`, `notInList`. Default: `inList` |
| `BICVisible-List` | Country codes for the visibility of the BIC field | comma-separated list, 2-letter according to ISO 3166-2 |
| `BICVisible-ListType` | Display for the listed countries or for all others | `inList`, `notInList`. Default: `inList` |
| `BICVisibleEmptyIBAN` | Delete an entered BIC if the field is hidden by the country selection | `yes`, `no`. Default: `yes` |

#### SEPA

| Parameter | Purpose | Values |
| - | - | - |
| `SEPAMode` | Switch the SEPA procedure | `on`, `off`, `test`. Default: `off` |
| `SEPACountry-List` | Countries for the SEPA query | 2-letter according to ISO 3166-2 |
| `SEPACountry-Rule` | Rule for the country list | `AllowCountries`, `DenyCountries`. Default: `DenyCountries` |
| `SEPACreditorIdentifier` | Creditor identifier | Text |
| `SEPAMandateGeneratorPrefix` | Prefix of the automatically generated mandate reference | for example `DEU-` |
| `SEPAMandateGeneratorOffset` | Start value for the numeric part of the mandate reference | for example `320001` |

With `SEPAMandateGeneratorPrefix = DEU-` and `SEPAMandateGeneratorOffset = 320001`, the first generated mandate references are `DEU-320001`, `DEU-320002`, and so on.

> [!NOTE]
>
> In the source documentation, the example values of these two parameters were swapped. The offset was assigned `DEU-` and the prefix `320001`. This is corrected here.

#### Electronic direct debit

| Parameter | Purpose | Values |
| - | - | - |
| `CapturingDays` | Only for electronic direct debit. Contact WEBSALE AG for details | 0 to 6. Default: 0 |
| `CapturingMode` | Only for electronic direct debit | `auto`, `manual`. Default: `auto` |

#### Selection box for saved bank details

| Parameter | Purpose |
| - | - |
| `SelectAccountNoSaveEntry` | First entry, with which the data isn't saved |
| `SelectAccountEntryPrefix` | Entry for saved bank details |
| `SelectAccountSeparator` | Visual separator in the selection box |

#### Paymorrow

| Parameter | Purpose | Values |
| - | - | - |
| `B2BMode` | Request additional fields for business customers | `standard`, `advanced`. Default: `standard` |
| `PaymorrowRequestLanguageCode` | Language of the Paymorrow content | `de`, `en`. Default: `de` |
| `PaymorrowExternalNotifyMessagePrefix` | HTML before the external Paymorrow error message | for example `<div class="box_error">` |
| `PaymorrowExternalNotifyMessageSuffix` | HTML after the external Paymorrow error message | for example `</div>` |
| `PaymorrowLineItemDefaultName` | Fallback name if a product has no name | Text |
| `PaymorrowLineItemAdditionName` | Dummy product for additional costs | Text |
| `PaymorrowLineItemAdditionNumber` | Corresponding pseudo product number | Number |
| `PaymorrowLineItemPaymentCostName` | Dummy product for payment costs | Text |
| `PaymorrowLineItemPaymentCostNumber` | Corresponding pseudo product number | Number |
| `PaymorrowLineItemReductionName` | Dummy product for discounts | Text |
| `PaymorrowLineItemReductionNumber` | Corresponding pseudo product number | Number |
| `PaymorrowLineItemShippingName` | Dummy product for shipping costs | Text |
| `PaymorrowLineItemShippingNumber` | Corresponding pseudo product number | Number |
| `SalutationCodeFemale-List` | Female salutation codes from the salutation configuration | comma-separated list |
| `SalutationCodeMale-List` | Male salutation codes from the salutation configuration | comma-separated list |

A product name is mandatory for Paymorrow. `PaymorrowLineItemDefaultName` prevents a product without a name from blocking the purchase. The pseudo product numbers must not come from the number range of the products offered in the shop and must be agreed with the merchant.

Paymorrow's external error messages are output via the `MSG-PayDeliv_Notify` tag. Without prefix and suffix, they appear unstyled.

The salutation lists ensure that the correct salutation is preselected when the address is passed to Paymorrow.

### `PaymentDebitNote-Country`

Holds the plain-text names for the country codes of the direct debit. The parameter names are the ISO codes themselves; `other` is also possible.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<PaymentDebitNote-Country>
   DEU   = Deutschland
   AUT   = Österreich
   other = anderes Land
</PaymentDebitNote-Country>
```

### `PaymentPaymorrow-Txt`

Invoice via Paymorrow. The parameters `B2BMode`, `PaymorrowRequestLanguageCode`, the two notify parameters, the eight LineItem parameters, and the two salutation lists correspond to those from `PaymentDebitNote-Txt`. In addition:

| Parameter | Purpose | Values |
| - | - | - |
| `ExplicitAllowDifferentDeliveryAddress` | Allow a different delivery address | `yes`, `no`. Default: `no` |

> [!WARNING]
>
> For Paymorrow, `DenyDifferentDeliveryAddress` is set to `yes` by default. `ExplicitAllowDifferentDeliveryAddress = yes` overrides this. An accepted different delivery address must be agreed with Paymorrow in advance.

### `PaymentPaypal-Txt`

PayPal in the direct integration, via Computop, and as Express Checkout. Depending on the integration, only some of the parameters are relevant.

| Parameter | Purpose | Values |
| - | - | - |
| `CapturingMode` | For PayPal via Computop. `auto` debits immediately, `manual` only reserves | `auto`, `manual`. Default: `auto` |
| `CompuTopTxType` | For PayPal via Computop and `CapturingMode = manual` | `order`, `authorization`. Default: `order` |
| `PaypalPaymentAction` | Time and type of payment collection in the direct integration | `sale`, `authorization`, `order`. Default: `sale` |
| `InstantPaymentOnly-Allow` | Allow only payment methods with immediate debit | `yes`, `no`. Default: `yes` |
| `ExpressCheckout-Allow` | Enable PayPal Express Checkout | `yes`, `no`. Default: `no` |
| `ExpressCheckoutMaxAmountAddition` | Maximum surcharge on the subtotal for Express Checkout | Amount with a period as decimal separator |
| `ExpressCheckoutNoShipping` | Handling of the delivery address on the PayPal pages | `0`, `1`, `2` |
| `LanguageCode` | Language code for the PayPal payment page | two or five characters according to PayPal specifications |
| `PassBasketToPayPal-ModeExpressCheckout` | Form of basket transfer for Express Checkout | see below |
| `PassBasketToPayPal-ModeBasisCheckout` | Form of basket transfer for PayPal as a payment method | see below |
| `PassBasketToPayPal-DummyAddition` | Dummy product for other costs | Product name |
| `PassBasketToPayPal-DummyReduction` | Dummy product for other deductions and discounts | Product name |
| `PassToPaypalAsCustomParameter` | Any text in the CUSTOM field, for searching in PayPal transactions | maximum 256 alphanumeric characters |
| `PayPalLogoImg` | Logo on the PayPal checkout page, default 190 by 60 pixels | URL starting with `https://` |
| `PayPalBrandName` | Company name on the PayPal page | maximum 127 characters |
| `PayPalCartBorderColor` | Border color of the PayPal page | Hexadecimal value, for example `4A3BB1` |
| `PaypalDenyPendingPayments-Allow` | Reject transactions with the status "pending" | `yes`, `no`. Default: `no` |
| `PaypalSendUserActionCommitToPayPal-Allow` | Direct integration only. PayPal then shows the "Complete order" button | `yes`, `no`. Default: `no` |
| `InflateAuthorizationAmount` | Safety surcharge for authorization due to rounding differences | Amount |

`ExpressCheckoutNoShipping` controls the delivery address. `0` displays it on the PayPal pages. `1` hides all delivery address fields. `2` takes the address from the shop's customer account if the buyer doesn't specify one.

Three modes are available for the basket transfer. `AllEntriesAsSingleLineItem-TotalSum` transfers the entire order as one item. `OneEntryPerLineItem-SubTotalSum` transfers one item per basket entry without surcharges and deductions, and is only possible with Express Checkout. `OneEntryPerLineItemWithDummies-TotalSum` transfers one item per basket entry plus the dummy products. The default in both cases is `AllEntriesAsSingleLineItem-TotalSum`.

> [!NOTE]
>
> If `PassBasketToPayPal-DummyAddition` or `PassBasketToPayPal-DummyReduction` is empty, the shop automatically switches the mode back to `AllEntriesAsSingleLineItem-TotalSum`.

> [!WARNING]
>
> With `PaypalPaymentAction = order` and `PaypalPaymentAction = authorization`, `InstantPaymentOnly-Allow = no` must be set.
>
> `InflateAuthorizationAmount` is only evaluated for these two values. With `sale`, the parameter has no effect because no capture takes place. Negative values are set to 0. This parameter isn't described in the previous documentation and is added here.

`PaypalPaymentAction` in detail. `sale` debits immediately. `authorization` only authorizes and checks creditworthiness with PayPal; the authorization is valid for a maximum of 29 days. `order` only obtains the user's consent, without PayPal checking the availability of funds, and can be kept open longer than 29 days.

Characters that aren't alphanumeric aren't passed to PayPal with `PassToPaypalAsCustomParameter`. This also applies to spaces and umlauts.

If no logo is defined via `PayPalLogoImg`, the company name entered under `PayPalBrandName` appears. If that's also missing, PayPal uses the company name stored in the account.

### `PaymentPayPalPlus-Txt`

PayPal PLUS.

| Parameter | Purpose | Values |
| - | - | - |
| `PassBasketToPayPal-DummyAddition` | Dummy product for other costs | Product name |
| `PassBasketToPayPal-DummyReduction` | Dummy product for other deductions and discounts | Product name |
| `PaypalDenyPendingPayments-Allow` | Reject payments with the status "pending" | `yes`, `no`. Default: `no` |
| `ExperienceProfileID` | Created in the Online Service Area in the "PaypalPlus Manager" service | for example `XXXX-XXXX-XXXX-XXXX` |

With `PaypalDenyPendingPayments-Allow = no`, the merchant must subsequently check whether payment has been made for an order with the status "pending" before processing it.

### `PaymentPayPalCheckout-Txt`

PayPal via the PayPal Checkout integration.

| Parameter | Purpose | Values |
| - | - | - |
| `DummyItemAddition` | Dummy product for other costs | Product name |
| `LanguageCode` | Language code according to BCP 47 | for example `de-DE` |
| `ExpressCheckout-Allow` | Enable Express Checkout | `yes`, `no`. Default: `no` |

### `PaymentPayPalCheckoutPayLater-Txt`

Pay Later via PayPal Checkout. Supports `DummyItemAddition` and `LanguageCode` with the same meaning as above.

### `PaymentPayPalInvoice-Txt`

Purchase on invoice with RatePay via PayPal Checkout. All five parameters are mandatory.

| Parameter | Purpose | Values |
| - | - | - |
| `BrandName` | Company name that RatePay includes in the email to the buyer | Text |
| `CustomerServiceInstruction` | Customer service contact for the same email | Text |
| `LogoImg` | URL of the logo for the same email | URL starting with `https://` |
| `DummyItemAddition` | Dummy product for additional costs and rounding differences | Product name |
| `LanguageCode` | Language code according to BCP 47 | `de-DE` |

Purchase on invoice via this integration is currently only available in Germany.

### Alternative payment methods via PayPal Checkout

These sections all follow the same pattern and support `DummyItemAddition` and `LanguageCode`.

| Section | Payment method | Usual `LanguageCode` |
| - | - | - |
| `PaymentPayPalCheckoutAPM_BANCONTACT-Txt` | Bancontact | `nl-BE` |
| `PaymentPayPalCheckoutAPM_BLIK-Txt` | BLIK | `pl-PL` |
| `PaymentPayPalCheckoutAPM_EPS-Txt` | eps | `de-AT` |
| `PaymentPayPalCheckoutAPM_IDEAL-Txt` | iDEAL | `nl-NL` |
| `PaymentPayPalCheckoutAPM_MYBANK-Txt` | MyBank | `it-IT` |
| `PaymentPayPalCheckoutAPM_PRZELEWY24-Txt` | Przelewy24 | `pl-PL` |

Two sections also bring their own parameters.

`PaymentPayPalCheckoutAPM_GOOGLEPAY-Txt` for Google Pay additionally supports `ExpressCheckout-Allow` with the values `yes` and `no`, default `no`.

`PaymentPayPalCheckoutAPM_APPLEPAY-Txt` for Apple Pay additionally supports `ExpressCheckout-Allow`, `Brandname` for the company name on the PayPal page with a maximum of 127 characters, and `ExpressCheckoutNoDeliveryMessage` with the values `0`, `1`, and `2` for handling the delivery address.

> [!NOTE]
>
> The source documentation on Apple Pay via PayPal Checkout contained two errors that are corrected here. The example code was headed with `<PaymentPayPalCheckoutAPM_GOOGLEPAY-Txt>`. In the parameter table, the parameter was introduced as `Brandname`, but referred to as `PayPalBrandName` in the description text. The correct parameter name in this section is `Brandname`.

### `PaymentApplePay-Txt` and `PaymentGooglePay-Txt`

Apple Pay and Google Pay in the integration via Computop. Both sections support the same three parameters.

| Parameter | Purpose | Values |
| - | - | - |
| `ComputopClearingLinkValidForSeconds` | Validity period of the clearing link to Computop | Seconds. Default: 600 |
| `ComputopChDesc` | Text on the credit card statement | maximum 30 characters |
| `CtopHostedCustomField5` to `CtopHostedCustomField10` | CustomFields to the Computop Paygate | Text with tags |

If the corresponding Computop clearing isn't enabled, the entire section is skipped and none of these parameters is read.

### `PaymentKlarna-Txt`

Klarna Payments in the direct integration.

| Parameter | Purpose | Values |
| - | - | - |
| `KlarnaLocaleCode` | Language code according to Klarna specifications | for example `de_DE` |
| `AdditionProductName` | Dummy product for additional costs | Text |
| `ReductionProductName` | Dummy product for discounts | Text |
| `KlarnaOrderLinesOmitFreeItems` | Don't transmit free products at 0 euros to Klarna | `yes`, `no`. Default: `no` |
| `KlarnaDesignColorBorder` | Border color of the Klarna widget | for example `#FF9900` |
| `KlarnaDesignColorBorderSelected` | Border color for the selection | Color value |
| `KlarnaDesignColorDetails` | Color of the details | Color value |
| `KlarnaDesignColorText` | Text color | Color value |
| `KlarnaDesignRadiusBorder` | Border radius | Value |

### `PaymentPaydirekt-Txt`

Paydirekt.

| Parameter | Purpose | Values |
| - | - | - |
| `CapturingMode` | `auto` completes the payment immediately, `manual` only reserves | `auto`, `manual`. Default: `auto` |
| `PaydirektLineItemAdditionName` | Dummy product for additional costs | Text |
| `PaydirektLineItemAdditionNumber` | Corresponding pseudo product number | Number |
| `PaydirektLineItemReductionName` | Dummy product for discounts | Text |
| `PaydirektLineItemReductionNumber` | Corresponding pseudo product number | Number |

The pseudo product numbers must not come from the number range of the products offered.

### `PaymentBillie-Txt`

Billie purchase on invoice.

| Parameter | Purpose | Values |
| - | - | - |
| `MerchantName` | Merchant name, required in the JavaScript parameter `billie_config_data` | Text |
| `Duration` | Payment term from invoicing in days | 7 to 120. Default: 30 |
| `AllowPreWaitingState` | Execute the order despite the status "pre\_waiting" | `yes`, `no`. Default: `no` |

### `PaymentInstallment-Txt`

Installment purchase. Depending on the provider, further sections are added.

| Parameter | Purpose | Values |
| - | - | - |
| `UseInterestAmountAsPaymentCostsForEasyCredit` | Only for easyCredit. Include interest as payment costs in the grand total | `yes`, `no`. Default: `yes` |

> [!WARNING]
>
> The shop operator is obliged to show the buyer the total amount including interest before the purchase is completed, at the latest on the order overview page. If the interest costs are used as payment costs, this is automatically the total amount of the order. Otherwise, the interest costs aren't automatically included in the grand total.

### `PaymentDIRECTebanking-Txt`

SOFORT Überweisung.

| Parameter | Purpose | Values |
| - | - | - |
| `LanguageID` | Language in which SOFORT Überweisung is called | `DE`, `EN`, `NL`, `FR`, `PL`. Default: `DE` |
| `Reason1` | First payment reference field | Text |
| `Reason2` | Second payment reference field | Text |

### `PaymentPostFinance-Txt`

PostFinance.

| Parameter | Purpose | Values |
| - | - | - |
| `CtopLanguageCode` | Optional. Preferred language code of the payment pages | 2 characters, for example `de` |
| `CtopSellingPoint` | Optional. Point of sale | maximum 50 characters |
| `CtopService` | Optional. Products or service sold | maximum 50 characters |

### `PaymentPayU-Txt`

PayU.

| Parameter | Purpose | Values |
| - | - | - |
| `PayUArticleListAdditionName` | Dummy product for additional costs | Text |
| `PayUArticleListReductionName` | Dummy product for discounts | Text |

## Credit check

Two sections set the threshold values for the credit check. The parameters `InfoScore-Allow` and `CreditPass-Allow` in the respective `PaymentXXX-Txt` section determine which payment method is checked.

### `InfoScore`

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<InfoScore>
   MinOrder-Value           = 100
   eScoreDenyLessThan-Value = 351
   CreditCheckPeriod        = 6
</InfoScore>
```

| Parameter | Purpose | Values |
| - | - | - |
| `MinOrder-Value` | Optional. Check only from this total merchandise value. Without a value, the check is always performed | Amount |
| `eScoreDenyLessThan-Value` | **Mandatory**. All supplied eScore values below this value count as insufficient creditworthiness | Number |
| `CreditCheckPeriod` | Optional. Check again after this number of months since the last check | Number in months |

Whether the total merchandise value is considered gross or net depends on the shop's setting in the `VAT` section.

For example, if the invoice payment method should be removed as soon as Infoscore returns a value of 350 or less, set `InfoScore-Allow = yes` in the `PaymentBill-Txt` section and `eScoreDenyLessThan-Value = 351`. The higher the Infoscore value, the better the creditworthiness. Clarify the appropriate decision threshold directly with Infoscore.

> [!NOTE]
>
> `CreditCheckPeriod` only works if your merchandise management system supplies the date of the last check.

### `CreditPass`

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<CreditPass>
   Countries         = DEU
   MinTotalSum-Value = 10
</CreditPass>
```

| Parameter | Purpose | Values |
| - | - | - |
| `Countries` | Countries for which the check is performed | comma-separated 3-letter ISO codes |
| `MinTotalSum-Value` | Minimum grand total from which the check is activated | Amount |

## `Card1` to `Card5`

Defines the accepted credit card types. In addition, the credit card payment method must be enabled in the `PaymentCreditCard-Txt` section with `Allow = yes`.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<Card1>
   Allow           = yes
   Name            = VISA
   CompuTopBrandID = VISA
   WSCardType      = 1
</Card1>
```

| Parameter | Purpose | Values |
| - | - | - |
| `Allow` | Offer the credit card type | `yes`, `no`. Default: `no` |
| `Name` | Name of the credit card | Text |
| `CompuTopBrandID` | Only with Computop. BrandID if `CompuTopBrandDetermination = no` | see below |
| `OgoneBrandID` | Only with Ogone. Isn't determined automatically | Contact WEBSALE AG |
| `TeleCashSec2ID` | TeleCash ID of the card for the TeleCash Connect interface | `M`, `V`, `A`, `C`, `J` |
| `WSCardType` | Technical type code of the card | see below |
| `BrandID` | General BrandID | Text |
| `PaymetricBrandID` | BrandID for Paymetric | Text |
| `Img` | Icon of the card type | File name |
| `Link` | Link with information about the card type | URL |
| `ImgOnClick` | JavaScript when clicking the icon | JavaScript |

> [!NOTE]
>
> The five parameters `BrandID`, `PaymetricBrandID`, `Img`, `Link`, and `ImgOnClick` aren't described in the previous documentation and are added here.
>
> A `Card` section is discarded completely if `Name` is empty or `Allow` isn't set to `yes`. No message appears.

Values for `CompuTopBrandID`: `VISA`, `MasterCard`, `Maestro`, `AMEX`, `Diners`, `Discover`, and `AirPlus`.

Values for `TeleCashSec2ID`: `M` for MasterCard, `V` for Visa, `A` for American Express, `C` for Diners, and `J` for JCB.

Values for `WSCardType`: `1` for VISA, `2` for MasterCard, `3` for American Express, `4` for Diners Club, and `5` for JCB. Values above 100 can be used freely. The parameter is mandatory when using the order generator, but isn't evaluated for the technical processing of the order.

## `CompuTop-ErrorMessages`

Defines how the shop handles error messages from Computop. The section is only needed if Computop error messages should appear in the language of the subshop in foreign-language subshops.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<CompuTop-ErrorMessages>
   NotificationAddress = admin@beispiel.fr
   Default-Message     = Pour le code ~WS-CTopErrorCode~, il n'y a pas de message particulier
   <ErrorMessages>
      CTopErrorCode-0001 = Numéro de transaction invalide
      CTopErrorCode-0002 = default
   </ErrorMessages>
</CompuTop-ErrorMessages>
```

| Parameter | Purpose | Values |
| - | - | - |
| `CTopErrorCode-xxxx` | Message per error code, in the `ErrorMessages` subsection. `xxxx` is the Computop code | Text or `default` |
| `Default-Message` | Default message for all codes that aren't defined or are defined as `default` | Text, tag `WS-CTopErrorCode` possible |
| `NotificationAddress` | Recipient of an email for error codes that aren't defined | Email address |

You get the error codes directly from Computop.

## `Paymorrow-Mapping` and `PaymorrowDebit-Mapping`

Link free address data fields of the shop with the Paymorrow parameters. This is needed to request legal form, company owner, and registration number from business customers. `Paymorrow-Mapping` applies to invoice via Paymorrow, `PaymorrowDebit-Mapping` to direct debit via Paymorrow. Both sections support the same three parameters.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<Paymorrow-Mapping>
   LegalForm          = Suffix25
   Owner              = Suffix26
   RegistrationNumber = Suffix27
</Paymorrow-Mapping>
```

| Parameter | Linked to the free address data field for |
| - | - |
| `LegalForm` | the legal form of business customers |
| `Owner` | the company owner |
| `RegistrationNumber` | the registration number |

You create the address data fields themselves in the `AddressFields-Txt` section.

Reference: Section AddressFields-Txt

## `Paymorrow-NotifyMessages` and `PaymorrowDebit-NotifyMessages`

Define the error messages for invoice or direct debit via Paymorrow. A `+Entry` subsection is created for each error case. Both sections support the same seven parameters.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<Paymorrow-NotifyMessages>
   <+Entry>
      customerStatus             =
      declineFinal               =
      declineType                =
      Message                    = Die gewünschte Zahlungsart steht für diese Transaktion leider nicht zur Verfügung.
      responseStatus             =
      responseErrors_error_group =
      responseErrors_error_name  =
   </+Entry>
</Paymorrow-NotifyMessages>
```

| Parameter | Purpose |
| - | - |
| `Message` | Error message displayed to the buyer |
| `customerStatus` | Value from the Paymorrow response |
| `declineFinal` | Value from the Paymorrow response |
| `declineType` | Value from the Paymorrow response |
| `responseStatus` | Value from the Paymorrow response |
| `responseErrors_error_group` | Value from the Paymorrow response |
| `responseErrors_error_name` | Value from the Paymorrow response |

Clarify directly with Paymorrow which values Paymorrow supplies in which error case.

> [!NOTE]
>
> If several errors occur at the same time, only the first matching message defined in this section appears. The order of the `+Entry` sections therefore determines which message the buyer sees.


## Related topics

- [payment - Payment methods](https://dokumentation.websale.de/en/konfiguration/payment-zahlungsmethoden.md)
- [Overview of payment and shipping methods](https://dokumentation.websale.de/en/v8s/informationsseiten/uebersicht-von-zahlungs-und-versandarten.md)
- [Payment method codes](https://dokumentation.websale.de/en/v8s/materialien/zahlungsarten-codes.md)
- [Overview - Payment methods](https://dokumentation.websale.de/en/frontend/funktionsubersicht/zahlungsarten.md)
- [Buttons for payment methods](https://dokumentation.websale.de/en/v8s/referenz/tags/bt/zahlungsarten.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.