SNSP Payment API

Akzeptiere Zahlungen von Schnipp Schnapp GmbH Kunden in deinem Shop, deiner Website oder deinem Discord-Bot.

Base URL:
https://api.primeoase.net

Ăśbersicht

Die SNSP Payment API ermöglicht es dir, Zahlungen von Spielern zu akzeptieren, die ein Guthaben auf der Schnipp Schnapp GmbH haben. Das Geld wird sofort auf dein Bank-Konto gutgeschrieben.

âś… Vorteile:
• Sofortige Gutschrift auf dein Bank-Konto
• Keine Gebühren
• Einfache Integration
• Sichere Authentifizierung

Was du brauchst

Schnellstart

In nur 3 Schritten zur ersten Zahlung:

1. API-Key holen

Gehe zu /payment-api/, logge dich ein und erstelle einen API-Key fĂĽr deinen Shop.

2. Zahlung erstellen

POST /api/v1/payments
Authorization: Bearer sk_live_dein_api_key
Content-Type: application/json

{
  "amount": 9.99,
  "reference": "Bestellung-123",
  "redirect_url": "https://dein-shop.de/danke"
}

3. Kunde weiterleiten

Du erhältst eine checkout_url zurück. Leite den Kunden dorthin:

{
  "status": "success",
  "payment_id": "pay_abc123def456",
  "checkout_url": "https://snspgmbh.de/checkout/?payment_id=pay_abc123def456"
}

Das war's! Der Kunde bezahlt, und das Geld landet auf deinem Bank-Konto.

Authentifizierung

Alle API-Anfragen mĂĽssen mit deinem API-Key authentifiziert werden. Sende ihn im Authorization Header:

Authorization: Bearer sk_live_dein_api_key_hier
⚠️ Sicherheitshinweis:
• Teile deinen API-Key niemals öffentlich
• Speichere ihn nicht im Frontend-Code (JavaScript im Browser)
• Nutze Umgebungsvariablen oder eine sichere Config-Datei
• Bei Kompromittierung: Sofort neuen Key generieren unter /payment-api/

Fehlerbehandlung

Bei Fehlern gibt die API einen entsprechenden HTTP-Status-Code und eine Fehlermeldung zurĂĽck:

{
  "status": "error",
  "message": "UngĂĽltiger API-Key"
}
HTTP Code Bedeutung
200 Erfolgreich
400 UngĂĽltige Anfrage (fehlende/falsche Parameter)
401 Nicht authentifiziert (API-Key fehlt/ungĂĽltig)
404 Nicht gefunden (z.B. Zahlung existiert nicht)
500 Serverfehler

Zahlung erstellen

POST /api/v1/payments

Erstellt eine neue Zahlungsanforderung. Du erhältst eine Checkout-URL, zu der du den Kunden weiterleiten musst.

Request Body

Parameter Typ Beschreibung
amount *Pflicht number Betrag in Euro (z.B. 9.99)
reference Optional string Deine Referenz/Bestellnummer (max. 100 Zeichen)
description Optional string Beschreibung fĂĽr den Kunden (max. 500 Zeichen)
redirect_url Optional string URL wohin der Kunde nach Zahlung weitergeleitet wird
cancel_url Optional string URL bei Abbruch der Zahlung
expires_in Optional integer GĂĽltigkeit in Sekunden (Standard: 86400 = 24h, Max: 604800 = 7 Tage)

Beispiel Request

POST /api/v1/payments
Authorization: Bearer sk_live_abc123...
Content-Type: application/json

{
  "amount": 29.99,
  "reference": "VIP-RANG-001",
  "description": "VIP Rang fĂĽr 30 Tage",
  "redirect_url": "https://mein-shop.de/success?order=VIP-RANG-001"
}

Beispiel Response

{
  "status": "success",
  "payment_id": "pay_7f3a8b2c1d4e5f6a",
  "checkout_url": "https://snspgmbh.de/checkout/?payment_id=pay_7f3a8b2c1d4e5f6a",
  "amount": 29.99,
  "expires_at": 1703548800.0
}

Zahlung abfragen

GET /api/v1/payments/{payment_id}

Ruft den aktuellen Status einer Zahlung ab.

Beispiel Response

{
  "status": "success",
  "payment": {
    "payment_id": "pay_7f3a8b2c1d4e5f6a",
    "amount": 29.99,
    "currency": "EUR",
    "status": "completed",
    "reference": "VIP-RANG-001",
    "description": "VIP Rang fĂĽr 30 Tage",
    "payer_username": "Spieler123",
    "created_at": 1703462400.0,
    "completed_at": 1703462500.0
  }
}

Zahlungsstatus

Status Bedeutung
pending Zahlung wurde erstellt, wartet auf Kunde
completed Zahlung erfolgreich abgeschlossen
cancelled Zahlung wurde abgebrochen
expired Zahlung ist abgelaufen
refunded Zahlung wurde erstattet

Zahlung abbrechen

