Payment Widget
Stripe ConnectedSecure payment processing with Stripe integration, dynamic tipping, customizable fees, and Venmo support.
Secure Payments
PCI-compliant Stripe-powered processing
Dynamic Tipping
Optional tip selection with custom percentages
Multiple Methods
Cards, Apple Pay, Google Pay support
Venmo Support
Accept payments via Venmo for convenience
Looking for a simpler integration?
Check out our Standalone Payment Widget - perfect for creating invoice payment pages, donation forms, or simple payment links with minimal code.
View Standalone DocumentationEmbed Code
Standalone Payment Widget
<!-- Payment Widget (standalone) -->
<div id="qt-portal-payment"
data-widget="payment"
data-tenant="YOUR_TENANT_ID"
data-container="qt-portal-payment"
data-display-mode="button">
</div>
<!-- Load widgets -->
<script type="module"
src="https://cdn.widgetfied.com/portal.js">
</script>Replace YOUR_TENANT_ID with your actual tenant ID from the dashboard
With Customer Portal Integration
<!-- Payment Widget with Customer Portal integration -->
<div id="qt-portal-payment"
data-widget="payment"
data-tenant="YOUR_TENANT_ID"
data-container="qt-portal-payment"
data-global-name="qtPortalPayment">
</div>
<script type="module" src="https://cdn.widgetfied.com/portal.js"></script>
<script>
// Listen for payment results on the global event bus
window.addEventListener('DOMContentLoaded', () => {
qtPortalPayment.on('payment:complete', (data) => {
if (data.success) {
// data: { success, type, reference, amount, sessionId }
console.log('Payment complete:', data);
// Run your post-payment logic here (redirect, update UI, etc.)
}
});
qtPortalPayment.on('payment:closed', () => {
// Modal closed — fires on both success and cancel.
// Gate any "cancelled" handling on whether payment:complete fired first.
});
});
</script>Reconciliation is event-bus based, not redirect-based. Use data-global-name when integrating with the Customer Portal widget, then subscribe to payment:complete and payment:closed on the global (default name: qtPortalPayment).
How It Works
Customer Enters Amount
Customer enters the payment amount or selects from predefined amounts.
Optional Tip Selection
Customer can add a tip using percentage buttons or custom amount.
Secure Payment
Payment is processed securely through Stripe with their preferred method.
Confirmation
Both you and the customer receive confirmation emails with receipt details.
Two Trigger Contracts
How you trigger payment depends on the displayMode you render. Mixing them up is the most common integration mistake.
Inline / Button (data-* sync)
Widget renders its own Pay button. Drive it by writing data-amount, data-reference, data-service, data-customer-* on the placeholder div. The widget reads them live at click time — no re-init needed.
Modal (payment:open emit)
Your UI triggers checkout programmatically. Call qtPortalPayment.emit("payment:open", { reference, amount, type, ... }) — the widget opens Stripe Checkout immediately. Use this when you don't want a rendered button.
Both: listen for payment:complete
Subscribe to qtPortalPayment.on("payment:complete", cb) regardless of trigger. Match data.reference back to your pending purchase and credit the customer in your DB.
Stripe Connect Setup
The payment widget requires Stripe Connect to process payments:
- 1Go to Settings in your dashboard
- 2Click "Connect Stripe Account" in the Payments section
- 3Sign in with your Stripe account or create a new one
- 4Complete the Stripe onboarding process
- 5Once connected, payments will be deposited to your Stripe account
Stripe takes 2.9% + $0.30 per transaction. Funds are deposited daily.
Supported Payment Methods
Credit/Debit Cards
Visa, Mastercard, American Express, Discover
Apple Pay
One-tap payment on Apple devices
Google Pay
Quick payment on Android and Chrome
Link
Stripe one-click checkout
Venmo
Alternative payment via Venmo link
Configuration
Configure your payment widget in the dashboard:
Stripe Connect
RequiredSettings - PaymentsConnect your Stripe account to receive payments
Tip Percentages
Settings - PaymentsSet custom tip percentage options (e.g., 15%, 20%, 25%)
Processing Fee
Settings - PaymentsOptionally pass processing fees to customers
Venmo Link
Settings - PaymentsAdd your Venmo username for alternative payments
Minimum Amount
Settings - PaymentsSet a minimum payment amount if needed
Discount Code
White-Label → Payment → GeneralEnable a discount code for customers to enter at checkout. Set the code string and a percentage discount (5–50%). Each email can only use the code once — usage is tracked in your Google Sheet.
Fee Structure
Understanding payment processing fees:
Stripe Fee
Per transaction, deducted by Stripe
Platform Fee
No additional platform fees
Pass to Customer
You can pass processing fees to customers
Requirements
- Active Widgetfied subscription
- Stripe Connect account configured
- Valid business information for Stripe
- SSL certificate on your website (https://)
Troubleshooting
Payment failing
- • Verify Stripe Connect is properly configured
- • Check that your Stripe account is in good standing
- • Ensure the customer card is valid
- • Check for sufficient funds
Stripe Connect not connecting
- • Complete all required Stripe onboarding steps
- • Verify your business information is accurate
- • Contact Stripe support if issues persist
Tips not showing
- • Enable tips in payment settings
- • Set tip percentage options
- • Verify the widget is using latest configuration
Venmo link not working
- • Verify your Venmo username is correct
- • Ensure Venmo is enabled in settings
- • Test the link manually