Quick start (unstyled)
Here's how a basic checkout form can be implemented using OpenPay Elements.
import { ElementsForm, CardElement, FieldName } from '@getopenpay/openpay-js-react';
import { useState } from 'react';
function CheckoutForm() {
const [error, setError] = useState<string | undefined>(undefined);
const [amount, setAmount] = useState<string | undefined>(undefined);
const onLoad = (totalAmountAtoms: number) => {
setAmount(`$${totalAmountAtoms / 100}`);
};
const onCheckoutError = (message: string) => {
setError(message);
};
const onCheckoutSuccess = (invoiceUrls: string[]) => {
// Invoice URLs are returned here
console.log('invoiceUrls', invoiceUrls);
};
return (
<ElementsForm
checkoutSecureToken={`checkout-secure-token-uuid`}
onChange={() => setError(undefined)}
onLoad={onLoad}
onValidationError={(message) => setError(message)}
onCheckoutSuccess={onCheckoutSuccess}
onCheckoutError={onCheckoutError}
>
{({ submit }) => (
<>
<div>
<input type="text" placeholder={'Given name'} data-opid={FieldName.FIRST_NAME} />
<input type="text" placeholder={'Family name'} data-opid={FieldName.LAST_NAME} />
<input type="email" placeholder={'Email'} data-opid={FieldName.EMAIL} />
<input type="text" placeholder={'Country'} data-opid={FieldName.COUNTRY} />
<input type="text" placeholder={'ZIP'} data-opid={FieldName.ZIP_CODE} />
</div>
<div>
<CardElement />
</div>
{error && <small>{error}</small>}
<button onClick={submit}>Pay {amount}</button>
</>
)}
</ElementsForm>
);
}