Przejdź do treści
Ostatnia aktualizacja

Zdarzenie: subscription:status_changed

Zdarzenie subscription:status_changed służy do monitorowania cyklu życia subskrypcji (płatności powtarzalnych) powiązanych z kontem Twojego klienta. Pozwala ono Twojej aplikacji na automatyczne zarządzanie dostępem do usług abonamentowych, bez konieczności ręcznego sprawdzania, czy klient opłacił kolejny okres rozliczeniowy.

Kiedy wysyłany jest ten event?

Powiadomienie to jest wyzwalane wyłącznie, gdy korzystasz z metod płatności obsługujących subskrypcje (np. BLIK Płatności Powtarzalne). Otrzymasz je między innymi, gdy:

  • Subskrypcja zostanie pomyślnie aktywowana (zmiana na subscription_active), co jest sygnałem do uruchomienia cyklicznej usługi dla klienta.
  • Subskrypcja wygaśnie z powodu braku środków lub utraty ważności metody płatności klienta (zmiana na subscription_expired).
  • Klient lub sklep ręcznie anuluje plany abonamentowe (zmiana na subscription_cancelled).

Struktura obiektu data

Gdy pole type w głównym obiekcie powiadomienia ma wartość subscription:status_changed, obiekt data będzie zawierał następujące informacje:

PoleTypOpisPrzykładowa wartość
idUUIDID subskrypcji w systemie SimPay019972b1-e4df-70c4-8c9b-6a89f6ccc948
service_idchar(8)Identyfikator usługie65c7519
statusSubscriptionStatusEnumAktualny status subskrypcjisubscription_active
modeSubscriptionModeEnumTryb subskrypcji (metoda płatności)BLIK
created_atISO 8601Data utworzenia subskrypcji2025-09-22T20:31:25+02:00
updated_atISO 8601Data ostatniej aktualizacji statusu subskrypcji2025-09-22T20:31:32+02:00
blikobjectObiekt ze szczegółami BLIK (przesyłany tylko przy mode == BLIK)
blik.modelBlikSubscriptionModelEnumModel subskrypcji BLIKO
blik.currencychar(3)Waluta subskrypcji BLIKPLN
blik.aliasobjectDane powiązanego aliasu BLIK
blik.alias.idUUIDID aliasu BLIK019972b1-e4c0-714f-a10b-f88a158bee50
blik.alias.typestringTyp aliasu BLIKPAYID
blik.alias.valuestringWartość aliasu BLIKAABBCCDD
blik.alias.labelstringEtykieta wyświetlana w aplikacji mobilnej bankutesty
blik.alias.statusBlikAliasStatusEnumStatus aliasu BLIKalias_active
blik.alias.created_atISO 8601Data utworzenia aliasu2025-09-22T20:31:25+02:00
blik.alias.updated_atISO 8601Data ostatniej aktualizacji aliasu2025-09-22T20:31:32+02:00
Wskazówka

Logika dostępu do Twojej usługi abonamentowej powinna opierać się na polu status. Jeśli otrzymasz webhook ze statusem subscription_expired, subscription_cancelled lub subscription_fraudulent, Twój system powinien automatycznie wstrzymać świadczenie usługi na rzecz klienta.


Przykładowy Payload JSON

Poniżej znajduje się kompletny zrzut (payload) powiadomienia wysyłanego dla zdarzenia subscription:status_changed (w tym przypadku udana aktywacja).

(Przykładowa sygnatura została wygenerowana przy użyciu klucza IPN: UwSkKiIwlxIeOMF8MIq9iDkQWBTtjoJQ. Możesz użyć tego klucza i poniższych danych do przetestowania swojego algorytmu walidacji).

{
  "type": "subscription:status_changed",
  "notification_id": "019972b2-0360-7177-a635-f26b05f632b8",
  "date": "2025-09-22T20:31:32+02:00",
  "data": {
    "id": "019972b1-e4df-70c4-8c9b-6a89f6ccc948",
    "service_id": "e65c7519",
    "status": "subscription_active",
    "mode": "BLIK",
    "created_at": "2025-09-22T20:31:25+02:00",
    "updated_at": "2025-09-22T20:31:32+02:00",
    "blik": {
      "model": "O",
      "currency": "PLN",
      "alias": {
        "id": "019972b1-e4c0-714f-a10b-f88a158bee50",
        "type": "PAYID",
        "value": "AABBCCDD",
        "label": "testy",
        "status": "alias_active",
        "created_at": "2025-09-22T20:31:25+02:00",
        "updated_at": "2025-09-22T20:31:32+02:00"
      }
    }
  },
  "signature": "0851c6bc63e92bff424a83ab9067c192d6e9a1b5d67ade9960f0cce67216d3f1"
}
Zobacz wyliczenie sygnatury
  1. Flatten wszystkich elementów po kolei + separacja |:

Nasz ciąg będzie wyglądać tak:

subscription:status_changed|019972b2-0360-7177-a635-f26b05f632b8|2025-09-22T20:31:32+02:00|019972b1-e4df-70c4-8c9b-6a89f6ccc948|e65c7519|subscription_active|BLIK|2025-09-22T20:31:25+02:00|2025-09-22T20:31:32+02:00|O|PLN|019972b1-e4c0-714f-a10b-f88a158bee50|PAYID|AABBCCDD|testy|alias_active|2025-09-22T20:31:25+02:00|2025-09-22T20:31:32+02:00
  1. Dodaj klucz IPN na końcu ciągu: ...|UwSkKiIwlxIeOMF8MIq9iDkQWBTtjoJQ

  2. Oblicz SHA256 z powyższego ciągu i zakoduj go w hex:

<?php

$signature = hash('sha256', 'subscription:status_changed|019972b2-0360-7177-a635-f26b05f632b8|2025-09-22T20:31:32+02:00|019972b1-e4df-70c4-8c9b-6a89f6ccc948|e65c7519|subscription_active|BLIK|2025-09-22T20:31:25+02:00|2025-09-22T20:31:32+02:00|O|PLN|019972b1-e4c0-714f-a10b-f88a158bee50|PAYID|AABBCCDD|testy|alias_active|2025-09-22T20:31:25+02:00|2025-09-22T20:31:32+02:00|UwSkKiIwlxIeOMF8MIq9iDkQWBTtjoJQ');
  1. Porównaj bezpieczną funkcją porównującą (np. hash_equals w PHP) obliczoną sygnaturę z tą przesłaną w polu signature powiadomienia. W tym przypadku wynikiem hashowania będzie 0851c6bc63e92bff424a83ab9067c192d6e9a1b5d67ade9960f0cce67216d3f1.