Skip to main content

Worldline Payment Interface

Version: 2.3 | Revision #1

1 Overview

The Worldline Payment Interface (WPI) is an Android intent-based interface that enables easy and fast integration with payment apps. It is designed to allow additional business applications to execute payments on any Worldline offered SmartPOS device. A SmartPOS device is a payment device that runs Android.

All Worldline Payment Solutions support WPI, which means that business applications that use this interface can run everywhere without any change of code. This makes it easy for developers to build payment apps that are compatible with a wide range of payment devices and payment protocols.

The WPI interface is built on top of the Android Intent mechanism, which allows different parts of an app to communicate with each other in a structured way. By using intents to trigger payment-related actions, the WPI interface simplifies the payment integration process and makes it easier for developers to build business applications on top of Payment Solutions.

1.1 What's New

  • Interface structure:
    • Meta-data for supported WPI versions
  • Financial functional extensions
    • Financial request fields added:
      • multiAccountIndex
      • accessibility
    • Financial response fields added:
      • reference (missing from previous versions)
      • multiAccountIndex
      • onlineTokenSource
      • externalTransactionIdentifierSource
    • Refund request
      • rateReferenceIdentifier and originalTransactionDate added
  • Information functional extensions
    • Response fields added:
      • supportsMultiAccount
      • supportedMultiAccountServiceTypes
      • multiAccountSelectionList
  • Data Dictionary
    • Clarification on a receipt with Multi-Account support added
    • Request Data updated
      • Accessibility item added
    • Response Data updated
      • Account item added
      • Description for onlineTokenSource added
    • Description for externalTransactionIdentifierSource added
    • New Error Conditions added
      • WPI_ERR_COND_CARD_REMOVED
      • WPI_ERR_COND_CARD_ALREADY_INSERTED

1.2 Revision History

  • Revision #1
    • Document Creation

2 Interface Structure

The WPI provides a set of intents that developers can use to build apps that work with the interface. The following table lists each intent, along with its purpose:

TypeCategoryIntentPurpose
FinancialDisplay Actioncom.worldline.payment.action.PROCESS_TRANSACTIONProcess a financial transaction
ManagementDisplay Actioncom.worldline.payment.action.PROCESS_MANAGEMENTTrigger payment solution managed actions
InformationBackground Actioncom.worldline.payment.action.PROCESS_INFORMATIONBackground management of payment solution specific information

We have two types of categories for the Interface

  • Display Actions: These actions start the payment solution that are processing financial transactions or require user interaction.
    • Android intents are used
  • Background Actions: These actions perform background processing that doesn't require user interaction.
    • Messenger service is used
    • The Message.what attribute of the Messenger Service should be set to the code 895349 for any WPI message.
    • The Message.obj should be a bundle formatted just like the WPI Extras.
    • Those extras are being transported through a different mean but the same structure and rules applies.

2.1 Versioning

The WPI uses versioning with the format Y.X (e.g., 1.0 , 2.1 ) to track and manage different releases of our software. Additionally, each revision within a minor version is assigned a unique number, such as " 3.2 Revision #9 ".

  • Y (Major Version): Signifies a significant milestone with potential breaking changes. Example: a version 2.x request cannot be used with version 1.x .
  • X (Minor Version): Represents a release with new features or improvements that are backward compatible within the same major version. Example: a version 1.1 must remain compatible with the version 1.0 .
  • Revision Number: Each revision is assigned a unique number, indicating the specific iteration of a minor version (e.g., " 3.2 Revision #9 "). Revisions mainly include small fixes, updates, and improvements. They address minor bugs or add slight enhancements/clarifications.

2.2 Extras

An extra in Android intents is a way to pass additional data or parameters to another component in order to provide more context or information for the requested action. In WPI we have extras for request and response. The request extras needs to be provided by the Business Application that is using the interface and the response extra is provided by the Payment Solution.

Request:

ExtraDescriptionTypeCondition
WPI_SERVICE_TYPESpecify the subtype of action to be executedStringMandatory
WPI_REQUESTThe request contains JSON structured data mandatory for given service type, in some specific cases this field is not given or emptyStringMandatory for Financial
WPI_VERSIONUsed WPI versionStringMandatory
WPI_SESSION_IDUsed as an identifier of a WPI exchange (a request/response) between a client application and a payment application. Is used to recover the status of the exchange in case of an unexpected failure. Is provided by the client and is part of the response.StringMandatory

Response:

ExtraDescriptionTypeCondition
WPI_SERVICE_TYPESpecify the subtype of action that was executedStringConditional
WPI_RESPONSEThe response contains JSON structured data processed for the requested service typeStringConditional
WPI_VERSIONUsed WPI versionStringMandatory
WPI_SESSION_IDIdentifier of a WPI exchange provided by the clientStringMandatory

2.2.1 Service Types

Each intent has several service types that specify the request. Payment Solution shall support all mandatory service types as listed below in Condition column.

2.2.1.1 Financial
Service TypePurposeCondition
WPI_SVC_PAYMENTUsed to perform a simple sale transactionMandatory
WPI_SVC_CANCEL_PAYMENTUsed to reverse a previous transactionMandatory
WPI_SVC_REFUNDUsed to refund a previous transactionConditional
WPI_SVC_PRE_AUTHORIZATIONUsed to perform a pre-authorizationOptional
WPI_SVC_CANCEL_PRE_AUTHORIZATIONUsed to cancel a previous pre-authorizationConditional
WPI_SVC_UPDATE_PRE_AUTHORIZATIONUsed to increment a previous pre-authorizationConditional
WPI_SVC_CANCEL_UPDATE_PRE_AUTHORIZATIONUsed to cancel the previous update of a pre-authorizationConditional
WPI_SVC_PAYMENT_COMPLETIONUsed to complete a pre-authorizationConditional
WPI_SVC_CANCEL_PAYMENT_COMPLETIONUsed to cancel the completed pre-authorizationConditional
WPI_SVC_DEFERRED_PAYMENT_AUTHORIZATIONUsed to execute a deferred payment authorization (energy solution use-case)Optional
WPI_SVC_DEFERRED_PAYMENT_COMPLETIONUsed to execute a deferred payment completion of a previous authorization (energy solution use-case)Conditional
WPI_SVC_PAYMENT_INSTRUMENT_RECOGNITIONUsed to do a payment card of non-payment card recognition request without performing a real transaction (token)Optional
WPI_SVC_FOLLOW_ON_CREDITUsed to do a referenced based credit transaction based on a previous transaction.Optional
WPI_SVC_FOLLOW_ON_PAYMENTUsed to do a referenced based payment transaction based on a previous transaction.Optional
WPI_SVC_CANCEL_UNREFERENCEDTo reverse a transaction without providing the original transaction reference.Optional
WPI_SVC_PHONE_AUTHORIZEDTo perform a payment with authorization code obtained via Voice Referral.Optional
WPI_SVC_FORCE_ACCEPTANCETo perform a payment where merchant accepts the risk of accepting transaction regardless of authorization resultOptional
2.2.1.2 Management
Service TypePurposeCondition
WPI_SVC_PAYMENT_MENUUsed to open the payment solution menuConditional
WPI_SVC_DAY_ENDUsed to upload the transactions (online and offline) to perform the final settlementConditional
WPI_SVC_PAYMENT_PARAMETERIZATIONUsed to fetch the latest payment solution configuration from the payment solution related configuration systemConditional
WPI_SVC_ACQUIRER_PARAMETERIZATIONUsed to fetch the latest acquirer parameters from the acquirerConditional
WPI_SVC_PRINT_RECEIPTUsed for receipt printingConditional
WPI_SVC_ABORTUsed to abort an ongoing transactionConditional
WPI_SVC_LAST_DAY_ENDUsed to get the last day end transaction performed by the terminalConditional

2.3 Meta-data for Supported WPI versions

