CheckoutJoy needs to be notified by Stripe of any payment events that occur when a customer pays using Stripe.
These are events such as successful payment authorizations, completed orders, cancelled subscriptions etc. CheckoutJoy
needs this information to record revenue and to manage your customer's access to Kajabi offers.
To do this you need to add the CheckoutJoy webhook API address to your Stripe Webhook configuration.
Stripe supports a whole bunch of payment methods that you can enable to offer your customers a wider range of payment
methods. This
gives you the option to add Google Pay or Apple Pay for example, or Klarna and SEPA bank transfers as payment options.
These additional payment options can be activated in your Stripe account.
Stripe users can accept Apple Pay in iOS applications in iOS 9 and above, and on the web in Safari starting with iOS 10
or macOS Sierra.
There are no additional fees to process Apple Pay payments, and the pricing is the same as other card transactions.
There are a few steps that need to be completed to enable the payment option on your CheckoutJoy checkouts:
Enable Apple Pay in your Stripe Payment Method settings
Add your custom domain to Stripe's Apple Pay settings
Understanding when the Apple Pay option is available
Navigate to the (Apple Pay Settings in your Stripe
Dashboard)[https://dashboard.stripe.com/settings/payments/apple_pay] and make sure
that the domain that your checkout pages are hosted on is added to the list of allowed domains. This must be the same
domain
as the Custom Domain that you've added to CheckoutJoy.
You can safely ignore steps 2 and 3 of the popup - Host the verification file - as CheckoutJoy already hosts the file
on your
custom domain.
There are a few things that determine if the Apple Pay payment option is displayed to the customer. This is checked
by Stripe when displaying the Stripe payment options on the checkout page.
The customer's device - The option is only available when the customer is using the Safari browser on a Mac with
Touch ID, an iPhone or an Apple Watch
Their Apple ID - the device must be logged into an active Apple ID with a valid debit/credit card enabled
The currency of the product
Device
Requirement
Desktop
Safari browser running on a Mac (macOS 11 or newer), and supports Touch ID
You might see an increase in Incomplete or Abandoned payments in your Stripe dashboard after enabling multiple payment
methods
for Stripe on your checkout pages.
This is because CheckoutJoy needs to create a Payment in Stripe (called a Payment Intent) so that Stripe can load
the payment widget (called Stripe Elements) can load the correct payment options for your customer.
They need the Payment Intent to determine which of the enabled payment methods in your Stripe account should be
displayed to the customer, based on where the customer is from and the currency of the payment.
For example, if you've enabled SEPA Direct Debits as a payment method, it will automatically only display to
customers in the EU.
Your customer from India will not have that Payment option. Stripe also checks the device type, so Google Pay and Apple
Pay is only
available on compatible devices. Klarna for example is only available for checkouts in EUR.
The upside of this approach is that all the payment options are shown to the customer, you can have up to 20 different
payment
options including card, wallets, BNPL, bank transfers which would certainly help to make the sale.
The downside is that it will create confusion in your Stripe dashboard, as cancelled payments are not will not reflect
abandoned carts
necessarily. If someone just views the checkout page with no intent to purchase there will still be a Payment registered
in Stripe because the payment methods are shown to the customer.
By default, a customer has 30 minutes to complete a payment once the checkout page has loaded. After that,
CheckoutJoy automatically changes the status of the payment to "abandoned" and cancels the Payment Intent in your
Stripe account.
If you don't like the way the new Stripe Elements handles payments in your Stripe account, then we recommend
that you disable this feature by delaying the payment initiation or use the Card
Only option for Stripe in your checkout sections. Card only payments will
only create a payment in your Stripe account once the customer has submitted their card details.
Stripe controls which countries and entity types can open a Stripe account; CheckoutJoy will connect any active Stripe account, but you must be able to onboard with Stripe directly first.
South African (Pty Ltd) entities are not eligible for Stripe. If you've moved your business to South Africa or registered there as a Pty, your existing Stripe account will eventually be closed and a new one cannot be opened. Use PayFast or Paystack for ZAR, PayPal for international currencies, or Paddle as a Merchant of Record.
A single Stripe account can handle multiple currencies. If you sell in EUR, GBP, USD and CHF, you don't need four Stripe accounts — enable all the currencies you want on the same Stripe account and Stripe will convert payouts into your default settlement currency.
The most common cause is an invalid or expired Stripe Secret Key. Look in your CheckoutJoy logs (or contact support) — the underlying error reads Invalid API Key provided: <key-prefix>***. To fix:
Log into Stripe and go to Developers → API keys.
Re-copy the Live Secret Key.
Paste it into Settings → Payment Methods → Stripe in your CheckoutJoy dashboard.
If the key was created as a restricted key, make sure it has the permissions needed for Payment Intents, Customers, Subscriptions and Webhooks. Standard keys (the default) include all of these.
South African card-issuing banks periodically tighten 3DS and risk rules for international processors. Stripe (and Paystack) can show elevated decline rates for SA buyers as a result. The most reliable workaround is to also offer a local-acquiring processor (PayFast or Paystack) on the same checkout so SA customers have a path that clears reliably.
No. CheckoutJoy stays in PCI SAQ-A scope — card details are entered directly into Stripe's hosted fields (Stripe Elements) and never reach CheckoutJoy's servers. There is no server-to-server (S2S) card flow; card data goes from the buyer's browser directly to Stripe.
When Klarna is enabled in your Stripe account, Stripe itself decides whether to display it at a given checkout based on the buyer's country and currency. CheckoutJoy doesn't toggle Klarna per-session. Klarna's country/currency eligibility list is published by Stripe; variability across buyers is expected.
The mandate/consent paragraph that appears when a buyer selects iDEAL (mentioning Stripe as the local service provider, saving payment details, refund language) is injected by Stripe's Payment Element, not by CheckoutJoy. To change or remove it, adjust the iDEAL payment-method settings inside your Stripe account — there's nothing CheckoutJoy can override.
If you want to Payment Intent when the page loads, you can do this by disabling the
Show available payment methods on page load setting in the page's Checkout Settings. Disabling this setting
will require the customer to click the Proceed to Payment button to initiate the payment. Your Stripe payment
widget will only display after the customer clicks this button.
To enable this checkout flow, do the following steps:
Go to Pages in your CheckoutJoy dashboard
Create a page or Edit the page where you want to change this setting
Go to Settings > Checkout Settings using the left-hand navigation of the Page Builder
Scroll to Payment Methods and uncheck the checkbox to display available payment methods when the page
loads.
Save and Publish your page.
The checkout flow now has a different flow which requires the customer to click the Proceed to Payment button to
initiate the payment widget. The result of this is that there will only be a payment created in Stripe for customers
that have the intent to
purchase the product, but they will not see all the available payment methods when the page loads.