[ADMIN] How to rotate the Stripe webhook signing secret

  1. Stripe Dashboard → Developers → Webhooks → pick the endpoint.
  2. Click Roll secret. Stripe shows the new secret once — copy it now.
  3. WordPress Network Admin → SJ CRM Stripe → Settings → paste new secret → Save.
  4. From Stripe, click Send test webhook on any event — it should return 200.
  5. Verify in debug.log the signature passed.
  6. Old secret remains valid for 24 hours, but rotate the WP setting immediately to keep production aligned.

[ADMIN] How to issue a refund and clean up the account

  1. Confirm refund eligibility (within 30 days OR documented service issue).
  2. Stripe Dashboard → Customers → find customer → Payments → Refund.
  3. Choose full or partial. Add internal note: ticket #, reason.
  4. Cancel subscription: customer page → Subscriptions → Cancel immediately.
  5. Reply to customer with confirmation, refund timing (5–10 business days), and a polite goodbye.
  6. In wpp3_sj_crm_tenants, mark the tenant cancelled and set deletion date 30 days out.
  7. Add SJ Journal entry: customer name, amount, reason, ticket reference.

[ADMIN] How to test Stripe checkout end-to-end

  1. Switch sj-crm-stripe settings to Test mode.
  2. Use Stripe test API keys (pk_test, sk_test) and the test webhook signing secret.
  3. From the public signup page, pick a plan and use card 4242 4242 4242 4242 any future expiry, any CVC, any ZIP.
  4. Confirm webhook fires (Stripe Dashboard → test mode → Webhooks → recent deliveries).
  5. Confirm tenant subsite was created and you can log in to it.
  6. Run through one cancel and one card-decline scenario (card 4000 0000 0000 0002).
  7. Switch back to Live mode when done. Double-check the keys.

Never leave the production site in test mode — real payments will fail silently.