In the Worldline Payment Interface (WPI), it is essential for third-party applications to be aware of the supported versions of the WPI to ensure compatibility and proper functionality. To facilitate this, the WPI provides a mechanism for payment providers to declare the supported versions through meta-data in their Android manifest files.

2.3.1 Android Manifest meta-data (Payment Solution)

To declare the supported WPI versions, Payment providers must include the following meta-data entry in their AndroidManifest.xml like in the example:




...






...


  • android:name : This attribute specifies the key for the meta-data entry. In this case, it is set to "com.worldline.payment.metadata.WPI_SUPPORTED_VERSIONS" , which uniquely identifies the meta-data related to the supported WPI versions.
  • android:value : This attribute contains a string that lists the different WPI versions supported by the payment provider, separated by commas. For example, the value "1.0,2.0,2.1,2.2,2.3" indicates that the application supports WPI versions 1.0, 2.0, 2.1, 2.2, 2.3. Each version is specified without additional spaces, allowing for easy parsing and retrieval.
  • meta-data: Should be added at application level, an example for Service information is shown above to highlight that meta-data shouldn't be added to the service intent.

Business Applications that need to check the supported WPI versions by the payment provider can retrieve this meta-data using the ' Package manager ' from android request.

3 Interface Description

Please refer to Data Dictionary section for detailed description of individual fields.

3.1 Financial

Each financial transaction has a minimum set of fields that needs to be there per service type. In the subsequent chapters this is described in detail.

The response contains the following fields, unless specific service types describe their own response content later in this section.

Response:

Field NameTypeCondition
resultStringMandatory
errorConditionStringMandatory
referenceStringConditional
remarkStringConditional
actionCodeStringConditional
timestampString (ISO 8601)Conditional
currencyStringConditional
authorizedAmountIntegerConditional
customerLanguageStringConditional
brandNameString (pre-defined 4.2.11 Brand Name)Conditional
applicationIdentifierStringConditional
applicationLabelStringConditional
receiptObject (5.2.5 Receipt)Conditional
paymentSolutionReferenceStringConditional
externalTransactionIdentifierStringOptional
externalTransactionIdentifierSourceString (pre-defined 4.2.18 Payment Service Provider)Conditional
acquirerIdentifierStringConditional
merchantIdentifierStringMandatory
terminalIdentifierStringMandatory
authorizationCodeStringConditional
cashbackAmountIntegerConditional
tipAmountIntegerConditional
dccUsedBooleanConditional
dccOfferedBooleanConditional
dccAmountIntegerConditional
dccCurrencyStringConditional
dccExchangeRateStringConditional
entryModeString (pre-defined 4.2.7 Supported Technologies)Conditional
authorizationModeString (pre-defined 4.2.10 Authorization Mode)Conditional
panStringConditional
tokenStringOptional
onlineTokenStringOptional
onlineTokenSourceString (pre-defined 4.2.19 Token Service Provider)Conditional
expiryDateStringConditional
cardholderVerificationMethodString (pre-defined 4.2.13 Cardholder Verification MethodConditional
cardDataInputString (pre-defined 4.2.12 Card Data Input)Conditional
surchargeAmountIntegerOptional
voiceReferralPhoneNumberStringConditional
phoneAuthorizedBooleanConditional
forcedAcceptanceBooleanConditional
productSelectionObject (4.2.16 Product Selection item)Conditional
multiAccountIndexIntegerConditional

3.1.1 Payment

Service Type: WPI_SVC_PAYMENT

Request:

Field NameTypeCondition
currencyStringMandatory
requestedAmountIntegerMandatory
tipAmountIntegerOptional
cashbackAmountIntegerOptional
referenceStringOptional
customerLanguageStringOptional
useManualPanKeyEntryBooleanOptional
receiptFormatArray (of pre-defined 4.1.1 Receipt Format)Optional
receiptDelegationBooleanOptional
receiptWidthIntegerOptional
productSelectionObject (4.2.16 Product Selection item)Optional
multiAccountIndexIntegerOptional
accessibilityObject (4.1.4 Accessibility Item)Optional
3.1.1.1 Payment with Product Selection

This use case is handled by the nominal payment use case. In case the payment provider brands have products active ( e.g meal vouchers, eco vouchers, consumption voucher, etc) the user (usually Merchant) can select them in the business application and send it using the productSelection field. This field is an Object containing the product provider and the identifier of the product used by the payment provider. The information about voucher providers and voucher types is provided by the payment solution information.

3.1.2 Cancellation

The cancellation is also known as reversal. The cancellation can be executed for several service types; the cancellation service type depends on the initial service type and needs to be set and used correctly by the business application.

Service Type: WPI_SVC_CANCEL_PAYMENT, WPI_SVC_CANCEL_PRE_AUTHORIZATION, WPI_SVC_CANCEL_UPDATE_PRE_AUTHORIZATION, WPI_SVC_CANCEL_PAYMENT_COMPLETION

Field NameTypeCondition
paymentSolutionReferenceStringMandatory
customerLanguageStringOptional
receiptFormatArray (of pre-defined 4.1.1 Receipt Format)Optional
receiptDelegationBooleanOptional
receiptWidthIntegerOptional

3.1.3 Unreferenced Cancellation

An Unreferenced cancellation, is a card-present transaction, that enables the cancellation of a transaction without requiring the original transaction reference. The payment provider reads the card and presents the user with a list of matching transactions that can be reversed, allowing the user to select from them. If the values provided in mandatory fields (currency,requestedAmount) are not recognized by payment solution backend WPI_ERR_COND_INVALID_TRANSACTION_REQ is returned.

Service Type: WPI_SVC_CANCEL_UNREFERENCED

Request:

Field NameTypeCondition
currencyStringMandatory
requestedAmountIntegerMandatory
referenceStringOptional
customerLanguageStringOptional
receiptFormatArray (of pre-defined 4.1.1 Receipt Format)Optional
receiptDelegationBooleanOptional
receiptWidthIntegerOptional
accessibilityObject (4.1.4 Accessibility Item)Optional

3.1.4 Refund

Service Type: WPI_SVC_REFUND

Request:

Field NameTypeCondition
accessibilityObject (4.1.4 Accessibility Item)Optional
currencyStringMandatory
customerLanguageStringOptional
multiAccountIndexIntegerOptional
originalTransactionDateStringOptional
rateReferenceIdentifierStringOptional
receiptDelegationBooleanOptional
receiptFormatArray (of pre-defined 4.1.1 Receipt Format)Optional
receiptWidthIntegerOptional
referenceStringOptional
requestedAmountIntegerMandatory
useManualPanKeyEntryBooleanOptional

3.1.5 Pre-authorization

Service Type: WPI_SVC_PRE_AUTHORIZATION

Request:

Field NameTypeCondition
currencyStringMandatory
requestedAmountIntegerMandatory
referenceStringOptional
customerLanguageStringOptional
useManualPanKeyEntryBooleanOptional
receiptFormatArray (of pre-defined 4.1.1 Receipt Format)Optional
receiptDelegationBooleanOptional
receiptWidthIntegerOptional
accessibilityObject (4.1.4 Accessibility Item)Optional

3.1.6 Update Pre-authorization

This service is used to increase the pre-authorization amount, which involves specifying the requested amount for the increment. The reference of pre-authorization is provided through the paymentSolutionReference , which will be use to make the update pre-authorization. The requestedAmount is just the amount that shall be incremented, not the total one .

Service Type: WPI_SVC_UPDATE_PRE_AUTHORIZATION

Request:

Field NameTypeCondition
currencyStringMandatory
requestedAmountIntegerMandatory
referenceStringOptional
customerLanguageStringOptional
useManualPanKeyEntryBooleanOptional
receiptFormatArray (of pre-defined 4.1.1 Receipt Format)Optional
receiptDelegationBooleanOptional
receiptWidthIntegerOptional

3.1.7 Payment Completion

To complete a previous pre-authorization the paymentSolutionReference has to be used. The final amount should be equal to or less than the total pre-authorization amount (this includes all previous Update pre-authorization calls). If you use a higher amount for the completion, the transaction may not be successful because the higher amount was not reserved - we do not recommend to use higher amounts.

**Service Type: **WPI_SVC_PAYMENT_COMPLETION

Request:

Field NameTypeCondition
currencyStringMandatory
requestedAmountIntegerMandatory
paymentSolutionReferenceStringMandatory
referenceStringOptional
customerLanguageStringOptional
useManualPanKeyEntryBooleanOptional
receiptFormatArray (of pre-defined 4.1.1 Receipt Format)Optional
receiptDelegationBooleanOptional
receiptWidthIntegerOptional

3.1.8 Deferred Payment

Deferred payment for petrol transaction processing refers to a payment arrangement where the actual payment for fuel is delayed or postponed until a later time. The transaction is split into two parts: authorization and completion.

  1. Authorization: The first part of the deferred payment process is authorization. When a customer swipes their payment card or provides their payment details at the petrol station, the system checks if the card is valid and has sufficient funds or credit available. This initial authorization ensures that the customer's payment method is valid and can cover the cost of the fuel. However, the actual payment is not processed at this stage.
  2. Completion: The second part of the deferred payment process is completion. After the authorization is successful, the petrol station temporarily reserves the funds or credit limit on the customer's card to cover the estimated cost of the fuel. This reserved amount is typically a pre-authorization hold or pending transaction. The petrol station then dispenses the fuel to the customer.

Later, the petrol station completes the transaction by submitting the final payment request to the customer's bank or credit card company. At this stage, the reserved funds are transferred from the customer's account to the petrol station's account, completing the payment process. The exact timing for completing the authorization may vary depending on the specific payment system and agreements between the petrol station and the customer's financial institution.

The delay between the “Authorization Exchange” and the “Completion Exchange” can be quite long (e.g., in case of tank filling). Therefore, to increase the availability of the terminals using the “Deferred Payment” service, the “Multi-Session” concept is usually configured for performing “Parallel Transactions”. The authorization exchange provides the terminal with an authorized amount as upper limit, and the completion exchange notifies the acquirer of the final amount as actually applicable. The “Deferred Payment” is indifferently meant for attended or unattended terminals.

PSD2 imposes the amount to be present in the request.

3.1.8.1 Authorization

Service Type: WPI_SVC_DEFERRED_PAYMENT_AUTHORIZATION

Request:

Field NameTypeCondition
currencyStringMandatory
requestedAmountIntegerMandatory
referenceStringOptional
customerLanguageStringOptional
accessibilityObject (4.1.4 Accessibility Item)Optional
3.1.8.2 Completion

Service Type: WPI_SVC_DEFERRED_PAYMENT_COMPLETION

Request:

Field NameTypeCondition
currencyStringMandatory
requestedAmountIntegerMandatory
paymentSolutionReferenceStringMandatory
referenceStringOptional
customerLanguageStringOptional
receiptFormatArray (of pre-defined 4.1.1 Receipt Format)Optional
receiptDelegationBooleanOptional
receiptWidthIntegerOptional
accessibilityObject (4.1.4 Accessibility Item)Optional

3.1.9 Payment Instrumentation Recognition

The purpose of the service type is to read the card before actual payment transaction processing is performed (for e.g. to recognize fleet cards) with a single card insertion. This also allows to avoid double tap under the condition the payment instrument is in contactless entry mode. The payment solution needs information about the transaction service type, requested amount, currency and reference that shall be used for the subsequent transaction. There are two possibilities to do a payment instrumentation recognition token retrieval only and card recognition with further payment processing afterwards. The response differs from the standard response as described below.

Service Type: WPI_SVC_PAYMENT_INSTRUMENT_RECOGNITION

Request:

Field NameTypeCondition
currencyStringConditional
requestedAmountIntegerConditional
serviceTypeStringConditional
cashbackAmountIntegerConditional
tipAmountIntegerConditional
recognitionTimeoutIntegerMandatory
recognitionOptionsArrayMandatory
customerLanguageStringOptional

Response:

Field NameTypeCondition
resultStringMandatory
errorConditionStringMandatory
entryModeStringConditional
customerLanguageStringConditional
isoTrack1StringConditional
isoTrack2StringConditional
isoTrack3StringConditional
tokenStringConditional
panStringConditional
mediaTypeStringConditional
mediaUniqueIdentifierStringConditional
waitForNextActionBooleanConditional
nextActionWaitTimeIntegerConditional

3.1.10 Follow on Credit

Follow on Credit is a card not present transaction which is used to perform the credit transaction with the card data of a previous transaction. paymentSolutionReference is used to identify data necessary to perform follow-up transaction.

Service Type: WPI_SVC_FOLLOW_ON_CREDIT

Request:

Field NameTypeCondition
currencyStringMandatory
requestedAmountIntegerMandatory
paymentSolutionReferenceStringMandatory
referenceStringOptional
customerLanguageStringOptional
receiptFormatArray (of pre-defined 4.1.1 Receipt Format)Optional
receiptDelegationBooleanOptional
receiptWidthIntegerOptional

3.1.11 Follow on Payment

Follow on Payment is a card not present transaction which is used to perform the payment transaction with the card data of a previous transaction. paymentSolutionReference is used to identify data necessary to perform follow-up transaction.

Service Type: WPI_SVC_FOLLOW_ON_PAYMENT

Request:

Field NameTypeCondition
currencyStringMandatory
requestedAmountIntegerMandatory
paymentSolutionReferenceStringMandatory
referenceStringOptional
customerLanguageStringOptional
receiptFormatArray (of pre-defined 4.1.1 Receipt Format)Optional
receiptDelegationBooleanOptional
receiptWidthIntegerOptional

3.1.12 Phone Authorized

A phone authorized transaction is a subsequent transaction after there was a refusal with WPI_ERR_COND_VOICE_REFERRAL_REQUIRED error condition returned. Merchant needs to obtain authorization code via Voice Referral procedure performed with phone number provided in voiceReferralPhoneNumber field.

Service Type: WPI_SVC_PHONE_AUTHORIZED

Request:

Field NameTypeCondition
currencyStringMandatory
requestedAmountIntegerMandatory
authorizationCodeStringMandatory
referenceStringOptional
customerLanguageStringOptional
receiptFormatArray (of pre-defined 4.1.1 Receipt Format)Optional
receiptDelegationBooleanOptional
receiptWidthIntegerOptional
multiAccountIndexIntegerOptional
accessibilityObject (4.1.4 Accessibility Item)Optional

3.1.13 Force Acceptance

A forced acceptance transaction is a transaction where merchant accepts the risk of payment in relation to an offline transaction.

Service Type: WPI_SVC_FORCE_ACCEPTANCE

Request:

Field NameTypeCondition
currencyStringMandatory
requestedAmountIntegerMandatory
referenceStringOptional
customerLanguageStringOptional
useManualPanKeyEntryBooleanOptional
receiptFormatArray (of pre-defined 4.1.1 Receipt Format)Optional
receiptDelegationBooleanOptional
receiptWidthIntegerOptional
multiAccountIndexIntegerOptional
accessibilityObject (4.1.4 Accessibility Item)Optional

3.2 Management

Management actions has an empty request JSON content, except for services that contain a receipt, like Day-End and the parameterizations. The receipt format supported for management actions is FORMATTED (defined in 4.1.1 Receipt Format). If receiptWidth or receiptDelegation values are defined for a management services that does not have a receipt these will be ignored by the payment solution.

The response for every management action contains the following fields

Response:

Field NameTypeCondition
resultStringMandatory
errorConditionStringMandatory
receiptObject (5.2.5 Receipt)Conditional

3.2.1 Payment Menu

This is used to open the payment solution menu to trigger payment solution specific actions.

Service Type: WPI_SVC_PAYMENT_MENU

3.2.2 Day-End

The day-end is used to upload all transactions to the host for the final settlement. As result an receipt is received which contains a transaction summary per brand with no. of transactions and amount since the last day-end (incl. online and offline transactions).

Service Type: WPI_SVC_DAY_END

Request:

Field NameTypeCondition
receiptDelegationBooleanOptional
receiptWidthIntegerOptional

Response:

Field NameTypeCondition
resultStringMandatory
errorConditionStringMandatory
receiptObject (5.2.5 Receipt)Conditional

3.2.3 Payment Parameterization

The payment configuration is used to synchronize the payment solution specific parameters with the corresponding management system.

Service Type: WPI_SVC_PAYMENT_PARAMETERIZATION

Request:

Field NameTypeCondition
receiptDelegationBooleanOptional
receiptWidthIntegerOptional

3.2.4 Acquirer Parameterization

The Acquirer parameterization is used to synchronize with the acquirer system corresponding to the payment solution. This includes brands, limits and any other parameter that is mandatory to process a financial transaction. Multi-Acquirer solutions will do the parameterization synchronization for all acquirers.

Service Type: WPI_SVC_ACQUIRER_PARAMETERIZATION

Request:

Field NameTypeCondition
receiptDelegationBooleanOptional
receiptWidthIntegerOptional

3.2.5 Print Receipt

This function is intended to provide a compliant receipt by the payment solution. A receipt can be provided in case of

  • A previous service was successfully executed with a corresponding session ID for this business application
  • The SESSION_ID of the print receipt request in the Android Extras has to be the previous request SESSION_ID and **not **a new one
  • The payment solution supports receipt delivery, for example printing or digital receipt-based delivery
  • Referenced request (by SESSION_ID) has a receipt available

The Android Extras in the response are close to a standard transaction response except for the conditional presence of WPI_RESPONSE. An initial check on this extra property provides information about the existence of the session. If not available the session ID is not existing.

Be aware any payment solution will just store the last SESSION_ID and response per application (package name). This implies that no other WPI requests shall be done before printing the receipt.

Hint: The receipt cannot be provided under the following circumstances:

CircumstanceDescriptionError Condition
Paper emptyReceipt cannot be printed as the paper is emptyWPI_ERR_COND_GENERIC
Printer defectPrinter cannot be used to reprint the receipt as it is defectWPI_ERR_COND_GENERIC
Receipt delivery not availableNeither a printer nor a digital receipt is available, mainly happens in unattended environments. The service type support for print receipt can be checked with the 3.3.2 Payment Solution InformationWPI_ERR_COND_SERVICE_NOT_SUPPORTED
Receipt not availableNot every service type has receipt´s. For example, if the referenced service type was WPI_SVC_PAYMENT_INFORMATION no receipt can be printed.WPI_ERR_COND_GENERIC

Service Type: WPI_SVC_PRINT_RECEIPT

Request:

Field NameTypeCondition
receiptTargetString (pre-defined 4.1.3 Receipt Target)Mandatory

Response:

Field NameTypeCondition
resultString (pre-defined 4.2.2 Result)Mandatory
errorConditionString (pre-defined 4.2.3 Error Condition)Mandatory
remarkStringConditional

3.2.6 Abort Ongoing Payment

Abort the current ongoing financial transaction. If the transaction was successfully aborted or there was no running transaction *WPI_RESULT_SUCCESS *will be returned in all other cases WPI_RESULT_FAILURE.

Service Type: WPI_SVC_ABORT

3.2.7 Last Day End Information

Request the receipt information of the last day end performed by the terminal. No printing needed by the payment application.

Service Type: WPI_SVC_LAST_DAY_END

Request:

Field NameTypeCondition
receiptWidthIntegerOptional

Response:

Field NameTypeCondition
resultStringMandatory
errorConditionStringMandatory
receiptObject (5.2.5 Receipt)Conditional

3.3. Information

Retrieval of Payment Solution specific information that does not require user interaction. There request does not contain any parameter. The response is specific per service type.

3.3.1 Last Transaction

In case of the last transaction response is not known any more it can be requested by this service. It will return the last financial transaction response independent of the result, failed or success. This is a recovery feature as the payment solution will remember the last *SESSION_ID *as well as corresponding transaction response. The Android Extras are close to a standard transaction response except for the conditional presence of *WPI_SERVICE_TYPE *& *WPI_RESPONSE *. An initial check on one of these extra properties can provide information about the existence of the session.

Be aware any payment solution will just store the last response. That implies that no other WPI request shall be done before the recovery.

Service Type: WPI_SVC_LAST_TRANSACTION

Request:

ExtraDescriptionTypeCondition
WPI_SERVICE_TYPESpecify the subtype of action to be executedStringMandatory
WPI_VERSIONUsed WPI versionStringMandatory
WPI_SESSION_IDThe session id of the requested session NOT a new session idStringMandatory

Response:

ExtraDescriptionTypeCondition
WPI_SERVICE_TYPEThis will be the service type of the recovered transaction not "WPI_SVC_LAST_TRANSACTION"StringConditional
WPI_RESPONSEThe Financial Payment Response object of the corresponding SESSION_IDStringConditional
WPI_VERSIONUsed WPI versionStringMandatory
WPI_SESSION_IDIdentifier of a WPI exchange, this session id will be the same as the one sent in the requestStringMandatory

3.3.2 Payment Solution Implementation

The payment should provide all the required information, in case of a lack or issue of configuration / initialization the response should provide the WPI_ERR_COND_NOT_INITIALIZED as an errorCondition .

Service Type: WPI_SVC_PAYMENT_INFORMATION

Response:

Field NameDescriptionTypeCondition
resultResult of the transaction (success or failure)String (pre-defined 4.2.2 Result)Mandatory
errorConditionSpecific error reason (see table below)String (pre-defined 4.2.3 Error Condition)Mandatory
softwareVersionSoftware version of the payment solutionStringConditional
terminalIdentifierTerminal identifier configured for the payment solutionStringConditional
terminalIdentifierLongTerminal identifier with additional information that allows to recognize given terminal among different systemsStringConditional
terminalModelTerminal model of the deviceStringConditional
macAddressMAC Address of used adapterStringConditional
supportedLanguagesLanguages supported by the payment solutionArrayConditional
cardholderDefaultLanguageCardholder languageStringConditional
merchantLanguageMerchant languageStringConditional
countryCodeCountry code of the payment solutionStringConditional
defaultCurrencyDefault currencyStringConditional
supportedCurrenciesCurrencies the payment solution supportsArrayConditional
shopInfoShop information for the used terminalObject (4.2.1 ShopInfo)Conditional
acquirerProtocolThe payment solution protocol used towards the acquirerStringConditional
supportedTicketFormatsReceipt formats which the payment solution supportsArrayConditional
supportReceiptDelegationWhether receipt delegation is supported or not.BooleanConditional
supportsReceiptWidthWhether Payment Solution supports setting receipt width by the business applicationBooleanConditional
paymentInformationPayment information per brandArrayConditional
paymentSolutionSupportedServiceTypesSupported service types by the payment solutionArrayConditional
supportsManualPanKeyEntryWhether manual card data entry through the payment application is supported and enabled or notBooleanConditional
manualPanKeyEntrySupportedServiceTypesList of payment service types that allow to use manual pan key entryArrayConditional
supportsTipWhether tip is supported and enabled or not. Tip is supported when the payment solution has tip processing activated and tipAmount can be send in the WPI request. If Payment Solution supports tip but does not support tipAmount returned via WPI this field should be set to FalseBooleanConditional
supportedProductsSupported products activated for the terminal (e.g meal vouchers, eco vouchers, etc.)ArrayOptional
supportsMultiAccountWhether the multi-account functionality is supported and is enabled or not.BooleanConditional
supportedMultiAccountServiceTypesList of service types that allow for a Multi-Account transactionArrayConditional
multiAccountSelectionListA list of account indexes and their corresponding descriptions to choose from.Array (4.2.17 Account Item)Conditional

4 Data Dictionary

4.1 Request Data

All data has to be provided as JSON and needs to be provided as *WPI_REQUEST *extra

Field NameDescriptionType
authorizationCodeAuthorization code from the authorization system for the specific transaction.String
currencyCurrency of the amount. Alpha code value defined in ISO 4217 (e.g. EUR)String
requestedAmountTotal payment amount as minor unit. The fractional digits are evaluated based in the currency. For example, 11.91€ must be sent as 1191 and the currency as EUR.Integer
tipAmountThe tip amount to be used as minor unit. This amount has the same currency as the transaction amount.Integer
originalTransactionDateDate of original transaction, provided if given Payment Solution requires this information to perform related operation (for e.g. Refund with DCC)String
paymentSolutionReferenceA previous transaction reference used for subsequent transactions like a Reversal. This value is defined by the payment application and contains all necessary data to perform subsequent transactions. This value can differ based on the payment application and can only be used on the same device.String
rateReferenceIdentifierIdentifier of the rate used in DCC transactionString
referenceReference to be send to the payment solution for reconciliationString
receiptFormatTo override the default receipt formatArray (of pre-defined 4.1.1 Receipt Format)
receiptDelegationThis flag is used to deactivate the payment solution receipt handling. Per default the payment solution will take care about the receipt delivery as configured by the corresponding TMS. To deactivate the payment solution specific receipt handling false has to be set.Boolean
receiptWidthThe receipt width (characters per line) for the formatted receipt. If the value is not defined the payment solution default one will be used.Integer
recognitionTimeoutDefines the timeout before an error will be returned in millisecondsInteger
recognitionOptionsCard recognition optionsArray (of pre-defined 4.1.2 Recognition Option)
receiptTargetDefines the receipt which shall be printedString (pre-defined 4.1.3 Receipt Target)
cashbackAmountThe cashback amount to be used as minor unit. This amount has the same currency as the transaction amount.Integer
customerLanguageLanguage the payment application shall use towards the cardholder before the card is read and the language is agreed between the terminal and the card. If the language is not supported or not recognized by the payment application the default language of the terminal will be used.String
useManualPanKeyEntryFlag that will inform the payment solution to offer manual PAN key entry instead of physical card reading. Default: falseBoolean
productSelectionIdentifier of the product used by the payment solution, this is used in the Product Selection use case to inform the payment solution that a user chose to pay with a voucher.Object (4.2.16 Product Selection item)
multiAccountIndexIndex used in the case of a Multi-account transaction to identify which account should be reimbursed.Integer
accessibilityContains mandatory settings for enhancing usability for individual accessibility with needs.Object (4.1.4 Accessibility Item)

4.1.1 Receipt Format

The receipt format defines how to retrieve the receipt. Default is formatted. If an empty array is sent no receipt will be returned. The following values are possible

Value (String)Purpose
FORMATTEDReturn the receipt in a payment response as String (default)
JSONReturn the receipt in a payment response as JSON

4.1.2 Recognition Option

Value (String)Purpose
WPI_RECOGNITION_OPTION_RETURN_CUSTOMER_TOKENUsed to create a token for the card that was read
WPI_RECOGNITION_OPTION_RETURN_MIFARE_DETAILSUsed to recognize a non-payment card, like MIFARE. The UID and card type will be evaluated

4.1.3 Receipt Target

Value (String)Purpose
CARDHOLDERUsed to print the cardholder receipt
MERCHANTUsed to print the merchant receipt
BOTHUsed to print the merchant and cardholder receipt one after the other

4.1.4 Accessibility item

Field NameDescriptionTypeCondition
contrastModeaccepted values:IntegerMandatory
voiceGuidanceaccepted values:IntegerMandatory
volumeaccepted values:IntegerMandatory
playbackSpeedaccepted values:IntegerMandatory
displayFontSizeaccepted values:IntegerMandatory

4.2 Response Data

All data has to be provided as JSON and will be provided as *WPI_RESPONSE *extra.

Field NameDescriptionType
resultResult of the transaction (success or failure)String (pre-defined 4.2.2 Result)
errorConditionSpecific error reason (see table below)String (pre-defined 4.2.3 Error Condition)
actionCodeSpecific action to be performed by the business applicationString (pre-defined 4.2.4 Action Code)
remarkTerminal / transaction specific message for detailed error descriptions. Text provided by payment app in EnglishString
timestampDate and time of the transaction, indicated by the payment application towards the acquirer.String
currencyCurrency code of the transaction. Alpha code value defined in ISO 4217 e.g. EURString
authorizedAmountAmount of the transaction, including tip and cashback. The fraction is taken from the currency code. Example:Integer
brandIdentiferBrand specific identifier, also known as AID. This is scheme specific e.g. A0000000041010 is MastercardString
brandNameBrand name of used payment card, like Mastercard, Visa, American Express and so onString (pre-defined 4.2.11 Brand Name)
customerLanguageLanguage used on all screens towards the cardholder after the card is read and the language is agreed between the terminal and the card. The same language can be used while formatting the receipt, unless terminal is configured differently.String
applicationIdentifierPayment card application identifier dependent on the used card e.g. for Mastercard A00000041010String
applicationLabelPayment card application label, depending on the used card e.g. Mastercard DEBITString
receiptContains the requested receipts. Depending on the format for more details check the receipt chapter.Object (5.2.5 Receipt)
paymentSolutionReferenceTransaction specific and unique identification. This value is defined by the payment application and contains all necessary data to perform subsequent transactions. This value can differ based on the payment application and can only be used on the same device.String
tipAmountThe tip amount that was entered by the cardholder during the transaction with the payment solutionInteger
referenceReference to be send to the payment app for reconciliation. The reference will be the same value as in the request.String
softwareVersionPayment Solution software versionString
terminalIdentifierThe terminal identifier configured for the Payment Solution.String
terminalIdentifierLongTerminal identifier with additional information that allows to recognize given terminal among different systems.String
supportedLanguagesList of language that are supportedArray
cardholderDefaultLanguageThe configured cardholder default languageString
merchantLanguageThe configured merchant default languageString
countryCodeThe country code of the terminal ISO 3166-1 (alpha-2 code)String
defaultCurrencyThe default currency that is configured for the payment solution.String
supportedCurrenciesAll currencies that are supported by the payment solution.Array
shopInfoThe shop information of the terminal. Usually these are the first three lines of each receiptObject (4.2.1 ShopInfo)
acquirerProtocolThe used acquirer protocol by the payment solution, usually this is the official acronym like CTAPString (pre-defined 4.2.9 Acquirer Protocol)
supportedTicketFormatsThe supported ticket formats by the payment solutionString (pre-defined 4.1.1 Receipt Format)
supportReceiptDelegationWhether the payment application supports (True) receipt delegation or not (False). Receipt delegation is when any business application asks the payment solution to handle the receipt. Any payment solution can handle the receipt if a printer or a digital solution is available.Boolean
paymentInformationDetailed payment solution information per brand & acquirerArray (4.2.6 Payment Information)
paymentSolutionSupportedServiceTypesThe service types supported by the payment solution are independent of the card brand. Each payment solution can support multiple service types, but often not every service type is supported by every card brand.Array (2.1.1.1 Financial Service Types & 2.1.1.2 Management Service Types)
supportsManualPanKeyEntryWhether the payment solution has enabled Manual Pan Key EntryBoolean
manualPanKeyEntrySupportedServiceTypesSpecify which service types supported by the payment solution allow to perform a manual pan key entryArray (2.1.1.1 Financial Service Types)
supportsTipWhether the payment solution has enabled tip supportBoolean
entryModeThe technology that was used to read the cardString (pre-defined 4.2.7 Supported Technologies)
isoTrack1ISO track 1 dataString
isoTrack2ISO track 2 dataString
isoTrack3ISO track 3 dataString
tokenThe token of the card PAN / UID (in case of NFC non payment related card) that was read. The token should be an unique value, generated by the payment solution and can be reproduced on the same device. This token is used to identify the customer.String
onlineTokenThe token PAN received by Payment Solution from the payment provider network.String
onlineTokenSourceName of a tokenization service that generated a token provided in onlineToken field.String (pre-defined 4.2.19 Token Service Provider)
panPAN of the card (due to PCI regulatory payment card PAN data are always masked except last 4 digits). For whitelisted non-payment cards the full PAN the unmasked will be used.String
expiryDateExpiry date of payment card, format is YYMM.String
mediaTypeMedia type of NFC non-payment card. e.g. MIFARE UltralightString
mediaUniqueIdentifierUID of NFC based non-payment cardString
waitForNextActionWhether the payment solution keeps the card in read mode for a subsequent transaction or notBoolean
nextActionWaitTimeThe time how long the card is kept in read mode, in millisecondsInteger
acquirerIdentifierThe Acquirer IdentifierString
merchantIdentifierThe Merchant IdentifierString
authorizationCodeAuthorization code from the authorization system for the specific transactionString
dccUsedWhether DCC was (True) used or not (False) for the transactionBoolean
dccOfferedWhether DCC was (True) offered to the cardholder or not (False) for the transactionBoolean
dccAmountThe DCC amount of the transaction. In case DCC was not used in given transaction, empty value shall be returnedInteger
dccCurrencyThe DCC currency of the transaction. In case DCC was not used in given transaction, empty value shall be returned.String
dccExchangeRateThe DCC exchange rate of the transaction. In case DCC was not used in given transaction, empty value shall be returnedString
authorizationModeIndicating whether the transaction was performed online or offlineString (pre-defined 4.2.10 Authorization Mode)
cashbackAmountThe cashback amount used in the transaction. (Minor unit)Integer
cardDataInputThe card data input methodString (pre-defined 4.2.12 Card Data Input)
cardholderVerificationMethodThe cardholder verification method determined during the transaction processing by the payment solution.String (pre-defined 4.2.13 Cardholder Verification Method
surchargeAmountThe surcharge amount is added to a transaction to cover the average merchant fees for a transaction. This configuration is done at payment provider level and require an approval of the cardholder.Integer
supportsReceiptWidthWhether Payment Solution supports setting receipt width by the business applicationBoolean
voiceReferralPhoneNumberPhone number returned to support Phone Authorized transaction i.e. to perform Voice Referral and obtain authorization codeString
phoneAuthorizedIndicates whether Voice Referral was performed.Boolean
forcedAcceptanceIndicates whether Forced Acceptance was performed.Boolean
externalTransactionIdentifierTransaction identifier provided to Payment Solution by the network to support for e.g. Omnichannel use casesString
externalTransactionIdentifierSourceName of a service that generated transaction identifier provided in externalTransactionIdentifier fieldString (pre-defined 4.2.18 Payment Service Provider)
productSelectionIdentifier of the product used by the payment solution, this is used in the Product Selection use case to inform the payment solution that a user chose to pay with a voucher.Object (4.2.16 Product Selection item)
supportedProductsSupported products activated for the terminal (e.g meal vouchers, eco vouchers, etc).Array (4.2.14 Supported Products Item)
multiAccountIndexIndex used in the case of a Multi-account transaction to identify which account should be reimbursed.Integer
supportsMultiAccountWhether the multi-account functionality is supported and is enabled or not.Boolean
supportedMultiAccountServiceTypesList of service types that allow for a Multi-Account transaction.Array
multiAccountSelectionListA list of account indexes and their corresponding descriptions to choose from.Array (4.2.17 Account Item)

4.2.1 ShopInfo

Field NameDescriptionTypeCondition
addressAddress of the shop usually street and numberStringOptional
cityCity of the shopStringOptional
countryCountry of the shopStringOptional
logoContent provider URI of the logo to be usedStringOptional
nameName of the shopStringOptional
zipCodeZIP code of the shopStringOptional

4.2.2 Result

ResultDescription
WPI_RESULT_SUCCESSIn case of successful transaction
WPI_RESULT_FAILUREIn case of failed transaction

4.2.3 Error Condition

Error ConditionDescription
WPI_ERR_COND_NONEWill always be present if no error occurred
WPI_ERR_COND_SERVICE_NOT_SUPPORTEDThe requested service type is not supported by the Payment Application/Service
WPI_ERR_COND_ABORTEDThe initiator of the request has sent an abort request, which was accepted and processed.
WPI_ERR_COND_BUSYThe Payment Application/Service is busy. Try later.
WPI_ERR_COND_CARD_READ_ERRThe payment application was not able to read the card. Either due to inconsistent data or wrong card handling.
WPI_ERR_COND_CARD_REMOVEDCard was removed during transaction processing
WPI_ERR_COND_CARD_ALREADY_INSERTEDCard is already inserted when transaction started
WPI_ERR_COND_USER_CANCELThe user has aborted the transaction
WPI_ERR_COND_USER_TIMEOUTA timeout occurred while waiting for user interaction.
WPI_ERR_COND_HOST_REFUSALThe Acquirer/Issuer refused the transaction.
WPI_ERR_COND_NETWORK_ISSUENetwork issue occurred (host not reachable, network down, … )
WPI_ERR_COND_TRANSACTION_TIMEOUTTimeout occurred during transaction (other than with user interaction).
WPI_ERR_COND_ENCRYPTION_ISSUEEncryption issue (PAN, PIN …) caused the transaction to be aborted.
WPI_ERR_COND_INVALID_KEYThe secure component of the terminal is missing a key it needs to perform the transaction.
WPI_ERR_COND_INVALID_TRANSACTION_REQInvalid transaction request received. One of the fields in the transaction request object was invalid.
WPI_ERR_COND_INTERNALInternal error within payment service
WPI_ERR_COND_INVALID_AMOUNTEntered invalid amount
WPI_ERR_COND_INVALID_CURRENCYTransaction started with invalid currency. The currency is a global attribute of the underlying payment service.
WPI_ERR_COND_APP_NOT_SUPPORTEDNone of the applications on the EMV NFC/IC chip card are accepted or the ISO/PAN on the magnetic stripe track didn’t result in a brand being accepted
WPI_ERR_COND_MISSING_MANDATORY_PARAMETERA mandatory parameter is missing in the request.
WPI_ERR_COND_GENERICA generic error that is not specified in detail
WPI_ERR_COND_NOT_INITIALIZEDThe payment solution is not configured and cannot process the request.
WPI_ERR_COND_WPI_VERSION_NOT_SUPPORTEDThe request contains a WPI version which is not supported by the payment solution.
WPI_ERR_COND_SESSION_ID_ALREADY_IN_USEIn case of the SESSION ID was already used and the payment solution would not be able to identify the last transaction for recovery then this error code is returned.
WPI_ERR_COND_INVALID_PASSWORDFor password protected transactions, this error code is returned if the password entered in the payment solution, by the merchant, is incorrect.
WPI_ERR_COND_RECEIPT_DELEGATION_NOT_SUPPORTEDIf a transaction was started with receipt delegation and receipt delegation is not supported this error code is returned
WPI_ERR_COND_MANUAL_PAN_KEY_ENTRY_NOT_SUPPORTEDIn case of manual PAN key entry is not possible but requested.
WPI_ERR_COND_MPKE_NOT_SUPPORTED_BY_SERVICE_TYPEIn case of manual PAN key entry is not supported by given service type
WPI_ERR_COND_CASHBACK_NOT_SUPPORTEDIf a transaction was started with cashback and cashback is not supported
WPI_ERR_COND_TIP_NOT_SUPPORTED_BY_PAYMENT_SOLUTIONIf tipAmount is present in the transaction request but not supported by the payment solution
WPI_ERR_COND_TIP_NOT_SUPPORTED_BY_SERVICE_TYPEIf tipAmount is present in the transaction request but not supported for the specific service type
WPI_ERR_COND_TIP_NOT_SUPPORTED_BY_BRANDIf tipAmount is present in the transaction request but not supported by cardholder card brand
WPI_ERR_COND_TIP_AMOUNT_EXCEEDS_MAXIMUMIf tipAmount is higher than the maximum allowed tipAmount configured for the payment solution
WPI_ERR_COND_INVALID_AUTHORIZATION_CODEIf authorizationCode was rejected by Payment Solution
WPI_ERR_COND_PRODUCT_NOT_SUPPORTEDif productSelection is not supported or given product is not active on given Payment solution
WPI_ERR_COND_DAY_END_NOT_YET_PERFORMEDDay End was not yet performed on this given terminal; therefore, no data can be returned
WPI_ERR_COND_VOICE_REFERRAL_REQUIREDTransaction requires Voice Referral in order to obtain authorization code

4.2.4 Action Code

Action CodeDescription
WPI_ACTION_CODE_NONENo additional action to be performed
WPI_ACTION_CODE_ASK_LEGAL_IDENTIFICATIONAsk the cardholder for a legal identification and write the identification data down on the receipt.
WPI_ACTION_CODE_ASK_SIGNATUREAsk the cardholder to sign the merchant receipt to complete the authorization.

4.2.5 Receipt

Field NameDescriptionType
formattedMerchant and cardholder receipt are contained in this field. Both receipts are available as text preformatted. The receipt wide is defined by the payment application (often 32 characters) and depends on the printer capabilities or configuration.JSON object (check example below)
jsonMerchant and cardholder receipt are contained in this field. Both receipts are represented in a JSON format. This is used to create a own format.JSON object (check example below

The receipt language is the same as it is for the payment app. As it is written in the JSON specification ( https://www.ietf.org/rfc/rfc4627.txt ) every control character has to be escaped like shown below but on the same line.

4.2.5.1 Multi account support in receipts

Account index and name identifying the account beneficiary should be printed below date/ time.

FORMATTED:

formatted: {
"merchant":" This is to confirm your transaction\\n
registered at:\\n
----------------------------------------\\n
SPS-Softpos Pilot 02\\n
Grzybowska 4/246\\n
00-131 Warszawa\\n
----------------------------------------\\n
15.02.2023 22:36\\n
Account : 3 Dr. Jozef Black\\n

0,03 PLN\\n
Visa **** **** **** 7984\\n
Transaction details: \\n
Status: AUTHORIZED\\n
Authorization code: (0) 741451\\n
ARQC: 61BC5EDC34F63979\\n
AID: A0000000031010\\n
Contactless\\n
Type: Sale\\n
POS ID: APP00002\\n
MID: 103810047\\n
VISA CARD",
"client":" This is to confirm your transaction\\n
registered at:\\n
----------------------------------------\\n
SPS-Softpos Pilot 02\\n
Grzybowska 4/246\\n
00-131 Warszawa\\n
----------------------------------------\\n
15.02.2023 22:36\\n
0,03 PLN\\n
Visa **** **** **** 7984\\n
Transaction details: \\n
Status: AUTHORIZED\\n
Authorization code: (0) 741451\\n
ARQC: 61BC5EDC34F63979\\n
AID: A0000000031010\\n
Contactless\\n
Type: Sale\\n
POS ID: APP00002\\n
MID: 103810047\\n
VISA CARD"
}
}

JSON Format:

"json":{
"receiptTargets":{
"merchant":{
"description": "List of field names of the receipt to be included for the merchant receipt"
"type":"array",
"items":{
"type":"string"
}
},
"client":{
"description": "List of field names of the receipt to be included for the client receipt"
"type":"array",
"items":{
"type":"string"
}
}
},
"duplicate":{
"type":"boolean"
},
"shopInfo":{
"name":{
"type":"string"
},
"address":{
"type":"string"
},
"zipCode":{
"type":"string"
},
"city":{
"type":"string"
},
"country":{
"type":"string"
},
"logo":{
"type":"string" // Content provider uri to the logo file
}
},
"terminalIdentifier":{
"type":"string"
},
"terminalIdentifierLong":{
"type":"string"
},
"period":{
"type":"string"
},
"transactionIdentifier":{
"type":"string"
},
"currency":{
"type":"string"
},
"amount":{
"type":"integer"
},
"cashbackAmount":{
"type":"integer"
}
"tipAmount":{
"type":"integer"
},
"token":{
"type":"string"
},
"par":{
"type":"string"
},
"brandName":{
"type":"string"
},
"applicationIdentifier":{
"type":"string"
},
"issuerName":{
"type":"string"
},
"pan":{
"type":"string"
},
"maskedPan":{
"type":"string"
},
"cardSequence":{
"type":"string"
},
"cardExpiration":{
"type":"string"
},
"serviceName":{
"type":"string"
},
"timestamp":{
"type":"string"
},
"authorizationCode":{
"type":"string"
},
"reference":{
"type":"string"
},
"acquirerIdentifier":{
"type":"string"
},
"entryMode":{
"type":"string"
},
"cardDataInput":{
"type":"string"
},
"cardholderVerificationMethod":{
"type":"string"
},
"legalIdentificationRequired":{
"type":"boolean"
},
"cardBalance":{
"old":{
"type":"string"
},
"new":{
"type":"string"
},
"cardholderText":{
"type":"string"
}
},
"paymentSolutionReference":{
"type":"string"
},
"operatorIdentifier":{
"type":"string"
},
"cardholderReceiptText":{
"type":"string"
},
"acquirerReceiptText":{
"type":"string"
},
"footerLines":{
"type":"array",
"items":{
"line":{
"type":"string"
}
}
},
"additionalData":{
"type":"array",
"items":{
"key":{
"type":"string"
},
"value":{
"type":"dynamic"
}
}
},
"account": {
"type": "object",
"properties": {
"index": {
"type": "integer"
},
"name": {
"type": "string"
}
},
}
}

4.2.6 Payment Information Item

Field NameDescriptionTypeCondition
acquirerIdentifierThe acquirer identifier for the given brandStringMandatory
merchantIdentifierMerchant identifier that is used by the acquirerStringMandatory
acquirerTerminalIdentifierTerminal identifier that is used by the acquirer to identify the terminalStringMandatory
brandIdentiferBrand specific identifier, also known as AID. This is scheme specific e.g. A0000000041010 is MastercardStringMandatory
brandNameThe brand name like MastercardString (pre-defined 4.2.11 Brand Name)Mandatory
supportedServiceTypesSupported service types for the brandArray (2.1.1.1 Financial Service Types)Mandatory
cancellableServiceTypesService types that can be reversedArray (2.1.1.1 Financial Service Types)Mandatory
numberOfCancellableTransactionsNumber of last successful and finalized (i.e excludes Pre-Authorization related service types) transactions that can be reversed.IntegerMandatory
supportedTechnologiesSupported technologies for card readingArray (4.2.7 Supported Technologies)Mandatory
supportsDCCWhether Dynamic Currency Conversion (DCC) is supported and enabled or notBooleanMandatory
supportsCashbackWhether cashback is supported and enabled or notBooleanMandatory

4.2.7 Supported Technologies

Entry ModeDescription
WPI_ENTRY_MODE_MANUALManual Key Entry support
WPI_ENTRY_MODE_MAGSTRIPEMagnetic stripe support
WPI_ENTRY_MODE_CHIPEMV chip (ICC) support
WPI_ENTRY_MODE_NFCEMV NFC chip support
WPI_ENTRY_MODE_NFC_MIFARENFC MIFARE support
WPI_ENTRY_MODE_QR_CODEAlternative payment method support, via QR Code

4.2.8 Supported Ticket Format

The supported ticket formats are defined in 4.1.1 Receipt Format

4.2.9 Acquirer Protocol

Acquirer Protocol
CB2A
CTAP
ep2
MULTI-ACQUIRER
NEXO
ZVT

4.2.10 Authorization Mode

Authorization ModeDescription
WPI_AUTHORIZATION_MODE_ONLINEAuthorized online
WPI_AUTHORIZATION_MODE_OFFLINEAuthorized offline

4.2.11 Brand Name

Mapping should be based on Payment Application configuration returned by Acquirer. If not possible to find the right match (for e.g. brand is not specified or Payment Solution does not know what brand was used) WPI_BRAND_NAME_OTHER value shall be returned. In case of local brands, WPI_BRAND_NAME_LOCAL_DEBIT_CARD or WPI_BRAND_NAME_LOCAL_CREDIT_CARD shall be returned.

Brand Name
WPI_BRAND_NAME_MASTERCARD
WPI_BRAND_NAME_MASTERCARD_DEBIT
WPI_BRAND_NAME_MAESTRO
WPI_BRAND_NAME_VISA
WPI_BRAND_NAME_VISA_DEBIT
WPI_BRAND_NAME_VISA_ELECTRON
WPI_BRAND_NAME_VPAY
WPI_BRAND_NAME_JCB
WPI_BRAND_NAME_AMERICAN_EXPRESS
WPI_BRAND_NAME_DINERS_CLUB
WPI_BRAND_NAME_DISCOVER
WPI_BRAND_NAME_CHINA_UNIONPAY
WPI_BRAND_NAME_LOCAL_CREDIT_CARD
WPI_BRAND_NAME_GIROCARD
WPI_BRAND_NAME_CARTE_BANCAIRE
WPI_BRAND_NAME_BANCONTACT
WPI_BRAND_NAME_LOCAL_DEBIT_CARD
WPI_BRAND_NAME_ALIPAY
WPI_BRAND_NAME_WECHAT_PAY
WPI_BRAND_NAME_TWINT
WPI_BRAND_NAME_PAYCONIQ
WPI_BRAND_NAME_LOCAL_QR_CODE_BRAND
WPI_BRAND_NAME_BLIK
WPI_BRAND_NAME_OTHER

4.2.12 Card Data Input

Card Data InputDescription
WPI_CARD_DATA_INPUT_MANUAL_ENTRYCard data was entered manually
WPI_CARD_DATA_INPUT_PROXIMITY_ICCCard data was read via NFC with chip mode
WPI_CARD_DATA_INPUT_PROXIMITY_MAGNETIC_STRIPECard data was read via NFC with magnetic stripe mode
WPI_CARD_DATA_INPUT_ICCCard data was read via Chip reader
WPI_CARD_DATA_INPUT_EMV_FALLBACKCard data was read by Magnetic stripe reader due to a chip error (fallback)
WPI_CARD_DATA_INPUT_MAGNETIC_STRIPECard data was read through magnetic stripe reader
WPI_CARD_DATA_INPUT_ALTERNATIVE_PAYMENT_METHODCard data was provided through an alternative payment method (e.g. QR Code payment)
WPI_CARD_DATA_INPUT_PAN_TOKENCard data was provided via a tokenization service which is referencing the PAN data
WPI_CARD_DATA_INPUT_REFERENCE_BASEDCard data evaluated by the acquiring system from a previous (referenced) transaction

4.2.13 Cardholder Verification Method

Cardholder Verification Method (CVM)Description
WPI_CVM_NO_CVMNo CVM executed
WPI_CVM_SIGNATURESignature CVM required
WPI_CVM_PIN_ONLINEPIN online CVM executed
WPI_CVM_PIN_OFFLINEPIN offline CVM executed
WPI_CVM_CD_CVMConsumer Device CVM
WPI_CVM_PIN_ONLINE_AND_SIGNATUREPIN online executed and signature required
WPI_CVM_PIN_OFFLINE_AND_SIGNATUREPIN offline executed and signature required

4.2.14 Supported Products Item

Field NameDescriptionTypeCondition
productProviderName of the voucher providerStringMandatory
isActiveWhethere the voucher provider is active in the payment solutionBooleanMandatory
productTypeList of voucher types for the given providerArray (4.2.15 Product type item)Mandatory

4.2.15 Product Type Item

Field NameDescriptionTypeCondition
productDataIdIdentifier of the product used for Product Selection by the Payment SolutionStringMandatory
valuesName of the product to be selected by the merchant available in the languages supported by the payment solutionObject (4.2.15.1 Values item)Mandatory
4.2.15.1 Values item

This object shall contain all supported languages as fields described according to ISO 639-1 (alpha-2 code) and actual translations of given product as their values.

Example: "values": { "en": "Meal Voucher", "fr": "Chèques Repas", "nl": "Maaltijdcheque", "de": "Mahlzeitscheck" }

4.2.16 Product Selection Item

Field NameDescriptionTypeCondition
productDataIdIdentifier of the product used by the payment solution,StringMandatory
productProviderName of the voucher providerStringMandatory

4.2.17 Account Item

Field NameDescriptionTypeCondition
indexNumber range from 0-9IntegerMandatory
nameAccount index beneficiaryStringMandatory

4.2.18 Payment Service Provider

Payment Service Provider
WPI_PSP_GOPAY
WPI_PSP_SAFERPAY
WPI_PSP_EP2
WPI_PSP_OTHER

4.2.19 Token Service Provider

Token Service Provider
WPI_TSP_GTS
WPI_TSP_ONELINK
WPI_TSP_OTHER

5 Payment Solution Implementation

Mandatory Attributes and Result Structure

  1. The technical design is based on defining only the mandatory attributes in the request needed to meet every requested business use case aiming to be payment protocol agnostic.
  2. The payment solution shall support every combination of attributes defined in the request.
  3. The result structure contains every possible attribute to be returned to meet every use case.

Payment Solution Reference

  1. The payment solution reference must be designed in a unique way so that all follow on transactions can be handled with this. For example if you do a pre-authorization, it needs to contain all payment-specific fields to do all follow-on transactions like cancel pre-authorization, completion, and so on. WPI supports the so-called reference, for more details check Data Dictionary 4.1 Request Data, this field is also known as a merchant reference and used for reconciliation.
  2. The payment solution shall print the paymentSolutionReference on cardholder receipt in plain text or as QR Code:
    1. compliant with ISO/IEC 18004:2015 (or higher) standard.
    2. highest (H) error correction level must be ensured.
    3. QR Code version should be selected according to the length of data that given Payment Solution will return.
    4. QR Code content should be limited to paymentSolutionReference value with no additional data (i.e. raw data).
  3. The payment solution reference shall be as short as possible and easy to type manually within another Android application.
  4. The payment solution reference should remain interoperable among all payment solutions for given payment protocol

Remark and Error Handling

  1. The payment solution **shall **provide a remark that is understandable by a third-party integrator and only in case of an error condition not equal to WPI_ERR_COND_NONE.
  2. The payment solution shall send back the errorCondition *WPI_ERR_COND_BUSY *in case of a transaction currently in progress.
  3. Payment Instrumentation Recognition Request
    1. In case of a Payment Instrumentation Recognition Request, the terminal shall:
      1. perform the card withdrawal in case of no amount & currency is present.
      2. not wait for another action in case of no amount & currency is present.
      3. return a token for the card PAN or the NFC UID (in case of NFC non-payment related cards) that was read. The token should be a hash which is generated by the Payment Solution and can be reproduced at least on the same device.

Tip processing

  1. In case of tipAmount in the WPI request is not defined the Payment Solution has to show the tip entry screens.
  2. In case of *tipAmount *in the WPI request is defined >= 0 the Payment Solution will take the tip amount from the request and not show the tip entry screen
  3. In case of tipAmount is null or 0 no tip will be processed as part of given transaction

Other Requirements

  1. The payment solution must store the *SESSION_ID *for the last transaction as well as the last transaction object of each business application. Due to this, a recovery procedure can be implemented with the last transaction request.
  2. For compatibility reasons and a certain grace period, every payment application shall support the last two major versions starting with WPI 2.0
  3. Password-protected transaction types such as refund, credit, and follow-on credit must be password protected. In case of a standalone configuration of the payment solution, password entry and validation must be done by the payment solution.
  4. The payment solution shall always take care off the receipt handling - depending on the TMS configuration. Business applications can override (deactivate) the default behavior by setting the receiptDelegation to false .