POST /api/v1/payments/{payment_id}/cancel

Bricht eine ausstehende Zahlung ab. Nur möglich bei Status "pending".

Beispiel Response

{
  "status": "success",
  "message": "Zahlung abgebrochen"
}

Zahlung erstatten

POST /api/v1/payments/{payment_id}/refund

Erstattet eine abgeschlossene Zahlung. Der Betrag wird vom deinem Konto abgezogen und dem Kunden gutgeschrieben.

⚠️ Hinweis: Du musst genug Guthaben auf deinem Bank-Konto haben, um eine Erstattung durchzuführen.

Beispiel Response

{
  "status": "success",
  "message": "Zahlung erstattet",
  "refunded_amount": 29.99
}

Zahlungsablauf

So läuft eine typische Zahlung ab:

đź›’
Kunde will kaufen
→
📝
Shop erstellt Zahlung
→
đź”—
Weiterleitung zu Checkout
→
đź’ł
Kunde bezahlt
→
âś…
ZurĂĽck zum Shop

Detaillierter Ablauf

  1. Kunde klickt "Kaufen" in deinem Shop
  2. Dein Server ruft POST /api/v1/payments auf
  3. Du erhältst eine checkout_url
  4. Du leitest den Kunden zu dieser URL weiter
  5. Kunde loggt sich bei Schnipp Schnapp GmbH ein
  6. Kunde bestätigt die Zahlung
  7. Geld wird sofort auf dein Konto gutgeschrieben
  8. Kunde wird zu deiner redirect_url weitergeleitet
  9. Optional: Du prĂĽfst den Status mit GET /api/v1/payments/{id}

Webhooks

Webhooks benachrichtigen deinen Server automatisch ĂĽber Zahlungsereignisse. Du kannst eine Webhook-URL beim Erstellen deines API-Keys angeben.

đź’ˇ Tipp: Webhooks sind optional. Du kannst den Zahlungsstatus auch jederzeit per API abfragen.

Webhook-Ereignisse

Event Beschreibung
payment.completed Zahlung wurde erfolgreich abgeschlossen
payment.refunded Zahlung wurde erstattet

Webhook-Payload

POST https://dein-server.de/webhook
Content-Type: application/json
X-GM-Timestamp: 1703462500
X-GM-Signature: sha256=abc123...

{
  "event": "payment.completed",
  "payment_id": "pay_7f3a8b2c1d4e5f6a",
  "amount": 29.99,
  "reference": "VIP-RANG-001",
  "payer_username": "Spieler123"
}

Signatur verifizieren

Um sicherzustellen, dass der Webhook wirklich von uns kommt, kannst du die Signatur prĂĽfen:

// PHP Beispiel
$payload = file_get_contents('php://input');
$timestamp = $_SERVER['HTTP_X_GM_TIMESTAMP'];
$signature = $_SERVER['HTTP_X_GM_SIGNATURE'];

$expected = hash_hmac(
    'sha256',
    $timestamp . '.' . $payload . '.' . $webhookSecret,
    $webhookSecret
);

if (hash_equals($expected, $signature)) {
    // Webhook ist authentisch
}

Code-Beispiele

<?php
// Konfiguration
$apiKey = "sk_live_DEIN_API_KEY";
$apiUrl = "https://api.primeoase.net";

// Zahlung erstellen
function createPayment($amount, $reference, $redirectUrl) {
    global $apiKey, $apiUrl;
    
    $data = [
        "amount" => $amount,
        "reference" => $reference,
        "redirect_url" => $redirectUrl
    ];
    
    $ch = curl_init("$apiUrl/api/v1/payments");
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json"
    ]);
    
    $response = curl_exec($ch);
    curl_close($ch);
    
    return json_decode($response, true);
}

// Beispiel: VIP-Rang verkaufen
$payment = createPayment(9.99, "VIP-" . uniqid(), "https://mein-shop.de/success");

if ($payment["status"] === "success") {
    // Kunde zur Bezahlseite weiterleiten
    header("Location: " . $payment["checkout_url"]);
    exit;
} else {
    die("Fehler: " . $payment["message"]);
}
?>
// Node.js / Server-side JavaScript
const API_KEY = "sk_live_DEIN_API_KEY";
const API_URL = "https://api.primeoase.net";

async function createPayment(amount, reference, redirectUrl) {
    const response = await fetch(`${API_URL}/api/v1/payments`, {
        method: "POST",
        headers: {
            "Authorization": `Bearer ${API_KEY}`,
            "Content-Type": "application/json"
        },
        body: JSON.stringify({
            amount,
            reference,
            redirect_url: redirectUrl
        })
    });
    
    return response.json();
}

// Beispiel: Express.js Route
app.post("/buy-vip", async (req, res) => {
    const payment = await createPayment(
        9.99,
        `VIP-${Date.now()}`,
        "https://mein-shop.de/success"
    );
    
    if (payment.status === "success") {
        res.redirect(payment.checkout_url);
    } else {
        res.status(400).send(payment.message);
    }
});

