Payou

Entwickler

Sechs Endpunkte, eine Signatur, kein SDK.

Signierte HTTP-Anfragen an schlichte Endpunkte. Nimm die gehostete Zahlungsseite oder hol dir die Zahlungsdaten als JSON und bau deinen eigenen Checkout — das Ergebnis erreicht dich in beiden Fällen als ein signierter Webhook.

GET/api/new/api.php
# Zahlungsdaten anfordern — die Signatur entsteht aus deinem Händler-Passwort
# hash = md5(id : summ : password : sistems : order_id)
HASH=$(printf '%s' "5:100.00:$PAYOU_PASSWORD:card_RUB:4444" | md5sum | cut -d' ' -f1)

curl -G https://payou.pro/api/new/api.php \
  --data-urlencode id=5 \
  --data-urlencode sistems=card_RUB \
  --data-urlencode summ=100.00 \
  --data-urlencode order_id=4444 \
  --data-urlencode user_code=1 \
  --data-urlencode user_email=[email protected] \
  --data-urlencode hash="$HASH"
Anfrage
AUTH
WEBHOOKS
SCHRITT 01

Händler-Zugangsdaten erhalten

Registriere dich, trage deine Website ein und schick sie zur Moderation. Nach der Freigabe stehen Händler-ID und geheimes Passwort im Dashboard.

SCHRITT 02

Signieren und senden

Bilde den hash aus Händler-ID, Betrag, geheimem Passwort, Methode und order_id, dann rufe den Endpunkt auf. Der Betrag ist ein Dezimalstring mit Punkt.

SCHRITT 03

Den Webhook empfangen

Payou sendet das Ergebnis signiert an deine URL. Prüfe die Signatur, antworte mit MERCHANT_ORDER_ID|success und buche die Bestellung genau einmal gut.

AUTH

Händler-ID und Passwort

Anfragen werden signiert, nicht über einen Authorization-Header authentifiziert. Der hash ist ein md5 aus Händler-ID, Betrag, deinem geheimen Passwort, der Methode und deiner order_id — das Passwort selbst wird nie übertragen. Auszahlungen laufen über einen separaten api_key, signiert mit HMAC-SHA256.

BETRÄGE

Dezimalstring mit Punkt

Den Betrag überträgst du als Dezimalstring mit Punkt — 100.00, nie 100,00. Genau dieser String fließt in die Signatur ein: Eine abweichende Formatierung bricht den hash und nicht erst die Zahlung.

ORDER ID

Deine Referenz ist der Schlüssel

order_id ist dein eigener Bezeichner. Danach sucht der Status-Endpunkt, ihn liefert dir der Webhook zurück und über ihn gleichst du ab — deshalb muss er auf deiner Seite eindeutig sein.

WEBHOOKS

Signierter Form-POST

Payou sendet AMOUNT, status, intid, MERCHANT_ORDER_ID und SIGN per POST als application/x-www-form-urlencoded an deine URL. Prüfe SIGN und antworte mit MERCHANT_ORDER_ID|success — jeder andere Body gilt als nicht zugestellt.

STATUS

Abfragen oder auf den Webhook warten

Zwei Abfragen: eine über die Transaktions-ID von Payou, eine über deine order_id. Beide antworten mit id, order_id, status, paysys und summ — mehr braucht ein Abgleich nicht.

PRODUKTION

Integration in der Produktionsumgebung

Es gibt keinen separaten Sandbox-Host. Du integrierst gegen die Live-Endpunkte, mit einem Händlerkonto, das nach der Moderation freigeschaltet wird.

Endpunkte

Das ist die gesamte Schnittstelle für eine erste Integration. Zahlungsaufrufe signierst du mit deinem Händler-Passwort, Auszahlungen laufen über einen separaten api_key und HMAC-SHA256.

Methode Endpunkt Zweck
GET /sci/v1/ Gehostete Zahlungsseite — hierher schickst du den Zahler
GET /api/new/api.php Zahlungsdaten als JSON, für deinen eigenen Checkout
GET /api/status Zahlungsstatus über die Transaktions-ID von Payou
GET /api/status2 Zahlungsstatus über deine order_id
POST /api/new/confirm_payment.php Der Zahler bestätigt oder storniert eine Zahlung
POST /api/payout_create.php Auszahlung auf Karte oder Konto erstellen

API

Eine signierte Anfrage. Zahlungsdaten als JSON.

Land und Methode sind Parameter desselben Aufrufs, keine separaten Integrationen. Die Route dahinter wählt die Schicht.

GET/api/new/api.php

Anfrage

# Zahlungsdaten anfordern — die Signatur entsteht aus deinem Händler-Passwort
# hash = md5(id : summ : password : sistems : order_id)
curl -G https://payou.pro/api/new/api.php \
  --data-urlencode id=5 \
  --data-urlencode sistems=card_RUB \
  --data-urlencode summ=100.00 \
  --data-urlencode order_id=4444 \
  --data-urlencode user_code=1 \
  --data-urlencode hash="$HASH"

Antwort

# HTTP 200 · application/json
{
  "id":           "3874512",
  "card":         "0000 0000 0000 0000",
  "wallet_owner": "CARDHOLDER NAME",
  "sbp_bank":     "BANK NAME",
  "amount":       "100.00"
}

Beispielantwort. Es fließt kein echtes Geld.

Zugangsdaten, Referenz, erste Anfrage.

Die Dokumentation ist offen — zum Lesen oder zum Bauen gegen die Endpunkte braucht es kein Vertriebsgespräch.