- wychodzące — sklep wysyła wiadomości na Twój kanał Discord (nowe zamówienie, raport dzienny, ogłoszenie);
- przychodzące od operatorów płatności (IPN) — operator potwierdza płatność, a platforma weryfikuje podpis i zmienia status zamówienia. Tego nie implementujesz sam — wystarczy poprawnie skonfigurowana metoda płatności.
ItemShop nie wysyła obecnie ogólnych, podpisanych webhooków HTTP na dowolny adres. Żeby reagować na zamówienia we własnym systemie, odpytuj
GET /orders/<shopId>?status=paid kluczem z orders:read (zobacz API z kluczem), a do dostarczania przedmiotów w grze użyj protokołu pluginu.Discord — konfiguracja
1
Utwórz webhook na Discordzie
Ustawienia serwera Discord → Integracje → Webhooki → nowy webhook na wybranym kanale → skopiuj adres.
2
Wklej adres w panelu
Integracje → Discord → pole Discord webhook URL w sekcji Połączenie. Adres musi zaczynać się od
https://discord.com/api/webhooks/ (dozwolone są też discordapp.com, canary.discord.com, ptb.discord.com). Inne adresy są odrzucane — to ochrona przed SSRF.3
Włącz rodzaje wiadomości i zapisz
Przełączniki „Wysyłaj powiadomienie o nowym zamówieniu” i „Wysyłaj codzienne raporty sprzedaży” działają niezależnie. Zmiany obu zakładek zapisuje jeden przycisk Zapisz integrację.
PUT /shops/<shopId> (wymaga shop:write): pola discordWebhookUrl, discordWebhook (wygląd powiadomień o zamówieniach) i discordWebhookDaily (wygląd raportów). W odpowiedziach API adres nigdy nie wraca w całości — zamiast niego dostajesz hasDiscordWebhook i zamaskowaną końcówkę discordWebhookUrlMasked.
Kiedy wychodzą wiadomości
Realizacja voucherów (darmowe zamówienia) nie jest liczona do kwot w raportach.
Wygląd i znaczniki
Każdy rodzaj ma własny tytuł (do 120 znaków), kolor paska, nazwę nadawcy (do 80 znaków), URL awatara i wiadomość nad embedem (do 1500 znaków). Pola mają rozsądne wartości domyślne; awatar jest opcjonalny. W wiadomości nad embedem zamówienia możesz użyć znaczników:
W raporcie dziennym:
Znaczniki z obu tabel nie są wymienne. Nieznany znacznik zostaje w tekście bez zmian.
Przykładowy payload
Tak wygląda żądanie, które ItemShop wysyła do Discorda po nowym zamówieniu (z wiadomościąGracz {nick} kupił {product} za {amount}!):
Dostarczanie i ponowienia
- Każda wiadomość to jedna próba
POSTdo Discorda — bez kolejki ponowień. - Nieudane wysłanie (np. usunięty webhook, limit Discorda) jest logowane i nie blokuje zamówienia ani jego realizacji.
- Pusty adres webhooka = brak wiadomości, niezależnie od przełączników.
Webhooki operatorów płatności
Operator płatności wysyła powiadomienie na publiczny endpoint platformy:provider— identyfikator operatora (np.imojeTransfer,zen,paymentic);shopId— sklep, do którego należy metoda płatności;webhookSecret— sekret metody płatności, ustalany przy konfiguracji.
Weryfikacja
Platforma sprawdza sekret w adresie oraz podpis operatora na oryginalnej, niezmienionej treści żądania, zanim cokolwiek przetworzy:
Sfałszowany webhook, zły sekret, niezgodny operator albo inny sklep →
401. Nie modyfikuj treści powiadomień na proxy — zmieniony body nie przejdzie weryfikacji.
Statusy i odpowiedź
Po przetworzeniu endpoint zwraca
200 z { "received": true }; operatorzy traktują 2xx jako potwierdzenie. Operatorzy ponawiają powiadomienia i wysyłają duplikaty — przejście w paid jest idempotentne, więc zamówienie opłaca się (i wysyła e-mail oraz powiadomienie Discord) dokładnie raz.
Dalej
Płatności
Konfiguracja operatorów i metod płatności.
Protokół pluginu
Jak opłacone zamówienie trafia na serwer gry.
API z kluczem
Odpytywanie zamówień z własnego systemu.
Błędy i limity
Kody
401, 409, 429 i ponawianie.