// Zahlungsstatus prĂĽfen
async function checkPayment(paymentId) {
    const response = await fetch(`${API_URL}/api/v1/payments/${paymentId}`, {
        headers: { "Authorization": `Bearer ${API_KEY}` }
    });
    
    return response.json();
}
import requests

API_KEY = "sk_live_DEIN_API_KEY"
API_URL = "https://api.primeoase.net"

def create_payment(amount, reference, redirect_url):
    """Erstellt eine neue Zahlung"""
    response = requests.post(
        f"{API_URL}/api/v1/payments",
        headers={
            "Authorization": f"Bearer {API_KEY}",
            "Content-Type": "application/json"
        },
        json={
            "amount": amount,
            "reference": reference,
            "redirect_url": redirect_url
        }
    )
    return response.json()

def check_payment(payment_id):
    """PrĂĽft den Status einer Zahlung"""
    response = requests.get(
        f"{API_URL}/api/v1/payments/{payment_id}",
        headers={"Authorization": f"Bearer {API_KEY}"}
    )
    return response.json()

# Beispiel: VIP-Rang verkaufen
payment = create_payment(
    amount=9.99,
    reference="VIP-12345",
    redirect_url="https://mein-shop.de/success"
)

if payment["status"] == "success":
    print(f"Checkout URL: {payment['checkout_url']}")
else:
    print(f"Fehler: {payment['message']}")
# Zahlung erstellen
curl -X POST https://api.primeoase.net/api/v1/payments \
  -H "Authorization: Bearer sk_live_DEIN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 9.99,
    "reference": "VIP-12345",
    "redirect_url": "https://mein-shop.de/success"
  }'

# Zahlung abfragen
curl https://api.primeoase.net/api/v1/payments/pay_abc123 \
  -H "Authorization: Bearer sk_live_DEIN_API_KEY"

# Zahlung abbrechen
curl -X POST https://api.primeoase.net/api/v1/payments/pay_abc123/cancel \
  -H "Authorization: Bearer sk_live_DEIN_API_KEY"

# Zahlung erstatten
curl -X POST https://api.primeoase.net/api/v1/payments/pay_abc123/refund \
  -H "Authorization: Bearer sk_live_DEIN_API_KEY"

Status-Codes

HTTP Status Codes

Code Bedeutung Wann?
200 OK Anfrage erfolgreich
400 Bad Request Ungültige Parameter oder Aktion nicht möglich
401 Unauthorized API-Key fehlt oder ungĂĽltig
404 Not Found Zahlung nicht gefunden
500 Server Error Interner Fehler, bitte erneut versuchen

Limits

Limit Wert
Minimaler Betrag 0,01 €
Maximaler Betrag Unbegrenzt (abhängig vom Kundenguthaben)
ZahlungsgĂĽltigkeit Standard 24 Stunden, max. 7 Tage
Reference Länge Max. 100 Zeichen
Description Länge Max. 500 Zeichen

FAQ

Wie bekomme ich einen API-Key?

Gehe zu /payment-api/, logge dich mit deinem Schnipp Schnapp GmbH Account ein und erstelle einen neuen Shop. Du erhältst sofort deinen API-Key.

Wo landet das Geld?

Das Geld wird sofort auf dein Schnipp Schnapp GmbH Guthaben gutgeschrieben. Du kannst es von dort auf dein Schnipp Schnapp-Konto auszahlen.

Gibt es GebĂĽhren?

Aktuell sind keine GebĂĽhren fĂĽr die Nutzung der Payment API vorgesehen.

Was passiert wenn der Kunde nicht genug Guthaben hat?

Der Kunde sieht auf der Checkout-Seite einen Hinweis, dass sein Guthaben nicht ausreicht, und einen Link zum Aufladen.

Kann ich Zahlungen stornieren?

Ausstehende Zahlungen (Status "pending") können jederzeit mit POST /api/v1/payments/{id}/cancel abgebrochen werden.

Kann ich Erstattungen durchfĂĽhren?

Ja, mit POST /api/v1/payments/{id}/refund. Das Geld wird von deinem Konto abgezogen und dem Kunden gutgeschrieben. Du benötigst ausreichend Guthaben.

Was ist die redirect_url?

Die URL, zu der der Kunde nach erfolgreicher Zahlung weitergeleitet wird. Hier kannst du z.B. eine "Danke fĂĽr deinen Kauf"-Seite anzeigen und die Bestellung abschlieĂźen.

Wie weiĂź ich, ob eine Zahlung erfolgreich war?

Du kannst entweder einen Webhook empfangen (automatisch) oder den Status jederzeit mit GET /api/v1/payments/{id} abfragen. PrĂĽfe ob status gleich "completed" ist.

Mein API-Key wurde kompromittiert, was nun?

Gehe sofort zu /payment-api/ und klicke bei deinem Shop auf "Neuen Key". Der alte Key wird sofort ungĂĽltig.

↑