In dit gedeelte vind je alles wat je nodig hebt om de verschillende instappunten te beheren die je applicatie ontvangt tijdens en na een Axepta BNP Paribas Online-betaling.
Je leert:
- Welke URL's je moet doorgeven bij het aanmaken van een betaling,
- De volgorde waarin ze worden aangeroepen,
- Hoe je de geretourneerde informatie moet interpreteren,
- Hoe je de daadwerkelijke status van een transactie kunt verifiëren,
- Hoe je de webhook beheert.
Inhoudstafel
1. URLs doorgeven: return, cancel, webhook
Bij het initialiseren van de betaling moet u een URLs-object opgeven.
urls{
"return":"https://myProcessingServer.net/myApi/success.php?transId=95330876-67ae-4949-a11c-b9a29257831b",
"cancel":"https://myProcessingServer.net/myApi/cancel.php?transId=95330876-67ae-4949-a11c-b9a29257831b",
"webhook":"https://myBackOfficeServer.net/webhook.php"
}
Return = doorverwijzing wanneer de klant op de bevestigingsknop klikt aan het einde van het betaalproces
Cancel = doorverwijzing als de klant de betaling annuleert.
Webhook = asynchrone en gegarandeerde melding, onafhankelijk van de actie van de klant.
2. Return URL & Cancel URL
Een van deze twee URL's (return of cancel) wordt aangeroepen aan het einde van de transactieverwerking om:
- De klant terug te sturen naar de website van de handelaar,
- De handelaar te informeren over de transactiestatus (geslaagd of niet),
- Het unieke transactie-ID (payId) door te geven aan het back-officesysteem van de handelaar.
Axepta BNP Paribas Online voegt automatisch de volgende parameter toe: zie Integratieaanbevelingen
Belangrijk: Voeg uw eigen identifier (bijv. transId) toe aan de URL's om de retouroproep te koppelen aan uw interne bestelling.
Voorbeeld van een URL die wordt geactiveerd na betalingsbevestiging door de klant:
- In groen, door u opgegeven URL met transId.
- In rood, door Axepta BNP Paribas Online toegevoegde PayId
https://myProcessingServer.net/myApi/success.php?transId=95330876-67ae-4949-a11c-b9a29257831b&PayId=b6eae9b16e3343fa90da39d4ee7bf4ad
Wat te doen bij ontvangst van deze oproep?
- Haal de PayId-parameter op.
- Roep de API aan om de daadwerkelijke transactiestatus op te halen: GET /payments/getByPayId/{payId} – Retrieve payment details by Payment ID
- Werk de bestelling bij op basis van de status en responseCode.
Belangrijke velden in de API-respons:
| Veld | Beschrijving |
|---|---|
| Amount | value, capturedValue, refundedValue |
| Identifiers | payId, transId, xId, refNr |
| Status | AUTHORIZED, CAPTURE_REQUEST, OK, FAILED, etc. |
| Resultaat | responseCode = "00000000" of "0" duidt op succes. |
responseDescription = tekstuele beschrijving. |
Let op: Een geslaagde transactie kan zowel "00000000" als "0" retourneren, afhankelijk van de betaalfase of -methode.
Controleer altijd beide waarden om succes te bevestigen.
Voorbeelden van samengevatte responsen:
{
"amount":{
"value":126,
"currency":"EUR",
"capturedValue":0,
"refundedValue":0
},
"payId":"91a6299a704147bf934aabd79fd1dc5d",
"merchantId":"MY_MERCHANT_ID",
"transId":"Trans361039",
"xId":"b55e68b7e4644a90836ae31effe1fc60",
"refNr":"refNb77254",
"status":"AUTHORIZED",
"responseCode":"00000000",
"responseDescription":"Transaction successful",
"paymentMethods":{
"type":"CARD"
}
}
{
"amount":{
"value":1200,
"currency":"EUR",
"capturedValue":0,
"refundedValue":0
},
"payId":"09526745fa704e9c8584dbe893c31f99",
"merchantId":"MY_MERCHANT_ID",
"transId":"1230861007",
"xId":"2781d7d379e5449e9717c901ba6f9ff7",
"refNr":"Q1ovVxioaZ6n",
"status":"CAPTURE_REQUEST",
"responseCode":"0",
"responseDescription":"REQUEST",
"paymentMethods":{
"type":"CARD"
}
}
3. Webhook
Aan het einde van de transactieverwerking meldt Axepta BNP Paribas Online het definitieve transactieresultaat aan de website van de handelaar. De webhook-melding is de enige betrouwbare manier om op de hoogte te worden gebracht van de voltooiing van een transactie. Verplicht voor handelaren: verwerk webhook-oproepen in uw systeem.
- Verzonden via een HTTP REST-oproep naar de webhook-URL die u bij de betalingsinitialisatie hebt opgegeven.
- Wordt verzonden, zelfs als de klant:
- De browser sluit,
- De verbinding verliest,
- Niet terugkeert naar uw website.
Wanneer wordt de webhook verzonden?
Na elke asynchrone verwerking van een betaling. Als het eindpunt niet beschikbaar is, wordt de melding tot 8 keer opnieuw verzonden:
| Poging | Vertraging (uur:min) | Totaal (uur:min) |
|---|---|---|
0 | Instantaneous | 0 |
1 | 00:01 h | 00:01 h |
2 | 00:08 h | 00:09 h |
3 | 00:27 h | 00:36 h |
4 | 01:04 h | 01:40 h |
5 | 02:05 h | 03:45 h |
6 | 03:36 h | 07:21 h |
7 | 05:43 h | 13:04 h |
8 | 08:32 h | 21:36 h |
Wat moet u doen?
- Lees de JSON-payload.
- Identificeer de transactie met payId of transId.
- Werk uw systeem bij.
- Reageer met HTTP 200 OK.
Finaliseer een bestelling nooit alleen op basis van de Return-URL.
Vertrouw altijd op de webhook als bron van waarheid.
Webhook Structuur
Meegestuurde velden:
- merchantId
- payId
- transId
- xId
- refNr
- status (AUTHORIZED, FAILED, etc.)
- responseCode / responseDescription
- amount
- paymentMethods
- creationDate (UTC)
- channel (ECOM, MOTO, Pay By Link…)
Voorbeeld
{
"merchantId": "YOUR_MERCHANT_ID",
"payId": "91a6299a704147bf934aabd79fd1dc5d",
"transId": "Trans361039",
"xid": "b55e68b7e4644a90836ae31effe1fc60",
"refNr": "refNb77254",
"status": "AUTHORIZED",
"responseCode": "00000000",
"responseDescription": "Transaction successful",
"amount": {
"value": 126,
"currency": "EUR"
},
"paymentMethods": {
"type": "CARD"
},
"creationDate": "2025-10-30T11:27:57Z",
"channel": "ECOM"
}
Beveiliging en verificatie
Om de authenticiteit van webhookgegevens te garanderen, worden payloads ondertekend met HMAC-SHA256.
De handtekening wordt meegestuurd in drie HTTP-headers:
Signature headers
X-Paygate-Signature-Version | Versie van het handtekeningformaat (momentaneel v1). |
X-Paygate-Timestamp | Unix-tijdstempel (seconden sinds 1970-01-01T00:00:00Z, UTC). |
X-Paygate-Signature | Handtekening in het formaat v1=<hex-hmac>. |
Signature Generation (Axepta BNP-Paribas Online)
signed_payload = timestamp + "." + raw_json_body
signature = HMAC_SHA256(secret, signed_payload)
secret– HMAC key- De gegenereerde handtekening wordt hex-gencodeerd en als header meegegeven:
X-Paygate-Signature: v1=<hex-hmac>Signature Verification (Merchant)
- Extraheer de headers:
X-Paygate-TimestampX-Paygate-Signature
- Haalt de raw JSON-payload op (exacte binaire body).
- Bereken de HMAC:
signed_payload = timestamp + "." + raw_bodyexpected_signature = HMAC_SHA256(secret, signed_payload)
- Vergelijk de handtekeningen met een "constant-time"-methode.
- Valideer de webhook als:
- De handtekeningen identiek zijn,
- Het tijdstempel binnen ±5 minuten van uw lokale klok valt.
Voorbeeld van authenticiteitsverificatie:
- Handelaars-ID:
BNP_DEMO_MID - HMAC-sleutel: zie Sandbox & Testpagina.
- Transactiedatum: 19 mei 2026, 09:23:20 (Parijse tijd, GMT+2).
Verificatie:
| Controlepunt | Header/waarde | Resultaat |
|---|---|---|
Is de handtekeningsversie v1? | X-Paygate-Signature-Version | CORRECT |
| Valideert het tijdstempel (±5 min)? | X-Paygate-Timestamp: 1779175402 | CORRECT |
| Komen de handtekeningen overeen? | X-Paygate-Signature | CORRECT |
Berekening:
- Data voor handtekening:
1779175402.<volle JSON-body> - Verwachte HMAC-SHA256 (met sleutel
6Gp_A!8f)3zZ9K]gb7S?2*tN(yH54[wB):df1f4aa6022460a9821832f9b89df82d92d01b35c80dddf596e97ff26e0abb14
Best Pratices voor Integratie
- Verifieer de transactie altijd via het
getByPayId-eindpunt, zelfs als de front-end "succes" meldt. - Verwerk altijd webhook-meldingen.
- Valideer de authenticiteit van webhookgegevens door de handtekening te controleren.
- Log alle return/cancel/webhook-oproepen voor auditing.