Pricing screen in a single-page app
A React app lists three plans with a button each. Every button opens its own offer, and customers outside card-first habits pick PayPal.

Checkout embed
A React button or hook opens the Plandalf checkout, and PayPal is a payment option on that offer.
No credit card required. No coding required.
PayPal
ReactPlandalf does not ship PayPal components for React. Your app opens a Plandalf checkout from an attribute-driven button or the React hooks, and PayPal is enabled for the offer in Plandalf. Starting with attributes is the recommended first install; the hooks are for shared SDK state.
| Event | From and to | Through | What happens |
|---|---|---|---|
| Checkout opened | React → Plandalf | A button with data-plandalf-present works even when React renders it after page load. data-plandalf-mount shows an inline checkout. | |
| Pay with PayPal | Plandalf → PayPal | Payment connection | The option shows on offers where you added PayPal. Approval happens at PayPal, then the buyer returns to the checkout. |
| Checkout state in the UI | Plandalf → React | FlowHandle events let a component react to checkout changes. They update the screen only; they do not prove entitlement. | |
| Durable access | Plandalf → Your server | Webhook | A Send Webhook step posts the paid invoice to your API. Grant access there after checking the invoice, and test a delayed or duplicate delivery. |
| Refund | PayPal → Your server | By hand | Plandalf documents Invoice Refunded for Stripe refunds. After a PayPal refund, take access away yourself. |
You need a published offer with PayPal added, the organization's public SDK URL, and a React app where you control the HTML shell.
Connect the PayPal Business account in Plandalf and add PayPal to the offer. Check the offer opens correctly in test mode before touching React.
Add the organization script to your HTML document, or let PlandalfProvider manage the SDK instance. The package notes say the hosted script is the current recommended path.
Return a button with data-plandalf-present and the offer slug. If the button mounts late, the SDK still discovers it.
For a signed-in buyer, call identify() with a token your server signed, or pass the user per call. Anonymous checkouts need neither.
Approve one sandbox payment, finish any optional steps, then reopen checkout from the same button. Do a separate attempt you abandon at PayPal and confirm no paid invoice appears.
Leave the route with checkout open, return, and test Strict Mode separately from your production build. Check there is one checkout frame.
A React app lists three plans with a button each. Every button opens its own offer, and customers outside card-first habits pick PayPal.
A gated feature in a React dashboard opens an upgrade offer. On completion the component refreshes, and a server check decides whether the feature really unlocks.
data-plandalf-present.Checked October 26, 2026 against Plandalf's own setup guides.