Appearance
Payments
FoxCLM supports two payment paths: online payment via Stripe, and manual recording for cash, bank transfer, and check.
Online payments (Stripe)
Supported methods
| Method | Currencies |
|---|---|
| Alipay | AUD, CAD, EUR, GBP, HKD, JPY, MYR, NZD, SGD, USD |
| WeChat Pay | CNY only (requires Stripe enabled for CNY) |
Direct card payment is not currently enabled; Alipay and WeChat Pay cover the primary use cases.
Setup
- Go to Settings -> Integrations -> Stripe.
- Enter your Stripe publishable key and secret key (from your Stripe dashboard).
- Configure the webhook endpoint URL in your Stripe dashboard:
https://your-instance.com/api/v1/stripe/webhook - Copy the signing secret from Stripe and paste it into FoxCLM.
Test the integration by switching to test keys and running a test payment.
Enabling payment on an invoice
Each invoice has a Show Payment Link toggle. When on, the public share view displays a "Pay Now" button.
Client experience
- Client opens the public invoice link.
- Clicks Pay Now.
- Picks a method (Alipay or WeChat Pay, based on currency).
- Redirected to Stripe for authentication.
- Returns to the invoice page; FoxCLM polls until the Stripe webhook confirms payment.
- Invoice auto-advances to
Paidand apayment_recordsentry is created.
Payment records
Each payment attempt is logged:
- Stripe Payment Intent ID
- Amount and currency
- Method (Alipay / WeChat Pay / manual)
- Status (pending / succeeded / failed)
- Timestamp
View a client's payment history by opening the invoice and scrolling to the Payments section.
Manual payments
For cash, bank transfer, check, or any out-of-band payment:
- Open the invoice.
- Click Record Payment.
- Enter:
- Amount
- Date
- Method (Cash / Bank Transfer / Check / Other)
- Notes (reference number, check number, etc.)
- Save.
The payment is recorded. If the amount covers the full invoice total, the invoice is marked Paid and any send_paid_confirmation action fires.
Partial payments
FoxCLM currently records partial payments but does not automatically track remaining balance or keep the invoice in a Partially Paid status. If you accept partial payments:
- Record the partial amount via Record Payment.
- Leave the invoice in
Sentstatus manually. - Record the next payment when it arrives.
- Mark
Paidmanually (or set up a custom workflow condition based on the sum of payments).
Refunds
Refunds are not automated. To refund a payment:
- Issue the refund through your Stripe dashboard (for online payments) or manually (for cash).
- In FoxCLM, change the invoice status to
CancelledorRefunded(if you've configured that status). - Add a note in the invoice explaining the refund.
Reconciliation
The Invoices page shows each invoice's status at a glance. To reconcile:
- Filter by status
Paidto see everything collected - Filter by status
Overdueto see what's outstanding - Export the list for accounting
Troubleshooting
Webhook not firing: check your Stripe dashboard for webhook delivery logs. If requests are failing, verify the endpoint URL and signing secret in FoxCLM match.
Invoice stuck in "Pending Payment": the client may have abandoned checkout. After a few minutes, Stripe marks the Payment Intent as expired. You can manually revert the invoice to Sent.
Wrong currency shown: currency is set on the invoice header and cannot be changed after line items exist. Clone the invoice with the correct currency and void the old one.
Next steps
- Invoice Workflow - make
Paidfire actions automatically - Workflow Actions - send confirmations on payment
