[ADMIN] What Stripe webhook events are handled?

Six events, all in sj-crm-stripe/sj-crm-stripe.phphandle_webhook():

  • checkout.session.completed — provisions tenant site
  • invoice.paid — extends subscription period
  • invoice.payment_failed — sends dunning email, flags account
  • customer.subscription.updated — syncs plan changes
  • customer.subscription.deleted — deactivates tenant (does not delete data)
  • checkout.session.expired — cleans up unfinished signups

Webhook signing secret is in wp_options → sj_crm_stripe_webhook_secret.

[ADMIN] Refunds — policy and process

Policy: 30-day money-back guarantee. After 30 days, refunds are case-by-case and discouraged unless we caused the problem (downtime, data loss, missing feature we promised).

Process:

  1. Verify the request is within 30 days of first payment (Stripe customer page).
  2. Confirm by email that the customer wants to cancel + refund.
  3. Stripe Dashboard → Payments → find charge → Refund.
  4. Cancel the subscription in Stripe.
  5. Reply to customer with confirmation.
  6. Mark the tenant subsite for deletion after 30 days.
  7. Log in SJ Journal.