Die REST API von Reward Points nutzen
Vergeben Sie Prämienpunkte an Nutzer über einen gesicherten REST-Endpunkt des Plugins.
Was macht diese API?
Sie stellt einen REST-Endpunkt bereit, der einem WooCommerce-Nutzer Prämienpunkte gutschreibt und den neuen Punktestand zurückgibt.
Intern nutzt er die Plugin-Logik manually_add_user_points(), sodass Summen, Protokolle und Hooks wie bei einer manuellen Gutschrift im Admin funktionieren.
Wie lautet der Endpunkt?
- Methode: POST
- Route: /wp-json/wc-reward-points/v1/add-points
Welche Berechtigungen sind nötig?
Nur angemeldete Nutzer mit der Berechtigung manage_woocommerce dürfen den Endpunkt aufrufen (meist Administratoren oder Shop-Manager). Nicht berechtigte Anfragen werden abgelehnt.
Welche Parameter sind erforderlich?
Alle Parameter sind Pflicht und werden auf dem Server geprüft:
| Feld | Typ | Regeln | Zweck |
|---|---|---|---|
user_id |
integer | Muss in WordPress existieren | Welchem Nutzer gutgeschrieben wird |
points |
integer | Muss eine positive ganze Zahl sein (> 0) | Wie viele Punkte gutgeschrieben werden |
message |
string | Wird serverseitig bereinigt (sanitize_text_field) |
Erscheint im Punkteprotokoll bzw. in der Notiz |
Beispiel-JSON
{
"user_id": 123,
"points": 250,
"message": "Customer service gesture for delayed shipment"
}
Wie sieht eine erfolgreiche Antwort aus?
{
"success": true,
"user_id": 123,
"points_added": 250,
"new_total": 1420,
"message": "Customer service gesture for delayed shipment"
}
Hinweis: new_total wird nach der Gutschrift aus den Nutzer-Metadaten gelesen.
Welche Fehler können auftreten?
| HTTP | Code | Wann er auftritt |
|---|---|---|
| 400 | invalid_user |
user_id fehlt, ist ungültig oder der Nutzer existiert nicht |
| 400 | invalid_points |
points ist <= 0 oder fehlt |
| 401 | n/a | Nicht angemeldet |
| 403 | n/a | Angemeldet, aber ohne Berechtigung manage_woocommerce |
| 404 | n/a | Route nicht registriert (Plugin deaktiviert oder API nicht aktiviert) |
Wie authentifiziere ich mich?
- Anwendungspasswörter (empfohlen für Server-zu-Server): WordPress 5.6+ → Benutzerprofil → Anwendungspasswörter → Neues erstellen. Nutzen Sie HTTP Basic Auth (
user:application-password). - Login-Cookies + Nonce (für Aufrufe aus dem wp-admin heraus).
- JWT/OAuth (über separate Auth-Plugins), falls Ihr System sie nutzt.
cURL-Beispiel (Anwendungspasswörter)
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"}'
Schnelleinrichtung in Postman/Insomnia
- Methode/URL: POST https://your-site/wp-json/wc-reward-points/v1/add-points
- Auth: Basic → Benutzername: Ihr WP-Nutzer, Passwort: Anwendungspasswort
- Header:
Content-Type: application/json - Body (raw JSON): siehe Beispiel oben
PHP-Beispiel (serverseitig mit Anwendungspasswörtern)
<?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
}
Beispiel mit WP-Nonce + Login-Cookie (AJAX aus dem wp-admin)
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);
The endpoint relies on capability checks (current_user_can('manage_woocommerce')), so cookies + a logged-in admin session are sufficient for auth in this context.
Funktioniert das mit Multisite?
Ja. Wenn beides zutrifft – WordPress ist eine Multisite und die Plugin-Einstellung multisiteSplitPoints ist aktiv –, werden die Punkte unter einem websitespezifischen Meta-Schlüssel gespeichert:
woocommerce_reward_points_<BLOG_ID>
Andernfalls lautet der Meta-Schlüssel:
woocommerce_reward_points
Das ist wichtig, wenn Sie Punktestände an anderer Stelle direkt aus den Nutzer-Metadaten lesen.
Warum fehlt die Route (404)?
- Das Plugin (oder seine API-Funktion) ist deaktiviert.
- Die Plugin-Option
enableist false (Routen werden nur bei aktivem Plugin registriert). - Ihre Caching-Ebene blockiert
/wp-jsonoder POST-Anfragen. - Ein Sicherheits- oder Firewall-Plugin stört REST-Aufrufe.
Was passiert intern beim API-Aufruf?
- Eingaben werden bereinigt und geprüft.
- Der Code setzt
$_POST['userId'],$_POST['points'],$_POST['text']und$_POST['action']='woocommerce_reward_points_add_points'. - Er initialisiert
WooCommerce_Reward_Points_Earningund ruftmanually_add_user_points()auf. - Er liest den neuen Punktestand aus den Nutzer-Metadaten und gibt ihn in der Antwort zurück.
Kann ich damit Punkte abziehen?
Nein – dieser Endpunkt schreibt nur Punkte gut (erfordert points > 0). Zum Abziehen erstellen Sie einen eigenen Endpunkt oder erweitern diesen um einen sicheren Abzugs-Ablauf.
Gibt es Ratenbegrenzung oder Idempotenz?
Nicht eingebaut. Wenn Sie externe Systeme anbinden, sorgen Sie auf Client-Seite für Idempotenz (z. B. mit einer eindeutigen Vorgangs-ID), um doppelte Gutschriften zu vermeiden.
Wie teste ich schnell?
- Aktivieren Sie die API-Einstellung des Plugins (
enable = true). - Prüfen Sie, ob Ihr Nutzer die Berechtigung
manage_woocommercehat. - Führen Sie das cURL-Beispiel aus.
- Verify the user’s points in the admin or via:
get_user_meta(123, 'woocommerce_reward_points', true);
(oder bei Multisite den websitespezifischen Schlüssel)
Checkliste zur Fehlersuche
- 401/403: Nicht angemeldet oder fehlende Berechtigung. Nutzen Sie Anwendungspasswörter oder eine Admin-Sitzung.
- 404: Prüfen Sie, ob die Funktion aktiv ist und keine Firewall
/wp-jsonblockiert. - 400
invalid_user:user_idmuss ein bestehender WP-Nutzer sein. - 400
invalid_points: Nutzen Sie eine positive ganze Zahl. - Punktestand ändert sich nicht: Prüfen Sie eigene Hooks oder Object-Caching, die Änderungen zurücksetzen oder puffern könnten.
Sicherheitsempfehlungen
- Nutzen Sie für Server-zu-Server-Aufrufe bevorzugt Anwendungspasswörter und nach Möglichkeit ein Admin-Konto mit wenigen Rechten.
- Nur über HTTPS ausliefern.
- Protokollieren Sie jede Gutschrift mit einer klaren, gut lesbaren
message. - Erwägen Sie Ratenbegrenzung oder WAF-Regeln, wenn der Endpunkt über interne Systeme hinaus erreichbar ist.