# Testing
The features below must be used in operating mode **TEST** and can be used to test VPOS functionality in a CCV Lab
simulated environment.
The operating mode is associated with your API key. Once you have completed your integration, you must use your **LIVE**
key for production usage.
# Method Card
For card transactions you must use a known test card.
The system rejects unknown cards in combination with a Test API key.
| Brand | API Brand | PAN | 3DS2 authentication flow |
|------------------------------------|--------------|-----------------------|--------------------------------|
| Amex | `amex` | 3782 822463 10005 | Browser Frictionless - Success |
| Amex | `amex` | 3759 870001 69792 | Browser Frictionless - Success |
| Amex | `amex` | 3759 874358 77100 | Browser Frictionless - Failure |
| Amex | `amex` | 3759 870001 69784 | Browser Challenge |
| Bancontact - Maestro co-branded | `bcmc` | 6703 2222 2222 2222 7 | Browser Frictionless - Success |
| Bancontact - Maestro co-branded | `bcmc` | 6703 3333 3333 3333 9 | Browser Challenge |
| Bancontact - Maestro co-branded | `bcmc` | 6703 9999 9997 9901 5 | Browser Frictionless - Success |
| Bancontact - Maestro co-branded | `bcmc` | 6060 0599 9999 9014 | Browser Frictionless - Success |
| Bancontact - Mastercard co-branded | `bcmc` | 5127 8809 9999 9990 | Browser Frictionless - Success |
| Bancontact - Visa co-branded | `bcmc` | 4796 5899 9999 9917 | Browser Frictionless - Success |
| Visa | `visa` | 4242 4242 4242 4242 | Browser Frictionless - Success |
| Visa | `visa` | 4111 1111 1111 1111 | Browser Frictionless - Success |
| Visa | `visa` | 4012 8888 8888 1881 | Browser Frictionless - Success |
| Visa | `visa` | 4222 2222 2222 2 | Browser Frictionless - Success |
| Visa | `visa` | 4000 0000 0000 0002 | Browser Challenge |
| Visa | `visa` | 4000 0000 0000 0028 | Browser Frictionless - Success |
| Visa | `visa` | 4000 0000 0000 0036 | Browser Frictionless - Success |
| Visa Electron | `visa` | 4245 1900 0000 0311 | Browser Frictionless - Success |
| Visa Electron | `visa` | 4917 3008 0000 0000 | Browser Frictionless - Success |
| Vpay | `visa` | 4370 0000 0000 0061 | Browser Frictionless - Success |
| Maestro | `maestro` | 6759 6498 2643 8453 | Browser Frictionless - Success |
| Mastercard | `mastercard` | 5555 5555 5555 0004 | Browser Frictionless - Success |
| Mastercard | `mastercard` | 5555 5555 5555 0012 | Browser Frictionless - Success |
| Mastercard | `mastercard` | 5555 5555 5555 4444 | Browser Frictionless - Success |
| Mastercard | `mastercard` | 5105 1051 0510 5100 | Browser Frictionless - Success |
| Mastercard | `mastercard` | 2223 0000 1002 9657 | Browser Frictionless - Success |
| Mastercard | `mastercard` | 5200 0000 0000 0015 | Browser Challenge |
| Mastercard | `mastercard` | 5200 0000 0000 0049 | Browser Challenge |
| Mastercard | `mastercard` | 5454 5454 5454 5454 | Browser Challenge |
| Mastercard | `mastercard` | 5555 5555 5555 0012 | Browser Challenge |
### 3-D Secure 2 authentication flows
- Browser Frictionless: the payment is authenticated without customer interaction.
Depending on the card, the authentication will succeed or fail.
- Browser Challenge: the payment requires customer interaction to complete the authentication.
Depending on the interaction, the authentication will succeed or fail.
## General
| Amount | Simulator Response | VPOS status |
|--------|--------------------|-------------------------------------------------|
| 8.00 | `timeout` | `pending` and after period of time `success` |
| 8.01 | `failed` | `failed` with failure code `INSUFFICIENT_FUNDS` |
| 8.02 | `failed` | `failed` with failure code `CARD_REFUSED` |
| 8.03 | `soft decline` | `success`* |
| 8.04 | `soft decline` | `failed`* |
| 9.00 | `failed` | `failed` |
| 23.00 | `timeout` | `pending` and after period of time `failed` |
| 81.00 | `failed` | `failed` with failure code `INSUFFICIENT_FUNDS` |
| 82.00 | `failed` | `failed` with failure code `CARD_REFUSED` |
| 83.00 | `soft decline` | `success`* |
| 84.00 | `soft decline` | `failed`* |
| other | `success` | `success` |
`*` The simulator responds with a soft decline on the first authorisation. The second authorisation response depends
on the specified amount.
## Authorise - Capture
Note: Our simulators only store transactions for a limited amount of time. As a result, a capture following an
authorisation might not have the expected behaviour due to the unknown state of the authorisation.
### Authorise
| Brand | Amount | Simulator Response | VPOS status |
|--------|--------|--------------------|-------------------------------------------|
| `bcmc` | 125.00 | `success` | `success` with partial approval of 100.00 |
| other | 125.00 | `failed` | `failed` |
| other | other | `success` | `success` |
### Capture
* A full capture is allowed
* A capture of more than the authorised amount is not allowed
# Method iDEAL
For iDEAL transactions you can pass specific amounts:
| Amount | Simulator response | VPOS status |
|--------|----------------------------------------------------------------------------|----------------------------------------|
| 5.00 | `Failure` | `failed` |
| 6.00 | `Cancelled` | `failed` with failure code `cancelled` |
| 7.00 | `Expired` | `failed` with failure code `expired` |
| 8.00 | `Open` | `pending` |
| 9.00 | `Success` after 10 seconds | `success` |
| 10.00 | `Failure` after 10 seconds | `failed` |
| 11.00 | Simulator only responds after 10 seconds but then `Success` | `success` |
| 12.00 | First callback has status `Open`, after 10 seconds callback with `Success` | `success` |
| other | `Success` | `success` |
## iDEAL mandate authentication flow
When using iDEAL mandates, the server can respond with a notification result. The test behavior can be triggered using
following amounts:
| Amount | Authentication flow | VPOS status |
|--------|----------------------------------------------------|-------------|
| 12.00 | NotificationResult `REDIRECT` | `success` |
| other | NotificationResult `PUSH_SENT_SHOW_WAITING_SCREEN` | `success` |
# Method PayPal
For PayPal transactions you can pass specific amounts:
| Amount | Simulator response | VPOS status |
|--------|----------------------------|-----------------------------------------------|
| 5.00 | `failed` | `failed` with failure code `processing_error` |
| 6.00 | `canceled` | `failed` with failure code `cancelled` |
| 8.00 | `pending` | `pending` |
| 9.00 | `approved` | `success` |
| 10.00 | `created` | `pending` |
| 11.00 | `denied` | `failed` with failure code `rejected` |
| 27.00 | `422 Unprocessable Entity` | `failed` with failure code `processing_error` |
| other | `completed` | `success` |
# Method Terminal
A simulated terminal is available to test your integration with a test api key:
* dns: shop-vpos-test.ccvlab.eu
* ip: 188.165.118.154
* port: 6235
* terminal id: random
* management system id: 08000000002 or 08900000002 for browser wake-up, random for cloud wake-up
* access protocol: OPI_NL
* operatingEnvironment: SEMI_UNATTENDED or ATTENDED
* merchantLanguage: ENG, NLD, FRA, DEU
| Amount | Simulator response | VPOS status |
|--------|-----------------------------------------------------------------------------------------------------------|-----------------------------------------------|
| 4 | An error with code `TERMINAL_ALREADY_IN_USE` with http status code 500 | `failed` with failure code `rejected` |
| 5 | `failure` | `failed` with failure code `processing_error` |
| 8 | `unknown` | `manualintervention` |
| 9 | `success` after 10 seconds | `success` |
| 10 | `failure` after 10 seconds | `failed` |
| 11 | `unknown` after 10 seconds | `manualintervention` |
| 12 | `success` with no callback | `success` after status update |
| 13 | `success` after VPOS performs status check | `success` after status update TAS callback |
| 14 | `success` after VPOS performs multiple status checks | `success` after status update TAS callback |
| 15 | `success` after 10 seconds and not responding to abort attempt | `success` |
| 16 | `failed` after 10 seconds and not responding to abort attempt | `failed` |
| 17 | `success` after 10 seconds when abort is not attempted, `failed` after 10 seconds when abort is attempted | `success` / `failed` |
| 18 | An error with code `MISSING_QUERY_STRING_URL_PARAMETER` with http status code 400 | `failed` with failure code `rejected` |
| other | `success ` | `success ` |
# Method Payconiq
For Payconiq transactions you can pass specific amounts:
| Amount | Simulator response | VPOS status |
|--------|--------------------|--------------------------------------------------------------------|
| 6.00 | `canceled` | `failed` with failure code `cancelled` and cancelled by `consumer` |
| 7.00 | `expired` | `failed` with failure code `expired` |
| 9.00 | `failed` | `failed` with failure code `processing_error` |
| other | `completed` | `success` |
For Payconiq transactions you can also call the cancel url, and the simulator will respond with the following behavior:
| Amount | Simulator response | VPOS status |
|--------|--------------------|---------------------------------------------------------------------|
| 8.00 | `not allowed` | `pending` |
| other | `allowed` | `failed` with failure code `cancelled` with cancelled by `merchant` |
# Method Gift
For testing Gift you must take into account that a gift card value may be lower than, equal to or higher than the
payment request amount. The test server only supports euro at this moment.
The giftCode used indicates the value it holds in the last 3 digits. For example 'CCV0000000_004' will have a value of
4. A giftCode with other non-numeric characters will default to 30.
For Gift you can also pass fixed giftCard codes:
| GiftCard code | Simulator response | VPOS failed |
|---------------|-----------------------------|------------------------------------------------------------------------------------------------------------------------------------|
| CCV000000000A | `bad request` | `failed` with failure code `processing_error` |
| CCV000000000B | `not found`, gift not found | `failed` with failure code `card_refused` |
| CCV000000000C | `ok`, gift locked | `failed` with failure code `card_refused` |
| CCV000000000D | `ok`, gift expired | `failed` with failure code `card_refused` |
| CCV000000000E | `ok`, gift currency `gbp` | `failed` with failure code `card_refused` |
| other | `ok` | `success` for payment request with amount equal to or less than indicated in the last 3 digits of the used giftCode, or default 30 |
# Method SoftPos
For SoftPos transactions you can pass specific amounts:
| Amount | Simulator response | VPOS status |
|--------|----------------------------------------|--------------------------------------------------------------------|
| 9 | no response - client timeout after 10s | `failed` with failure code `processing_error` |
| 10 | `bad request` | `failed` with failure code `processing_error` |
| 11 | `created` | `pending` |
| 12 | `created` - `failed` after get | `pending` after status check `failed` |
| 13 | `time out` | `failed` with failure code `processing_error` after timeout occurs |
| 14 | `success` | `success` |
| 15 | `created` - `success after 30 seconds` | `pending` after status check `success` |
| 16 | `created` - `failed after 30 seconds` | `pending` after status check `failed` |
| 17 | `unknown status` | `manual intervention` |
| other | `created` - `success` after get | `pending` after status check `success` |
# Method Apple Pay
For Apple Pay the following amounts can trigger test behavior. All other amounts should lead to a successful
transaction.
| Amount | Simulator Response | VPOS status |
|--------|--------------------|-------------------------------------------------|
| 8.01 | `failed` | `failed` with failure code `insufficient_funds` |
| 8.02 | `failed` | `failed` with failure code `card_refused` |
| 9.00 | `failed` | `failed` |
| 81.00 | `failed` | `failed` with failure code `insufficient_funds` |
| 82.00 | `failed` | `failed` with failure code `card_refused` |
| other | `success` | `success` |
# Method Google Pay
You can test your Google Pay integration by using test cards along with different payment amounts.
This allows you to simulate various payment scenarios and influence the resulting payment status.
## Google Pay test card behavior
The Google Pay payment method expects a card to be coupled to your Google wallet. This can either
be a real card or a collection of CCV test cards.
- In case a real card is used, the Google Pay test environment returns a test card encrypted token
that matches the card brand used. Your real card will **never be charged** and the card info is protected
by Google's automatic encryption.
- The other **preferred** option is to make use of the [CCV Test cards for Google Pay](#ccv-test-cards-googlepay)
Depending on the Card number (PAN) used during testing, you can trigger various payment flows.
- For device PAN (DPAN) test cards, the Google Pay API response includes a `CRYPTOGRAM_3DS`, simulating payment
credentials linked to an Android device.
Google handles the authentication for these cards, eliminating the need for additional 3D Secure authentication. The
payment proceeds
without further customer interaction.
- Conversely, when using an FPAN test card, the Google API responds with a `PAN_ONLY` authentication method, requiring
3DS authentication
from the customer. Based on the test PAN number, you can decide whether authentication should be frictionless or
involve a challenge.
> **API key considerations**
>
> When using a **test** API key on our test environment, the entered encrypted token is **not** validated or used for
> further processing
> of the payment. Instead, a dummy `CRYPTOGRAM_3DS` token is used that always results in an immediate processing of the
> payment without
> requiring 3DS authentication. Only using a **live** API key on our test environment will result in validation and
> usage of the Google Pay
> encrypted token!
## Determine payment result
For Google Pay the following amounts influence the payment result. All other amounts should lead to a successful
transaction.
| Amount | Simulator Response | VPOS status |
|--------|--------------------|-------------------------------------------------|
| 8.01 | `failed` | `failed` with failure code `insufficient_funds` |
| 8.02 | `failed` | `failed` with failure code `card_refused` |
| 9.00 | `failed` | `failed` |
| 81.00 | `failed` | `failed` with failure code `insufficient_funds` |
| 82.00 | `failed` | `failed` with failure code `card_refused` |
| other | `success` | `success` |
## CCV Test cards GooglePay
> All DPAN test cards can be used on non-Android mobile web and desktop devices to simulate a PAN that is linked to an
> Android device by Google Pay.
| Brand | API Brand | PAN | PAN Type | Google Pay Authentication Method | 3DS2 authentication flow |
|---------------|--------------|---------------------|----------|----------------------------------|--------------------------------|
| Visa | `visa` | 4242 4242 4242 4242 | DPAN | `CRYPTOGRAM_3DS` | / |
| Visa | `visa` | 4111 1111 1111 1111 | DPAN | `CRYPTOGRAM_3DS` | / |
| Visa | `visa` | 4012 8888 8888 1881 | FPAN | `PAN_ONLY` | Browser Frictionless - Success |
| Visa | `visa` | 4222 2222 2222 2 | FPAN | `PAN_ONLY` | Browser Frictionless - Success |
| Visa | `visa` | 4000 0000 0000 0002 | DPAN | `CRYPTOGRAM_3DS` | / |
| Visa | `visa` | 4000 0000 0000 0028 | DPAN | `CRYPTOGRAM_3DS` | / |
| Visa | `visa` | 4000 0000 0000 0036 | FPAN | `PAN_ONLY` | Browser Frictionless - Success |
| Visa Electron | `visa` | 4245 1900 0000 0311 | DPAN | `CRYPTOGRAM_3DS` | / |
| Visa Electron | `visa` | 4917 3008 0000 0000 | FPAN | `PAN_ONLY` | Browser Frictionless - Success |
| Mastercard | `mastercard` | 5555 5555 5555 0004 | DPAN | `CRYPTOGRAM_3DS` | / |
| Mastercard | `mastercard` | 5555 5555 5555 4444 | FPAN | `PAN_ONLY` | Browser Frictionless - Success |
| Mastercard | `mastercard` | 5105 1051 0510 5100 | FPAN | `PAN_ONLY` | Browser Frictionless - Success |
| Mastercard | `mastercard` | 5200 0000 0000 0015 | DPAN | `CRYPTOGRAM_3DS` | / |
| Mastercard | `mastercard` | 5200 0000 0000 0049 | DPAN | `CRYPTOGRAM_3DS` | / |
| Mastercard | `mastercard` | 5454 5454 5454 5454 | FPAN | `PAN_ONLY` | Browser Challenge |
| Mastercard | `mastercard` | 5555 5555 5555 0012 | FPAN | `PAN_ONLY` | Browser Challenge |
# Fraud detection
All the payments are screened for fraud. The following amounts are applicable for **all** payment methods.
| Amount | Simulator Response | VPOS status |
|--------|--------------------|---------------------------------------------|
| 66.00 | `reject` | `failed` with failure code `fraud_detected` |
| 67.00 | `accept` | Contains a BinInfo |
| Other | `accept` | Depending on the chosen method |