Creative Disputes: The 5 Most Common Reasons Clients Refuse to Pay
Late payments and unpaid invoices are among the biggest stressors for independent creators. This article explores the top reasons clients…
Screen header displays Ready to accept payments when you are. Primary CTA: Enable payments. Secondary action: Skip for now. Informational bullets explain: user controls when to accept payments, payments link directly to agreements, Happ charges a fee only on successful transactions, no fixed fees, supports cards, bank transfers and digital wallets, fully secure payments. At this point stripe_account_id is null and payment_activation_status = disabled.
If Skip for now is selected: payment_activation_status remains disabled. User proceeds to confirmation screen. Payment buttons in workspace remain inactive. If Enable payments is selected: system initiates Stripe Connect Express flow. A Connected Account is either created or retrieved.
Platform creates a Connected Account of type express. account_links API is used to generate onboarding URL. User is redirected to Stripe-hosted onboarding. Required data collected by Stripe may include: legal name, address, partial government ID, phone, date of birth, industry classification, bank account details for payouts.
After onboarding, the following Stripe capabilities must be verified as active: capabilities.card_payments = active, capabilities.transfers = active, charges_enabled = true, payouts_enabled = true. If any are inactive, the account cannot receive payments or payouts. System must validate these flags via Stripe API before enabling payment UI.
Happ uses Destination Charges, not Direct Charges. Checkout Sessions are created under the platform account without Stripe-Account header. payment_intent_data includes transfer_data[destination] = connected account ID and application_fee_amount representing platform fee. Customer pays platform, Stripe deducts processing fee, application fee is retained by platform, net amount is transferred to connected account.
Platform must register webhook endpoint at /wp-json/happ/v1/stripe/webhook. Required events: checkout.session.completed, checkout.session.expired, payment_intent.succeeded. Webhook signature must be validated using STRIPE_WEBHOOK_SECRET. livemode flag must be verified to prevent test data corruption.
Upon successful payment, system creates three internal ledger entries: Payment received (gross), Stripe processing fee, Happ platform fee. These are stored in payment_ledger repeater including amount_cents, currency, milestone_id, stripe_id and description. Ledger reflects net balance available for payout.
Before generating any Checkout Session, system validates that connected account has active charges_enabled, payouts_enabled and required capabilities. If not valid, Pay Now button must be disabled and user prompted to complete Stripe onboarding.
wp-config must contain STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET and HAPP_PLATFORM_FEE_PERCENT. Stripe Dashboard must have Connect enabled and webhook registered. Failure to configure correctly results in inability to create valid payment sessions.
If payments are skipped: stripe_account_id remains null, payment_activation_status = disabled. Workspace is fully operational for agreements and signatures but payment functionality remains locked until activation occurs.
If Checkout throws \\\'Unable to start payment\\\', likely causes include missing stripe_account_id, invalid nonce, incorrect transfer_data destination, missing STRIPE_SECRET_KEY, webhook returning non-200 response or AJAX failure before session creation. These must be validated systematically.
When Stripe Connect is active and capabilities verified: stripe_account_id stored, payment_activation_status = enabled, Pay Now buttons visible on milestones, funds flow correctly using Destination Charges, ledger reflects net balance and user can request payouts.
Yes. Stripe Connect onboarding can be triggered later from workspace settings.
Destination Charges allow the platform to collect application fees at transaction time and maintain consistent processing logic similar to Stripe’s own fee model.
Inactive Stripe capabilities, incomplete onboarding, missing configuration keys or failed webhook verification.
No. All sensitive identity and banking information is collected and stored securely by Stripe.
This guide documents in full technical depth the Payment Activation phase of the Happ onboarding system. It covers the Enable Payments screen, user branching logic, Stripe Connect Express onboarding, capability verification, webhook validation, fee model behavior and system state transitions.
This phase begins after identity setup and membership assignment are complete. It ends when Stripe Connect is either successfully activated or explicitly skipped.