Project starten

De REST API van Reward Points gebruiken

Geef gebruikers spaarpunten via een beveiligd REST-endpoint van de plugin.

Wat doet deze API?

Het biedt een REST-endpoint dat spaarpunten toevoegt aan een WooCommerce-gebruiker en het nieuwe totaal van de gebruiker teruggeeft.
Intern gebruikt het de logica manually_add_user_points() van de plugin, zodat totalen, logs en hooks werken als bij handmatig toevoegen door een beheerder.

Wat is het endpoint?

  • Methode: POST
  • Route: /wp-json/wc-reward-points/v1/add-points

Welke rechten zijn nodig?

Alleen ingelogde gebruikers met het recht manage_woocommerce mogen dit endpoint aanroepen (meestal beheerders of shopmanagers). Onbevoegde verzoeken worden geweigerd.

Welke parameters zijn verplicht?

Alle parameters zijn verplicht en worden op de server gecontroleerd:

Veld Type Regels Doel
user_id integer Moet in WordPress bestaan Welke gebruiker de punten krijgt
points integer Moet een positief geheel getal zijn (> 0) Hoeveel punten erbij komen
message string Op de server opgeschoond (sanitize_text_field) Verschijnt in het puntenlog / de notitie

Voorbeeld van een JSON-body

{
  "user_id": 123,
  "points": 250,
  "message": "Customer service gesture for delayed shipment"
}

Hoe ziet een geslaagd antwoord eruit?

{
  "success": true,
  "user_id": 123,
  "points_added": 250,
  "new_total": 1420,
  "message": "Customer service gesture for delayed shipment"
}

Let op: new_total wordt na het toevoegen uit de user-meta gelezen.

Welke fouten kan ik tegenkomen?

HTTP Code Wanneer het gebeurt
400 invalid_user user_id ontbreekt / is ongeldig of de gebruiker bestaat niet
400 invalid_points points is <= 0 of ontbreekt
401 n.v.t. Niet ingelogd
403 n.v.t. Ingelogd, maar zonder het recht manage_woocommerce
404 n.v.t. Route niet geregistreerd (plugin uitgeschakeld of API niet ingeschakeld)

Hoe log ik in?

  1. Applicatiewachtwoorden (aanbevolen voor server-naar-server): WordPress 5.6+ → Gebruikersprofiel → Applicatiewachtwoorden → Nieuw aanmaken. Gebruik HTTP Basic Auth (user:application-password).
  2. Login-cookies + nonce (voor aanroepen vanuit het dashboard in wp-admin).
  3. JWT/OAuth (via aparte authenticatieplugins), als je die gebruikt.

cURL-voorbeeld (applicatiewachtwoorden)

curl -X POST "https://example.com/wp-json/wc-reward-points/v1/add-points" \
  -u "admin:YOUR-APP-PASSWORD" \
  -H "Content-Type: application/json" \
  -d '{"user_id":123,"points":250,"message":"Promo: Spring bonus"}'

Snelle instelling in Postman/Insomnia

  1. Methode/URL: POST https://your-site/wp-json/wc-reward-points/v1/add-points
  2. Auth: Basic → gebruikersnaam: je WP-gebruiker, wachtwoord: het applicatiewachtwoord
  3. Headers: Content-Type: application/json
  4. Body (raw JSON): zie het voorbeeld hierboven

PHP-voorbeeld (server-side met applicatiewachtwoorden)

<?php
$url = site_url('/wp-json/wc-reward-points/v1/add-points');
$resp = wp_remote_post($url, array(
  'headers' => array(
    'Authorization' => 'Basic ' . base64_encode('admin:YOUR-APP-PASSWORD'),
    'Content-Type'  => 'application/json',
  ),
  'body' => wp_json_encode(array(
    'user_id' => 123,
    'points'  => 100,
    'message' => 'Welcome bonus',
  )),
  'timeout' => 20,
));
if (is_wp_error($resp)) {
  error_log($resp->get_error_message());
} else {
  $code = wp_remote_retrieve_response_code($resp);
  $body = json_decode(wp_remote_retrieve_body($resp), true);
  // Handle $code / $body
}
fetch('/wp-json/wc-reward-points/v1/add-points', {
  method: 'POST',
  credentials: 'include', // send auth cookies
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ user_id: 123, points: 50, message: 'Manual adjustment' })
}).then(r => r.json()).then(console.log);
Het endpoint controleert rechten (current_user_can('manage_woocommerce')), dus in deze context zijn cookies plus een ingelogde beheerderssessie genoeg voor authenticatie.

Werkt dit op een multisite?

Ja. Als beide gelden – WordPress is een multisite en de plugininstelling multisiteSplitPoints staat aan – dan worden punten onder een sitespecifieke meta-key opgeslagen:

woocommerce_reward_points_<BLOG_ID>

Anders is de meta-key:

woocommerce_reward_points

Dat is belangrijk als je totalen elders direct uit de user-meta leest.

Waarom ontbreekt de route misschien (404)?

  • De plugin (of de API-functie ervan) is uitgeschakeld.
  • De pluginoptie enable staat op false (routes worden alleen geregistreerd als die aan staat).
  • Je cachelaag blokkeert /wp-json of POST-verzoeken.
  • Een beveiligings- / firewallplugin verstoort REST-aanroepen.

Wat gebeurt er intern als ik de API aanroep?

  1. Invoer wordt opgeschoond en gecontroleerd.
  2. De code zet $_POST['userId'], $_POST['points'], $_POST['text'] en $_POST['action']='woocommerce_reward_points_add_points'.
  3. Hij initialiseert WooCommerce_Reward_Points_Earning en roept manually_add_user_points() aan.
  4. Hij leest het bijgewerkte totaal uit de user-meta en geeft het terug in het antwoord.

Kan ik er punten mee afhalen?

Nee, dit endpoint voegt alleen punten toe (vereist points > 0). Om punten af te halen, maak je een apart endpoint of breid je dit uit met een veilige aftrekprocedure.

Is er rate limiting of idempotentie?

Niet ingebouwd. Koppel je externe systemen, bouw dan idempotentie aan de clientkant in (bijv. een uniek bewerkings-ID) om dubbele toekenningen te voorkomen.

Hoe test ik dit snel?

  1. Schakel de API-instelling van de plugin in (enable = true).
  2. Controleer of je gebruiker het recht manage_woocommerce heeft.
  3. Voer het cURL-voorbeeld uit.
  4. Controleer de punten van de gebruiker in het beheer of via:
    get_user_meta(123, 'woocommerce_reward_points', true);

    (of de multisite-sleutel, indien van toepassing)

Checklist voor problemen

  • 401/403: niet ingelogd of zonder het juiste recht. Gebruik applicatiewachtwoorden of een beheerderssessie.
  • 404: controleer of de functie aan staat en of geen firewall /wp-json blokkeert.
  • 400 invalid_user: user_id moet een bestaande WP-gebruiker zijn.
  • 400 invalid_points: gebruik een positief geheel getal.
  • Totalen veranderen niet: controleer eigen hooks of objectcaches die wijzigingen kunnen terugdraaien / vasthouden.

Best practices voor beveiliging

  • Gebruik voor server-naar-serveraanroepen bij voorkeur applicatiewachtwoorden; beperk dit zo mogelijk tot een beheeraccount met weinig rechten.
  • Gebruik alleen HTTPS.
  • Log elke toekenning met een duidelijk, leesbaar message.
  • Overweeg rate limiting of WAF-regels als je dit buiten interne systemen beschikbaar maakt.