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.
- API-kulcs → a kulcs tulajdonosa a megrendelő (401 hiánynál).
getDefinition(): csakstatus=1ésenabled=1(különben 404);definitionHasPlan(400);planOnStore(403).- Érvényesség: kezdet = a felhasználó regisztrációja (
registeredAt), vég = kezdet +months(max. 120; 0 = nyitott vég). - Célpontok: házi client esetén (
dlbtclient->homeClient) a client minden tagja (usersOf), különben csak a rendelő. - Tagonként
dlbtprovision->materialise(uid, definition_id, plan_id, from, to, user_id, 'order', false)— hozzáad, nem cserél. - 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):Signaturefejléc ellenőrzése a nyers törzsre (401); JSON (400);event_refkötelező (400);claimEvent()egyedi kulcsú beszúrás, ismételt eseménynél csak nyugta;applySimplepay(): tranzakció keresése,provider_refcsatolása,payment.succeeded→ token tárolása éssettlePaid(),payment.failed→settleFailed(); végülmarkEventProcessed()és aláírt nyugta. - Általános út: HMAC az
X-Dlbt-Signaturefejlé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.