Developers

GloryPay QR API

Toon een SEPA-QR-code voor een artikel en een prijs. Je klant scant hem met zijn bankapp en betaalt met een overschrijving, rechtstreeks op de GloryPay-rekening van de verkoper.

Manieren om GloryPay QR te gebruiken

Kies wat bij je shop past. Elke manier maakt dezelfde SEPA-QR-code, en het geld komt rechtstreeks op de GloryPay-rekening van de verkoper.

API voor je eigen software

Java, PHP, Node.js, Python of elke site met een eigen backend (ook achter nginx). Eén aanroep: POST /api/v1/qr met het artikel en de prijs.

Lees de API-documentatie

WooCommerce-plugin

Voor WordPress-shops. Voegt de betaaloptie GloryPay QR toe aan de checkout en toont de QR-code op de bedankpagina.

Download glorypay-qr.zip

PrestaShop-module in test

Voor PrestaShop 1.7.7, 8 en 9. De bestelling krijgt de status "Wacht op GloryPay QR-betaling" en de bevestigingspagina toont de QR-code.

Download glorypayqr.zip

Demoshop

Bekijk de checkout door de ogen van de klant: kies een product, betaal met QR en zie wat je klant ziet.

Open de demoshop

Toegang: verkoperscode

GloryPay maakt een verkoperscode aan na controle van de naam en het IBAN van de verkoper. Gebruik hem alleen op je server, nooit in een webpagina of app.

Vraag een verkoperscode aan

Developer-panel

Uitgenodigd door een verkoper? Log in en bekijk zijn verkoperscode en testcode, de log van je API-aanvragen, de plugins en welke bankapps de QR-code lezen.

Open het developer-panel

Welke bankapps lezen de QR-code?

De GloryPay-QR volgt de Europese EPC-standaard (SEPA-overschrijving). Zo ver zijn de bankapps vandaag. (stand 19/10/2026)

Camera: scant de QR van een ander scherm of papier. Zelfde gsm: leest de QR uit een PDF of afbeelding op de gsm zelf.

BankCameraZelfde gsm
België
KBC / KBC Brussels
PDF delen naar KBC Mobile (SmartPaste)
JaJa
BNP Paribas Fortis (Easy Banking App)JaNiet vermeld
BelfiusJaNiet vermeld
ING BelgiëOnbekendOnbekend
ArgentaOnbekendOnbekend
Duitsland · heet daar "GiroCode"
Sparkasse
Fotoüberweisung > Importieren (PDF, PNG, JPEG)
JaJa
DKB
importeren van PDF of foto (meldingen van gebruikers)
JaWaarschijnlijk
Deutsche Bank
bestaande foto's
JaJa
ING DeutschlandJaNiet vermeld
CommerzbankJaNiet vermeld
Volksbank / Raiffeisenbank (VR Banking)JaNiet vermeld
N26JaNiet vermeld
Nederland
INGJaNiet vermeld
bunqJaNiet vermeld
KnabJaNiet vermeld
ASN Bank, SNS, RegioBankJaNiet vermeld
RabobankNeeNee
ABN AMRONeeNee
TriodosNeeNee
Frankrijk
BNP Paribas, Société Générale, Crédit Agricole en BPCE voeren de QR nog in. Nog niet betrouwbaar.
Revolut
getest door GloryPay (Frans account): foto van het scherm en de PDF uploaden werken
JaJa

Bron: hulppagina's van de banken, niet per app door ons getest.

Advies voor je klant op gsm

  1. De kopieerknoppen (IBAN, bedrag, mededeling) werken bij elke bank.
  2. "Download betaalopdracht (PDF)" werkt bij KBC, Revolut, Sparkasse, Deutsche Bank en waarschijnlijk DKB.
  3. De QR-code is voor wie met een tweede toestel of op de computer betaalt.

1. Vraag een verkoperscode aan

Elke verkoper met een GloryPay-account krijgt een verkoperscode van GloryPay. Vraag hem aan via support. De naam en het IBAN van de verkoper worden door GloryPay aan de code gekoppeld en kunnen nooit via de API gewijzigd worden.

Bewaar de code op je server. Zet hem nooit in een webpagina, een app of JavaScript die klanten kunnen lezen.

Testcode. Naast de verkoperscode is er een testcode (die begint met gps_test_). De verkoper maakt hem aan in het ledenportaal (Webshop & developers), of jij maakt hem aan in het developer-panel. Met een testcode antwoordt de API precies hetzelfde, met "test": true, maar de QR-code bevat geen betaalopdracht, de betaalpagina toont "TEST · niet betalen" en het verzoek verloopt na maximaal 1 uur. Gebruik hem om je koppeling te bouwen en te testen, en schakel daarna over op de verkoperscode.

2. Maak een QR-code

