docs(18.1-08): idempotency keys and the strict checkout price in COVERAGE

This commit is contained in:
Jakub Zych
2026-10-16 12:44:33 +02:00
parent f925d6078d
commit f217c73ef8

View File

@@ -6,10 +6,10 @@ Scope: the Stripe Billing surface the frozen PHP `SubscriptionGateway` contract
| capability | decision | reason |
|---|---|---|
| customers.create with subscriber metadata | INTEGRATE | e-mail, name, subscriber_type and subscriber_id metadata |
| customers.create with subscriber metadata | INTEGRATE | e-mail, name, subscriber_type and subscriber_id metadata; an idempotency key per subscriber and parameters in a 10-minute window, so concurrent checkouts create one customer (WR-02, plan 18.1-08) |
| customers.retrieve | OPT-OUT | not in the frozen PHP contract: the stored customer id is trusted, as PHP did |
| customers.update (sync e-mail or name changes) | OPT-OUT | not in the frozen PHP contract |
| checkout.sessions.create (mode subscription) | INTEGRATE | success URL carries the session_id placeholder; subscription_data.metadata |
| checkout.sessions.create (mode subscription) | INTEGRATE | success URL carries the session_id placeholder; subscription_data.metadata; an idempotency key per subscriber, customer, price, URLs and metadata in a 10-minute window, so parallel requests get one session (WR-03, plan 18.1-08); the price is the plan's own in the currency, never another currency's (CR-02, plan 18.1-08) |
| checkout.sessions.retrieve (after the success redirect) | OPT-OUT | not in the frozen PHP contract: activation comes from the signed customer.subscription.created event |
| billing_portal.sessions.create | INTEGRATE | |
| billing_portal.configurations (create or update) | OPT-OUT | not in the frozen PHP contract: the portal is configured per account in the Stripe dashboard |