function PayWithCardWithCreateWalletExample() {
const [emailAddress, setEmailAddress] = useState<string>();
const [walletAddress, setWalletAddress] = useState<string>();
const [paperCheckoutId, setPaperCheckoutId] = useState<string>();
const [message, setMessage] = useState<string>();
const [showPayWithCard, setShowPayWithCard] = useState<boolean>();
// Fetch the Paper checkout ID from your backend
const checkoutFetch = await fetch('/api/paper/checkout', {
'Content-Type': 'application/json',
// Potentially some params you want to pass to tell
// your backend which Paper checkout you want to get.
const { checkoutId } = await checkoutFetch.json();
setPaperCheckoutId(checkoutId);
const onPayWithCardTransferSuccess = (result: TransferSuccessResult) => {
setMessage(`Transaction succeeded!`);
const onPayWithCardError = (error: PaperSDKError) => {
setMessage(`Something went wrong! ${error}`);
const onCreateWalletSuccess = (paperUser: PaperUser) => {
setWalletAddress(paperUser.walletAddress);
setEmailAddress(paperUser.emailAddress);
setShowPayWithCard(true);
const onCreateWalletError = (error: PaperSDKError) => {
setMessage(`Your email could not be verified.`);
<PaperSDKProvider chainName='Polygon'>
placeholder='Email address'
onChange={(e: React.ChangeEvent<HTMLInputElement>) => {
setEmailAddress(e.target.value);
emailAddress={emailAddress}
onSuccess={onCreateWalletSuccess}
onError={onCreateWalletError}
checkoutId={paperCheckoutId}
recipientWalletAddress={walletAddress}
emailAddress={emailAddress}
onTransferSuccess={onPayWithCardTransferSuccess}
onError={onPayWithCardError}