Reference🛠️ Merchant setupAdvanced⏱ 18 min read

🧪 Testing, certification, and UAT

Test cards, scenarios, sandboxes, CB/nexo certification, and monitoring: how to prove a payment chain works before go-live, and after

Why payment UAT is different

User acceptance testing (UAT) for a payment chain is the test campaign that validates, before go-live, how every link a transaction passes through behaves. A regression here does a different kind of damage than in ordinary software: it loses sales or wrongly charges a customer, often without any error showing on screen. UAT must therefore cover the happy path, then the long tail of declines, timeouts, cancellations, and 3DS cases, and then continue after go-live as ongoing monitoring.

🔑
Two sealed-off worlds: sandbox and production
Every integration starts in a sandbox, an environment that works like production but moves no real money, driven by test keys (often prefixed sk_test_ / pk_test_). A real card is never used in the sandbox, and a test card is never used in production. Mixing up the two environments is the most common integration error, and the most expensive.

Test cards and scenarios

Test cards are dummy PANs, supplied by PSPs and card networks, that trigger a specific behavior in the sandbox (approval, a decline for a given reason, a 3DS challenge, and so on). Any CVV and any future expiry date will do. The campaign consists of deliberately triggering each case to check that the merchant’s code responds correctly.

Test numberNetworkSimulated behavior
4242 4242 4242 4242VisaPayment approved (happy path)
5555 5555 5555 4444MastercardPayment approved
3782 822463 10005American ExpressPayment approved (15-digit format)
4000 0000 0000 0002VisaGeneric decline (do not honor)
4000 0000 0000 9995VisaDeclined for insufficient funds
4000 0000 0000 3220VisaTriggers a 3-D Secure 2 challenge
Sample test cards (common conventions, sandbox only)
  • Happy path: authorization approved, capture, payment received.
  • Declines: replay each code (05, 14, 41, 51, 54, 65/1A…) and check the message and the retry strategy.
  • 3DS2: frictionless and challenge flows, including abandonment and failed authentication.
  • Partial capture and cancellation: pre-authorization, capture for a lower amount, reversal/void before clearing.
  • Refunds: full and partial, with a reconciliation check.
  • Degraded modes: issuer timeout, PSP unavailable, double submission (idempotency), replayed webhook.
Idempotency test: two submissions must debit only once
// Send the SAME idempotency key twice: the PSP must
// return the same transaction without creating a second debit.
const idempotencyKey = "order-2026-07-11-000482"

async function pay() {
  return fetch("/v1/charges", {
    method: "POST",
    headers: {
      "Authorization": "Bearer sk_test_XXXX",
      "Idempotency-Key": idempotencyKey,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ amount: 4280, currency: "EUR", source: "tok_test" }),
  }).then((r) => r.json())
}

const a = await pay()
const b = await pay()
console.assert(a.id === b.id, "Idempotency broken: possible double debit")

Certification: proving compliance with the network

For an integrator, being certified means having passed a formal process, run with the acquirer, the card network, or an accredited body, that confirms the implementation meets the specifications and behaves correctly on an official test platform. Tests run in the sandbox are not enough to get access to a live network; certification comes on top of them. In France, card acceptance also requires CB certification from Cartes Bancaires, France’s domestic card scheme, in addition to the international Visa and Mastercard approvals.

The dialogueLegacy (France)Target: nexo / ISO 20022Card ↔ terminalapplication selection, PINEMV + CB5.5A specificationnexo FASTrules set by the schemesFRV6: new terminals from Jan. 1, 2025Register ↔ terminalamount, result, receiptConcert V3.1 / V3.2nexo Retailerterminal ↔ acquirerauthorization, batch uploadCB2A (based on ISO 8583)nexo AcquirerCB2A still widely usedTMS ↔ terminal fleetparameters, keys, updatesmanufacturer protocolsnexo TMSThe money doesn’t move at the “beep”The “beep”≈ 1 to 2 s, no money movesEnd-of-day batch uploadthe terminal uploads the day’s batchMerchant creditedtypically D+1, net of feesA terminal that hasn’t uploaded its batch looks like it’s taking payments but credits nothing.Each change of standard triggers a wave of fleet re-certification (EMV levels 1, 2, and 3).
🇫🇷
CB certification
The Cartes Bancaires consortium (GIE CB) validates the implementation of acquirers, PSPs, and terminals on the CB domain (protocol, messages, security) before any connection.
📐
nexo standards
The nexo standards association defines ISO 20022 protocols for card payments (Acquirer Protocol, Retailer Protocol, terminal estate management). Implementations are certified to guarantee interoperability.
💠
EMVCo (Level 1 and 2)
Hardware type approval (Level 1) and software kernel approval (Level 2) for EMV terminals, plus PCI PTS for the physical security of POS terminals.
🔵
Scheme certifications
Visa and Mastercard require host certification campaigns (on dedicated test platforms) before opening up production traffic.
Test and certification bodies and frameworksCACartes Bancaires (CB)NEnexo standardsEMEMVCoVisaMastercardStripeAdyen
Step 1
Development
Integration against the documentation, locally, with mocks.
Step 2
Sandbox
Running the scenarios (happy path, declines, 3DS, degraded modes) with test cards.
Step 3
Certification
Official CB / nexo / scheme campaign on a dedicated test platform.
Step 4
Pilot / pre-production
Limited live traffic (small amounts, restricted scope) under close watch.
Step 5
Go-live
Production traffic opened up gradually.
Step 6
Monitoring
Continuous monitoring and synthetic transactions to catch any regression.

Monitoring: acceptance testing never stops

Monitoring a payment chain means continuously tracking its metrics after go-live. A degradation does not always produce a technical error. A change at the issuer, an expired certificate, or an overly strict fraud rule can make the payment success rate drop without any error message appearing. Monitoring combines alerts with synthetic transactions: test payments run in production at regular intervals to check that the chain responds.

IndicatorWhat it revealsWarning sign
Authorization rateOverall acceptance healthSudden drop or drift on a BIN or issuer
DE39 code distributionType of decline (soft vs. hard)Rise in 05, 65/1A, 91
3DS2 success rateAuthentication frictionFrictionless rate collapsing, challenge abandonment
End-to-end latencyPayment chain performanceResponse times creeping up, timeouts
Fraud / chargeback rateRisk exposureNearing scheme thresholds (Visa VAMP, Mastercard EFM)
Availability (uptime)Technical resilience5xx errors, undelivered webhooks
Metrics to monitor in production
✅
The reflex that protects your payment success rate
Early detection depends on getting the raw response codes (DE39) from the PSP for each transaction, not just provider-specific labels, and then setting alerts on their distribution. Most drops in payment success first show up as a shift in the code mix (a rise in SCA soft declines, or in declines from one issuer or one BIN). Caught early, drift can be corrected. Left unnoticed, it turns into lost sales that no error message ever flags.