Előfizetés-rendelés és fizetési webhook – működés

A rendelő végpont ellenőrzései és a jogok kiosztása, a fizetési szolgáltató értesítőjének aláírás-ellenőrzése, idempotenciája és állapotváltásai.

Rendelés (api/subscription/order.order)

POST definition_id, plan_id, months. Funkciójogot a kód nem ellenőriz.

  1. API-kulcs → a kulcs tulajdonosa a megrendelő (401 hiánynál).
  2. getDefinition(): csak status=1 és enabled=1 (különben 404); definitionHasPlan (400); planOnStore (403).
  3. Érvényesség: kezdet = a felhasználó regisztrációja (registeredAt), vég = kezdet + months (max. 120; 0 = nyitott vég).
  4. Célpontok: házi client esetén (dlbtclient->homeClient) a client minden tagja (usersOf), különben csak a rendelő.
  5. Tagonként dlbtprovision->materialise(uid, definition_id, plan_id, from, to, user_id, 'order', false) — hozzáad, nem cserél.
  6. Válasz: company_client_id, users, result (created, updated, deleted), valid_from, valid_to, definition.

Előfeltétel: a dlbtprovision regisztrálva (különben 409). Olvasott táblák: subscription_definition, subscription_definition_plan, subscription_plan, subscription_plan_to_store; írt: user_feature (source='order'). Fizetés-ellenőrzés nincs.

Webhook (api/subscription/webhook)

Aláírással védett nyilvános végpont.

  • SimplePay (ha dlbtpayment->provider() = simplepay): Signature fejléc ellenőrzése a nyers törzsre (401); JSON (400); event_ref kötelező (400); claimEvent() egyedi kulcsú beszúrás, ismételt eseménynél csak nyugta; applySimplepay(): tranzakció keresése, provider_ref csatolása, payment.succeeded → token tárolása és settlePaid(), payment.failed → settleFailed(); végül markEventProcessed() és aláírt nyugta.
  • Általános út: HMAC az X-Dlbt-Signature fejlécben a modul-beállításban tárolt webhook-titokkal (hiányzó titok is 401); id, type, provider, data; idempotencia (duplicate:true); payment.succeeded → settlePaid, payment.failed → settleFailed, subscription.canceled → canceled állapot. Feldolgozási hibánál 500 („The event was stored but could not be processed.”).
  • webhook.back: csak tájékoztat (pending:true), állapotot nem változtat — a böngésző-visszatérés nem bizonyíték.

A dlbtpayment library saját táblái (esemény, tranzakció, előfizetés) a vezérlőből név szerint nem állapíthatók meg. A terhelés-igényeket az előfizetés-életciklus háttérfeladat hozza létre.

Kapcsolódó témák: REST API előfizetés online fizetés