Skip to main content

WPI Version 2.1

Revision #7

Table of Contents

  1. Overview
  2. What's New in 2.1
  3. Interface Structure
  4. Service Types
  5. Financial Transactions
  6. Management Actions
  7. Information Services
  8. Data Dictionary
  9. Payment Solution Implementation
  10. Migration from 2.0

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.


What's New in 2.1

Information Functional Extensions
  • Conditions for ShopInfo added
    • Conditions for PaymentInformationItem added
Management Functional Extensions

Payment Solution Information request: - supportsManualPanKeyEntry flag added - supportsTip flag added

Financial Extensions - New Service
  • Follow on Payment added (WPI_SVC_FOLLOW_ON_PAYMENT)
Financial Extensions - Request Fields
  • cashbackAmount
    • tipAmount
    • useManualPanKeyEntry
    • receiptDelegation
    • receiptFormat
    • customerLanguage
Financial Extensions - Response Fields
  • acquirerIdentifier, merchantIdentifier, authorizationCode
    • dccOffered, dccCurrency, dccExchangeRate
    • authorizationMode, entryMode, terminalIdentifier
    • pan, cashbackAmount, cardholderVerificationMethod, cardDataInput
General Changes
  • brandName changed to pre-defined values
    • Chapter name "reservation" changed to "pre-authorization"
    • JSON receipt structure extended with new fields

Revision History

  • reference field restored in Financial Response table
    • supportsReceiptDelegation corrected to supportReceiptDelegation
    • Sections numbering fixed

Interface Structure

The WPI provides a set of intents that developers can use to build apps that work with the interface.

Intent Types

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

Action Categories

These actions start the payment solution that are processing financial transactions or require user interaction.

