<MoonPayApplePayButton> renders an Apple Pay button inline in your layout.
It is the declarative alternative to
client.setupApplePay().
Apple Pay availability inside a WebView depends on iOS WebKit support. The
component emits
"unsupported" when Apple Pay isn’t available — surface a
fallback payment method.ApplePaySection.tsx
Props
| Prop | Type | Required | Default | Description |
|---|---|---|---|---|
quote | string | ✅ | — | Quote signature from getQuote(). Reactive — updating this prop pushes the new signature into the frame without a remount. |
onEvent | (event: ApplePayEvent) => void | — | Callback for Apple Pay lifecycle events. See ApplePayEvent. | |
style | ViewStyle | height: 48 | Container style. |
ApplePayEvent
Use event.kind to handle each event.
| kind | Payload | When you receive it |
|---|---|---|
"ready" | — | The Apple Pay UI is rendered and ready. |
"complete" | { transaction: FrameTransaction } | The payment finished. Inspect FrameTransaction for the outcome. |
"challenge" | { kind: "frame"; url: string } | Verification required. Render <MoonPayChallenge> with the provided URL. |
"quoteExpired" | { setQuote: (signature: string) => void } | The quote expired. Fetch a new quote and update the quote prop, or call payload.setQuote(...) directly. |
"error" | { kind: string; message: string } | The flow encountered an error. See error kinds below. |
"unsupported" | — | Apple Pay isn’t available in the user’s environment. |
"error" kinds: "configurationError" | "invalidQuote" |
"quoteExpired" | "oneTapApplePaySecondFactorRequired" | "genericError"
"oneTapApplePaySecondFactorRequired" occurs during the 1TAP Apple Pay flow
when MoonPay needs a second authentication factor. Hand off to
client.connect() or render
<MoonPayConnect>,
then retry.