How FlipPay/WorkshopPay Works
Source: flippay_controller.rb
- Bank account names are silently truncated to 100 characters during activation — if the name is longer, no error is shown but the name stored at FlipPay will be shortened
- Activation requires a notification email address; the API path differs depending on whether the workshop is a new or existing FlipPay customer
- Live mode is only active when the environment is production AND the user is not a superuser AND the company is not a demo account; all other combinations use test mode
- Deactivation performs a complete wipe of ALL FlipPay-related fields on the company record — this is irreversible without database restoration
- Requesting payment from a customer requires a public invoice link and the invoice must be fully unpaid; partial payments are not supported
- If the FlipPay API returns only one bank account during setup, it is automatically saved without requiring user selection
- The activation webhook handles two distinct flows: onboarding completion and account linking, using two different lookup strategies to find the matching company
- The payment webhook performs double validation, checking both the paymentRequestId and the token_id before processing
Support scenarios
- "We deactivated FlipPay/WorkshopPay and now all our settings are gone" → Deactivation performs a complete wipe of all FlipPay fields. This cannot be undone through the UI — the fields need to be restored from a database backup or the workshop needs to re-activate from scratch.
- "Our bank account name looks wrong in FlipPay" → Bank account names are silently truncated to 100 characters. If the business has a long legal name, check whether it was cut off during activation.
- "Customer can't pay a partially-paid invoice via WorkshopPay" → FlipPay only supports fully unpaid invoices. If partial payment has been applied, the customer cannot use WorkshopPay for the remainder — they need to use another payment method.
- "FlipPay activation isn't working in our test environment" → Live mode requires production environment + non-superuser + non-demo. Check all three conditions to determine which is blocking live activation.