- Uses [Android intents](https://developer.android.com/reference/android/content/Intent)

Versioning

The WPI uses versioning with the format Y.X (e.g., 1.0, 2.1):

  • Y (Major Version): Signifies a significant milestone with potential breaking changes. A version 2.x request cannot be used with version 1.x
  • X (Minor Version): Represents new features or improvements that are backward compatible. A version 1.1 must remain compatible with version 1.0
  • Revision Number: Specific iteration with small fixes and enhancements (e.g., "3.2 Revision #9")

Request Extras

ExtraDescriptionTypeCondition
WPI_VERSIONUsed WPI versionStringMandatory
WPI_SESSION_IDIdentifier of a WPI exchange. Must be unique, part of response, and not reused (except for last transaction recovery)StringMandatory
WPI_SERVICE_TYPESpecify the subtype of action to be executedStringMandatory
WPI_REQUESTJSON structured data for the service typeStringMandatory for Financial, Optional for Management
Any business application should store the `WPI_SESSION_ID` before sending the intent. This allows recovery with the last transaction function to check the outcome of a previous transaction in case of a crash.

Response Extras

ExtraDescriptionTypeCondition
WPI_SERVICE_TYPESubtype of action that was executedStringMandatory
WPI_RESPONSEJSON structured data processed for the requested service typeStringMandatory
WPI_VERSIONUsed WPI versionStringMandatory
WPI_SESSION_IDIdentifier of a WPI exchange provided by the clientStringMandatory

Service Types

Financial Service Types

Service TypePurpose
WPI_SVC_PAYMENTPerform a simple sale transaction
WPI_SVC_CANCEL_PAYMENTReverse a previous transaction
WPI_SVC_REFUNDRefund a previous transaction
WPI_SVC_PRE_AUTHORIZATIONPerform a pre-authorization
WPI_SVC_CANCEL_PRE_AUTHORIZATIONCancel a previous pre-authorization
WPI_SVC_UPDATE_PRE_AUTHORIZATIONIncrement a previous pre-authorization
WPI_SVC_CANCEL_UPDATE_PRE_AUTHORIZATIONCancel the previous update of a pre-authorization
WPI_SVC_PAYMENT_COMPLETIONComplete a pre-authorization
WPI_SVC_CANCEL_PAYMENT_COMPLETIONCancel the completed pre-authorization
WPI_SVC_DEFERRED_PAYMENT_AUTHORIZATIONExecute a deferred payment authorization (energy solution use-case)
WPI_SVC_DEFERRED_PAYMENT_COMPLETIONExecute a deferred payment completion
WPI_SVC_PAYMENT_INSTRUMENT_RECOGNITIONPayment card or non-payment card recognition without performing a real transaction
WPI_SVC_FOLLOW_ON_CREDITReferenced based credit transaction based on a previous transaction
WPI_SVC_FOLLOW_ON_PAYMENTReferenced based payment transaction based on a previous transaction (New in 2.1)

Management Service Types

Service TypePurpose
WPI_SVC_PAYMENT_MENUOpen the payment solution menu
WPI_SVC_DAY_ENDUpload transactions for final settlement
WPI_SVC_PAYMENT_PARAMETERIZATIONFetch latest payment solution configuration
WPI_SVC_ACQUIRER_PARAMETERIZATIONFetch latest acquirer parameters
WPI_SVC_PRINT_RECEIPTReceipt printing
WPI_SVC_ABORTAbort an ongoing transaction

Information Service Types

Service TypePurpose
WPI_SVC_LAST_TRANSACTIONReturn the last transaction result
WPI_SVC_PAYMENT_INFORMATIONRetrieve payment solution information and supported service types

Financial Transactions

Standard Financial Response

Field NameTypeCondition
resultStringMandatory
errorConditionStringMandatory
referenceStringConditional - Mandatory for transactions that sent reference in request
remarkStringConditional - only for unsuccessful transactions
actionCodeStringConditional - only for successful transactions
timestampString (ISO 8601)Conditional - only for successful transactions
currencyStringConditional - only for successful transactions
authorizedAmountIntegerConditional - only for successful transactions
customerLanguageStringConditional - only when payment card was used
brandNameString (pre-defined)Conditional - only when payment card was used
applicationIdentifierStringConditional - only when payment card was used
applicationLabelStringConditional - only when payment card was used
receiptObjectConditional - always present for successful transactions
paymentSolutionReferenceStringConditional - always present for successful transactions
acquirerIdentifierStringConditional - always present for successful transactions
merchantIdentifierStringMandatory
terminalIdentifierStringMandatory
authorizationCodeStringConditional - when transaction was processed online
cashbackAmountIntegerConditional - when cashback is activated and amount given in request
tipAmountIntegerConditional - when tip is active and entered by cardholder or provided in request
dccUsedBooleanConditional - when DCC was selected by cardholder
dccOfferedBooleanConditional - when DCC is active and selection was shown
dccAmountIntegerConditional - when cardholder selected own currency
dccCurrencyStringConditional - when cardholder selected own currency
dccExchangeRateStringConditional - when cardholder selected own currency
entryModeString (pre-defined)Conditional - for successful non-reference based transaction
authorizationModeString (pre-defined)Conditional - for successful transaction
panStringConditional - for successful transaction
cardholderVerificationMethodString (pre-defined)Conditional - for successful transaction
cardDataInputString (pre-defined)Conditional - for successful transaction

Payment (WPI_SVC_PAYMENT)

Request:

Field NameTypeCondition
currencyStringMandatory
requestedAmountIntegerMandatory
tipAmountIntegerOptional
cashbackAmountIntegerOptional
referenceStringOptional
customerLanguageStringOptional
useManualPanKeyEntryBooleanOptional
receiptFormatArrayOptional
receiptDelegationBooleanOptional
receiptWidthIntegerOptional

Cancellation

The cancellation (reversal) can be executed for several service types. Use the correct cancellation service type based on the initial service type.

Service Types: WPI_SVC_CANCEL_PAYMENT, WPI_SVC_CANCEL_PRE_AUTHORIZATION, WPI_SVC_CANCEL_UPDATE_PRE_AUTHORIZATION, WPI_SVC_CANCEL_PAYMENT_COMPLETION

Request:

Field NameTypeCondition
paymentSolutionReferenceStringMandatory
customerLanguageStringOptional
receiptFormatArrayOptional
receiptDelegationBooleanOptional
receiptWidthIntegerOptional

Refund (WPI_SVC_REFUND)

Request:

Field NameTypeCondition
currencyStringMandatory
requestedAmountIntegerMandatory
referenceStringOptional
customerLanguageStringOptional
useManualPanKeyEntryBooleanOptional
receiptFormatArrayOptional
receiptDelegationBooleanOptional
receiptWidthIntegerOptional

Pre-authorization (WPI_SVC_PRE_AUTHORIZATION)

Request:

Field NameTypeCondition
currencyStringMandatory
requestedAmountIntegerMandatory
referenceStringOptional
customerLanguageStringOptional
useManualPanKeyEntryBooleanOptional
receiptFormatArrayOptional
receiptDelegationBooleanOptional
receiptWidthIntegerOptional

Update Pre-authorization (WPI_SVC_UPDATE_PRE_AUTHORIZATION)

Used to increase the pre-authorization amount. The requestedAmount is just the increment amount, not the total.

Request:

Field NameTypeCondition
currencyStringMandatory
requestedAmountIntegerMandatory
paymentSolutionReferenceStringMandatory
referenceStringOptional
customerLanguageStringOptional
receiptFormatArrayOptional
receiptDelegationBooleanOptional
receiptWidthIntegerOptional

Payment Completion (WPI_SVC_PAYMENT_COMPLETION)

To complete a previous pre-authorization. The final amount should be equal to or less than the total pre-authorization amount.

Using a higher amount for completion may result in an unsuccessful transaction because the higher amount was not reserved.

Request:

Field NameTypeCondition
currencyStringMandatory
requestedAmountIntegerMandatory
paymentSolutionReferenceStringMandatory
referenceStringOptional
customerLanguageStringOptional
receiptFormatArrayOptional
receiptDelegationBooleanOptional
receiptWidthIntegerOptional

Deferred Payment

Deferred payment for petrol transaction processing where the actual payment is delayed. Split into authorization and completion.

Service Type: WPI_SVC_DEFERRED_PAYMENT_AUTHORIZATION

| Field Name | Type | Condition |
|------------|------|-----------|
| `currency` | String | Mandatory |
| `requestedAmount` | Integer | Mandatory |
| `reference` | String | Optional |
| `customerLanguage` | String | Optional |
PSD2 imposes the amount to be present in the request. The "Multi-Session" concept is usually configured for performing "Parallel Transactions" to increase terminal availability.

Payment Instrument Recognition (WPI_SVC_PAYMENT_INSTRUMENT_RECOGNITION)

Used to avoid double tap for contactless entry mode. Two possibilities: token retrieval only, or card recognition with further payment processing.

Request:

Field NameTypeCondition
currencyStringOptional - if transaction processing should happen afterwards
requestedAmountIntegerOptional - if transaction processing should happen afterwards
serviceTypeStringOptional - if transaction processing should happen afterwards
cashbackAmountIntegerOptional - if service type supports cashback
tipAmountIntegerOptional - if service type or payment solution supports tip
recognitionTimeoutIntegerMandatory
recognitionOptionsArrayMandatory
customerLanguageStringOptional

Response:

Field NameTypeCondition
resultStringMandatory
errorConditionStringMandatory
entryModeStringMandatory on success
customerLanguageStringMandatory on success
isoTrack1StringConditional - magnetic stripe card
isoTrack2StringConditional - magnetic stripe card
isoTrack3StringConditional - magnetic stripe card
tokenStringMandatory for payment card processing
panStringMandatory for payment card processing
mediaTypeStringMandatory for non-payment card processing
mediaUniqueIdentifierStringMandatory for non-payment card processing
waitForNextActionBooleanMandatory on success
nextActionWaitTimeIntegerMandatory on success

Follow on Credit (WPI_SVC_FOLLOW_ON_CREDIT)

Card-not-present transaction using card data from a previous transaction. paymentSolutionReference is used to identify data necessary for follow-up transaction.

Request:

Field NameTypeCondition
currencyStringMandatory
requestedAmountIntegerMandatory
referenceStringOptional
paymentSolutionReferenceStringMandatory
customerLanguageStringOptional
receiptFormatArrayOptional
receiptDelegationBooleanOptional
receiptWidthIntegerOptional

Follow on Payment (WPI_SVC_FOLLOW_ON_PAYMENT) - New in 2.1

Card-not-present transaction using card data from a previous transaction. paymentSolutionReference is used to identify data necessary for follow-up transaction.

Request:

Field NameTypeCondition
currencyStringMandatory
requestedAmountIntegerMandatory
referenceStringOptional
paymentSolutionReferenceStringMandatory
customerLanguageStringOptional
receiptFormatArrayOptional
receiptDelegationBooleanOptional
receiptWidthIntegerOptional

Management Actions

Management actions have an empty request JSON content, except for services that contain a receipt.

Standard Management Response

Field NameTypeCondition
resultStringMandatory
errorConditionStringMandatory
receiptObjectConditional - only for services with receipts

Payment Menu (WPI_SVC_PAYMENT_MENU)

Opens the payment solution menu to trigger payment solution specific actions.

Day-End (WPI_SVC_DAY_END)

Uploads all transactions to the host for final settlement. Returns a receipt with transaction summary per brand.

Request:

Field NameTypeCondition
receiptFormatArrayOptional
receiptDelegationBooleanOptional
receiptWidthIntegerOptional

Payment Parameterization (WPI_SVC_PAYMENT_PARAMETERIZATION)

Synchronizes payment solution specific parameters with the corresponding management system.

Request:

Field NameTypeCondition
receiptFormatArrayOptional
receiptDelegationBooleanOptional
receiptWidthIntegerOptional

Acquirer Parameterization (WPI_SVC_ACQUIRER_PARAMETERIZATION)

Synchronizes with the acquirer system. Multi-Acquirer solutions do parameterization for all acquirers.

Request:

Field NameTypeCondition
receiptFormatArrayOptional
receiptDelegationBooleanOptional
receiptWidthIntegerOptional

Provides a compliant receipt by the payment solution.

Requirements:

  • A previous transaction was done with a corresponding session ID
  • The SESSION_ID must be the previous request's session ID, not a new one
  • The payment solution supports receipt delivery
  • Referenced request has a receipt available
Any payment solution will just store the last `SESSION_ID` and response per application (package name). No other WPI requests shall be done before printing the receipt.

Request:

Field NameTypeCondition
receiptTargetString (pre-defined)Mandatory

Response:

Field NameTypeCondition
resultStringMandatory
errorConditionStringMandatory
remarkStringConditional - on error

Abort (WPI_SVC_ABORT)

Aborts the current ongoing financial transaction. Returns WPI_RESULT_SUCCESS if successfully aborted or no transaction was running.


Information Services

Last Transaction (WPI_SVC_LAST_TRANSACTION)

Recovery feature to request the last financial transaction response.

Request:

ExtraDescriptionTypeCondition
WPI_SERVICE_TYPESubtype of action to be executedStringMandatory
WPI_VERSIONUsed WPI versionStringMandatory
WPI_SESSION_IDSession ID of the requested session, not a new session IDStringMandatory

Response:

ExtraDescriptionTypeCondition
WPI_SERVICE_TYPEService type of the recovered transactionStringSession known and executed
WPI_RESPONSEFinancial Payment Response objectStringSession known and executed
WPI_VERSIONUsed WPI versionStringMandatory
WPI_SESSION_IDIdentifier of a WPI exchangeStringMandatory

Payment Solution Information (WPI_SVC_PAYMENT_INFORMATION)

Returns all required payment solution information. Returns WPI_ERR_COND_NOT_INITIALIZED if not properly configured.

Response:

Field NameDescriptionTypeCondition
resultResult of the transactionStringMandatory
errorConditionSpecific error reasonStringMandatory
softwareVersionPayment Solution software versionStringOn success
terminalIdentifierTerminal identifierStringOn success
terminalModelTerminal model of the deviceStringOn success
macAddressMAC Address of used adapterStringOn success
supportedLanguagesLanguages supported by the payment solutionArrayOn success
cardholderDefaultLanguageCardholder default languageStringOn success
merchantLanguageMerchant default languageStringOn success
countryCodeCountry code of the payment solutionStringOn success
defaultCurrencyDefault currencyStringOn success
supportedCurrenciesCurrencies the payment solution supportsArrayOn success
shopInfoShop information for the terminalObjectOn success
acquirerProtocolAcquirer protocol used by the payment solutionStringOn success
supportedTicketFormatsReceipt formats supportedArrayOn success
supportReceiptDelegationWhether receipt delegation is supportedBooleanOn success
paymentInformationPayment information per brandArrayOn success
paymentSolutionSupportedServiceTypesSupported service typesArrayOn success
supportsManualPanKeyEntryWhether manual card data entry is activated (New in 2.1)BooleanOn success
supportsTipWhether tip is supported (New in 2.1)BooleanOn success

Data Dictionary

Request Data

All data must be provided as JSON in the WPI_REQUEST extra.

Field NameDescriptionType
currencyCurrency of the amount. Alpha code value defined in ISO 4217 (e.g., EUR)String
requestedAmountTotal payment amount as minor unit. Cashback and tip excluded. Example: 11.91 EUR = 1191Integer
tipAmountTip amount as minor unit. Same currency as transaction amountInteger
cashbackAmountCashback amount as minor unit. Same currency as transaction amountInteger
paymentSolutionReferencePrevious transaction reference used for subsequent transactionsString
referenceReference to be sent to the payment solution for reconciliationString
receiptFormatOverride the default receipt formatArray
receiptDelegationDeactivate payment solution receipt handling. Default: trueBoolean
receiptWidthReceipt width (characters per line) for formatted receiptInteger
recognitionTimeoutTimeout before error in millisecondsInteger
recognitionOptionsCard recognition optionsArray
receiptTargetDefines which receipt shall be printedString
customerLanguageLanguage the payment application shall use (ISO 639-1 alpha-2 code)String
useManualPanKeyEntryFlag to offer manual PAN key entry instead of physical card reading. Default: falseBoolean

Receipt Format

ValueDescription
FORMATTEDReturn the receipt as String (default)
JSONReturn the receipt as JSON

Recognition Option

ValueDescription
WPI_RECOGNITION_OPTION_RETURN_CUSTOMER_TOKENCreate a token for the card that was read
WPI_RECOGNITION_OPTION_RETURN_MIFARE_DETAILSRecognize a non-payment card like MIFARE. The UID and card type will be evaluated

Receipt Target

ValueDescription
CARDHOLDERPrint the cardholder receipt
MERCHANTPrint the merchant receipt
BOTHPrint both merchant and cardholder receipts one after the other

Response Data

All data is provided as JSON in the WPI_RESPONSE extra.

Field NameDescriptionType
resultResult of the transactionString
errorConditionSpecific error reasonString
actionCodeSpecific action to be performed by the business applicationString
remarkTerminal/transaction specific message for detailed error descriptionsString
timestampDate and time of the transaction (ISO 8601: yyyy-mm-ddThh:mm:ss±hh:mm)String
currencyCurrency code of the transaction (ISO 4217)String
authorizedAmountAmount of the transaction, including TIP and cashback, as minor unitInteger
brandNameBrand name of used payment cardString
customerLanguageLanguage used on screens (ISO 639-1 alpha-2 code)String
applicationIdentifierPayment card application identifierString
applicationLabelPayment card application labelString
receiptContains the requested receiptsObject
paymentSolutionReferenceTransaction specific and unique identificationString
dccUsedWhether DCC was used for the transactionBoolean
dccOfferedWhether DCC was offered to the cardholderBoolean
dccAmountDCC amount of the transactionInteger
dccCurrencyDCC currency of the transaction (ISO 4217)String
dccExchangeRateDCC exchange rate of the transactionString
tipAmountTip amount entered by cardholder or provided in requestInteger
cashbackAmountCashback amount used in the transaction (minor unit)Integer
referenceReference sent to the payment app for reconciliationString
softwareVersionPayment Solution software versionString
terminalIdentifierTerminal identifier configured for the payment solutionString
supportedLanguagesList of supported languages (ISO 639-1)Array
cardholderDefaultLanguageConfigured cardholder default languageString
merchantLanguageConfigured merchant default languageString
countryCodeCountry code of the terminal (ISO 3166-1 alpha-2)String
defaultCurrencyDefault currency configured for the payment solutionString
supportedCurrenciesAll currencies supported by the payment solutionArray
shopInfoShop information of the terminalObject
acquirerProtocolUsed acquirer protocolString
supportedTicketFormatsSupported ticket formatsArray
supportReceiptDelegationWhether receipt delegation is supportedBoolean
paymentInformationDetailed payment solution information per brand & acquirerArray
paymentSolutionSupportedServiceTypesService types supported by the payment solutionArray
entryModeTechnology used to read the cardString
isoTrack1ISO track 1 data (may be empty for PCI brands)String
isoTrack2ISO track 2 data (may be empty for PCI brands)String
isoTrack3ISO track 3 data (may be empty for PCI brands)String
tokenToken of the card PAN / UID for customer identificationString
panPAN of the card (always masked except last 4 digits)String
mediaTypeMedia type of NFC non-payment cardString
mediaUniqueIdentifierUID of NFC based non-payment cardString
waitForNextActionWhether payment solution keeps card in read modeBoolean
nextActionWaitTimeTime card is kept in read mode, in millisecondsInteger
acquirerIdentifierAcquirer IdentifierString
merchantIdentifierMerchant IdentifierString
authorizationCodeAuthorization code from the authorization systemString
authorizationModeOnline or offline authorizationString
cardDataInputCard data input methodString
cardholderVerificationMethodCVM determined during transaction processingString

ShopInfo

Field NameDescriptionTypeCondition
nameName of the shopStringOptional
addressAddress (street and number)StringOptional
zipCodeZIP codeStringOptional
cityCityStringOptional
countryCountryStringOptional
logoContent provider URI of the logoStringOptional

Result

ResultDescription
WPI_RESULT_SUCCESSSuccessful transaction
WPI_RESULT_FAILUREFailed transaction

Error Conditions

Error ConditionDescription
WPI_ERR_COND_NONENo error occurred
WPI_ERR_COND_SERVICE_NOT_SUPPORTEDRequested service type not supported
WPI_ERR_COND_ABORTEDAbort request was accepted and processed
WPI_ERR_COND_BUSYPayment Application is busy, try later
WPI_ERR_COND_CARD_READ_ERRUnable to read the card
WPI_ERR_COND_USER_CANCELUser aborted the transaction
WPI_ERR_COND_USER_TIMEOUTTimeout while waiting for user interaction
WPI_ERR_COND_HOST_REFUSALAcquirer/Issuer refused the transaction
WPI_ERR_COND_NETWORK_ISSUENetwork issue occurred
WPI_ERR_COND_TRANSACTION_TIMEOUTTimeout during transaction
WPI_ERR_COND_ENCRYPTION_ISSUEEncryption issue caused transaction abort
WPI_ERR_COND_INVALID_KEYSecure component missing required key
WPI_ERR_COND_INVALID_TRANSACTION_REQInvalid transaction request
WPI_ERR_COND_INTERNALInternal error within payment service
WPI_ERR_COND_INVALID_AMOUNTInvalid amount entered
WPI_ERR_COND_INVALID_CURRENCYInvalid currency for transaction
WPI_ERR_COND_APP_NOT_SUPPORTEDNo accepted applications on card
WPI_ERR_COND_MISSING_MANDATORY_PARAMETERMissing mandatory parameter
WPI_ERR_COND_GENERICGeneric unspecified error
WPI_ERR_COND_NOT_INITIALIZEDPayment solution not configured
WPI_ERR_COND_WPI_VERSION_NOT_SUPPORTEDUnsupported WPI version
WPI_ERR_COND_SESSION_ID_ALREADY_IN_USESession ID already used
WPI_ERR_COND_INVALID_PASSWORDIncorrect password for protected transactions
WPI_ERR_COND_RECEIPT_DELEGATION_NOT_SUPPORTEDReceipt delegation not supported
WPI_ERR_COND_MANUAL_PAN_KEY_ENTRY_NOT_SUPPORTEDManual PAN key entry not possible but requested (New in 2.1)
WPI_ERR_COND_CASHBACK_NOT_SUPPORTEDCashback requested but not supported (New in 2.1)
WPI_ERR_COND_TIP_NOT_SUPPORTED_BY_PAYMENT_SOLUTIONTip not supported by payment solution (New in 2.1)
WPI_ERR_COND_TIP_NOT_SUPPORTED_BY_SERVICE_TYPETip not supported for specific service type (New in 2.1)
WPI_ERR_COND_TIP_NOT_SUPPORTED_BY_BRANDTip not supported by cardholder card brand (New in 2.1)
WPI_ERR_COND_TIP_AMOUNT_EXCEEDS_MAXIMUMTip amount exceeds maximum allowed (New in 2.1)

Action Codes

Action CodeDescription
WPI_ACTION_CODE_NONENo additional action required
WPI_ACTION_CODE_ASK_LEGAL_IDENTIFICATIONAsk cardholder for legal identification
WPI_ACTION_CODE_ASK_SIGNATUREAsk cardholder to sign the merchant receipt

Supported Technologies (Entry Mode)

Entry ModeDescription
WPI_ENTRY_MODE_MANUALManual Key Entry support (New in 2.1)
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 via QR Code

Acquirer Protocol

Protocol
ep2
CTAP
CB2A
NEXO
ZVT
MULTI-ACQUIRER (New in 2.1)

Authorization Mode

Authorization ModeDescription
WPI_AUTHORIZATION_MODE_ONLINEAuthorized online
WPI_AUTHORIZATION_MODE_OFFLINEAuthorized offline

Brand Names

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_OTHER
If brand cannot be matched, use `WPI_BRAND_NAME_OTHER`. For local brands, use `WPI_BRAND_NAME_LOCAL_DEBIT_CARD` or `WPI_BRAND_NAME_LOCAL_CREDIT_CARD`.

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 chip error
WPI_CARD_DATA_INPUT_MAGNETIC_STRIPECard data was read through magnetic stripe reader
WPI_CARD_DATA_INPUT_ALTERNATIVE_PAYMENT_METHODCard data was provided through alternative payment method (e.g., QR Code)
WPI_CARD_DATA_INPUT_PAN_TOKENCard data was provided via tokenization service
WPI_CARD_DATA_INPUT_REFERENCE_BASEDCard data evaluated from a previous referenced transaction

Cardholder Verification Method (CVM)

CVMDescription
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

Payment Information Item

Field NameDescriptionTypeCondition
acquirerIdentifierAcquirer identifier for the given brandStringMandatory
merchantIdentifierMerchant identifier used by the acquirerStringMandatory
acquirerTerminalIdentifierTerminal identifier used by acquirerStringMandatory
brandIdentifierBrand specific identifier (AID)StringOptional
brandNameBrand nameStringMandatory
supportedServiceTypesSupported service types for the brandArrayMandatory
cancellableServiceTypesService types that can be reversedArrayMandatory
numberOfCancellableTransactionsNumber of transactions that can be reversed (-1 = all since last Day End)IntegerMandatory
supportedTechnologiesSupported technologies for card readingArrayMandatory
supportsDCCWhether DCC is supportedBooleanMandatory
supportsCashbackWhether cashback is supportedBooleanMandatory

Payment Solution Implementation

Mandatory Attributes and Result Structure

  • The technical design defines only mandatory attributes in the request needed to meet every business use case, aiming to be payment protocol agnostic
  • The payment solution shall support every combination of attributes defined in the request
  • The result structure contains every possible attribute to be returned

Payment Solution Reference

The payment solution reference must be designed in a unique way so that all follow-on transactions can be handled with it.

The `paymentSolutionReference` must be printed on the cardholder receipt in plain text or as a QR Code: - Compliant with ISO/IEC 18004:2015 (or higher) standard - Highest (H) error correction level - QR Code version selected according to data length - Content limited to `paymentSolutionReference` value only (raw data) The payment solution reference should be as short as possible and easy to type manually.

Error Handling

  • The payment solution shall provide a remark that is understandable by a third-party integrator, only in case of an error condition not equal to WPI_ERR_COND_NONE
  • The payment solution shall return WPI_ERR_COND_BUSY in case of a transaction currently in progress

Tip Processing

  • If tipAmount in the WPI request is not defined, the Payment Solution shows tip entry screens
  • If tipAmount in the WPI request is defined >= 0, the Payment Solution uses the tip amount from the request and does not show the tip entry screen
  • If tipAmount is null or 0, no tip will be processed

Other Requirements

  • Payment solution must store the SESSION_ID for the last transaction and the last transaction object of each business application for recovery
  • For compatibility, every payment application shall support the last two major versions starting with WPI 2.0
  • Password-protected transaction types (refund, credit, follow-on credit) must be password protected
  • Payment solution shall always handle the receipt depending on TMS configuration. Business applications can override by setting receiptDelegation to false

Migration from 2.0

If you're currently using WPI 2.0, migration to 2.1 is straightforward:

1
Update Version

Change the WPI_VERSION value from "2.0" to "2.1" in your implementation

2
Review New Features

Consider implementing new optional fields: - tipAmount and cashbackAmount in requests - useManualPanKeyEntry for manual card entry - customerLanguage for language preferences

3
Handle New Response Fields

Update your response handling to process new fields: - cardDataInput, cardholderVerificationMethod, authorizationMode - Extended DCC fields (dccOffered, dccCurrency, dccExchangeRate)

4
Test

Test with the updated payment solution to verify compatibility

WPI 2.1 is backward compatible with 2.0. Existing implementations will continue to work without modification.