POST https://glorypay.com/api/v1/qr
Authorization: Bearer <verkoperscode>
Content-Type: application/json

{
  "article": "Fotoreeks Zomer",
  "price": 24.99,
  "order": "WC-10452",
  "return_url": "https://shop.example/thanks",
  "valid_minutes": 1440
}
VeldVerplichtOmschrijving
articlejaWat de klant koopt, max. 140 tekens.
pricejaBedrag in EUR, van 0.01 tot 100000.
orderneeJe bestelnummer, max. 60 tekens. Staat op de betaalpagina.
return_urlneehttps-link terug naar je shop, staat op de betaalpagina.
valid_minutesneeVan 5 tot 10080 (7 dagen). Standaard 1440 (24 uur).

Antwoord 201:

{
  "id": "Hk7pQ2xZra",
  "test": false,
  "status": "open",
  "article": "Fotoreeks Zomer",
  "order": "WC-10452",
  "amount": "24.99",
  "currency": "EUR",
  "merchant": "Seller name",
  "iban": "BE68539007547034",
  "reference": "+++123/4567/89002+++",
  "epc": "BCD\n002\n1\nSCT\n...",
  "qr_svg": "<svg ...>",
  "qr_svg_url": "https://glorypay.com/api/v1/qr/Hk7pQ2xZra/svg",
  "payment_url": "https://glorypay.com/p/Hk7pQ2xZra",
  "expires_at": "2026-10-19T14:40:00.000Z"
}

3. Toon hem aan je klant

De QR-code volgt de Europese EPC-standaard (SEPA-overschrijving). Bankapps vullen de begunstigde, het IBAN, het bedrag en de gestructureerde mededeling automatisch in.

4. Controleer de betaling

Het geld komt rechtstreeks op de GloryPay-rekening van de verkoper. De verkoper vindt de betaling in de GloryPay-app aan de hand van de gestructureerde mededeling (reference). Automatische betaalbevestiging is nog niet beschikbaar.

GET https://glorypay.com/api/v1/qr/{id} geeft het verzoek terug met zijn status: open, expired of cancelled. Na het verlopen geeft de afbeelding 410.

Foutmeldingen

Statuserror
401missing_seller_code, invalid_seller_code
400missing_article, invalid_price, invalid_return_url, invalid_valid_minutes
500db_error, try_again
503not_configured

Voorbeelden

curl

curl -X POST https://glorypay.com/api/v1/qr \
  -H "Authorization: Bearer $GLORYPAY_SELLER_CODE" \
  -H "Content-Type: application/json" \
  -d '{"article":"Fotoreeks Zomer","price":24.99,"order":"WC-10452"}'

PHP (WordPress / WooCommerce)

$r = wp_remote_post('https://glorypay.com/api/v1/qr', [
  'headers' => [
    'Authorization' => 'Bearer ' . GLORYPAY_SELLER_CODE,
    'Content-Type'  => 'application/json',
  ],
  'body' => wp_json_encode([
    'article'    => $product_name,
    'price'      => $order_total,
    'order'      => $order_id,
    'return_url' => $thank_you_url,
  ]),
]);
$qr = json_decode(wp_remote_retrieve_body($r), true);
echo '<img src="' . esc_url($qr['qr_svg_url']) . '" width="280" alt="SEPA QR code">';
echo '<a href="' . esc_url($qr['payment_url']) . '">Betaal met je bankapp</a>';

Node.js

const res = await fetch("https://glorypay.com/api/v1/qr", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.GLORYPAY_SELLER_CODE}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ article: "Fotoreeks Zomer", price: 24.99, order: "WC-10452" }),
});
const qr = await res.json(); // qr.qr_svg_url, qr.payment_url, qr.reference

Java (11+)

var body = """
    {"article":"Fotoreeks Zomer","price":24.99,"order":"WC-10452"}""";
var req = HttpRequest.newBuilder(URI.create("https://glorypay.com/api/v1/qr"))
    .header("Authorization", "Bearer " + System.getenv("GLORYPAY_SELLER_CODE"))
    .header("Content-Type", "application/json")
    .POST(HttpRequest.BodyPublishers.ofString(body))
    .build();
var res = HttpClient.newHttpClient().send(req, HttpResponse.BodyHandlers.ofString());
// res.statusCode() == 201, res.body() bevat qr_svg_url, payment_url en reference

Python

import os, requests

r = requests.post(
    "https://glorypay.com/api/v1/qr",
    headers={"Authorization": f"Bearer {os.environ['GLORYPAY_SELLER_CODE']}"},
    json={"article": "Fotoreeks Zomer", "price": 24.99, "order": "WC-10452"},
    timeout=20,
)
qr = r.json()  # qr["qr_svg_url"], qr["payment_url"], qr["reference"]