Follow these steps to integrate using our pre-built React component.

Step 1: Obtain Access Token

This is example code for obtaining an access token. You will need to adapt the endpoint URL and request format based on your specific backend implementation. Refer to the Obtaining Access Token page for a complete example of setting up a backend service.

Step 2: Download the Component

You can view the component code or download it directly:

Save this file to your project’s component directory, for example: /src/components/PhoenixPayment.tsx

The component includes all necessary styling internally via the <style> tag, so you don’t need to add any additional CSS.

Step 3: Implement the Component

Follow these steps to implement the component in your application:

Step 3.1: Import the Component

import { PhoenixPayment } from './components/PhoenixPayment';

Step 3.2: Prepare Required and Optional Parameters

Before adding the component, you need to collect the following information:

Required Parameters

  • walletAddress: The Ethereum wallet address where USDC will be sent
  • amount: The amount in USD to convert to USDC
  • accessToken: The access token retrieved from your backend
  • onClose: Function to handle when the user closes the payment modal
  • onComplete: Callback function to handle payment completion events

Optional Parameters

  • onDone: Callback function to handle when the payment process is complete
  • onOrderCreated: Optional callback function to handle when an order is created
  • theme: Optional UI theme, can be set to either ‘light’ or ‘dark’

You should create form inputs in your UI to collect the required information:

Step 3.3: Add the Component to Your JSX

Once you have collected these values, you can pass them to the PhoenixPayment component:

<PhoenixPayment 
  walletAddress={walletAddress}
  amount={amount}
  accessToken={accessToken}
  onClose={() => setShowPayment(false)}
  onComplete={handlePaymentComplete}
  onDone={handlePaymentDone}
  onOrderCreated={handleOrderCreated} // Optional: handle order creation to receive order details
  theme="dark" // Optional: specify 'light' or 'dark' theme
/>

Step 3.4: Handle Order Created Events

The onOrderCreated callback is triggered when a new order is created in the Phoenix system. This happens before the payment process begins. The callback receives an object containing:

  • order_id: Unique identifier for the order
  • data: Object containing additional order details:
    • created_at: Timestamp of order creation
    • buyer_address: The buyer’s wallet address
    • seller_address: The seller’s wallet address
    • send_amount: The amount to be sent
    • receive_amount: The amount to be received
    • uniqueness_amount: The amount of cents added to the order for uniqueness
    • receiving_chain_id: The chain ID where the payment will be received
    • zelle_address: The Zelle address for payment
const handleOrderCreated = ({ order_id, data }) => {
  console.log('Order created:', { order_id, data });
  // You can store the order details for reference
};

Step 3.5: Handle Payment Completion

The onComplete callback receives three parameters:

  1. success: Boolean indicating if the operation succeeded
  2. transactionId: Transaction hash (only for successful payments)
  3. data: Object containing additional information

Transaction Success Data

When a transaction is successful, the data object will contain:

  • amount: The USD amount
  • token: The token received (e.g., “USDC”)
  • chain: The blockchain (e.g., “Base”)
  • walletAddress: The receiving wallet address
  • sendAmount: The amount of tokens sent
  • transactionHash: The blockchain transaction hash
  • basescanLink: Link to view the transaction on Basescan
const handlePaymentComplete = (success, transactionId, data) => {
  if (success) {
    // For transaction success
    if (data?.transactionHash) {
      console.log('Transaction successful:', data);
      
      // You might want to redirect to a success page or show transaction details
      
      // Uncomment the following line if you want to close the window after transaction success
      // setShowPayment(false);
    }
  } else {
    console.log('Payment failed or cancelled');
    
    // Uncomment the following line if you want to close the window after payment failure/cancellation
    // setShowPayment(false);
  }
};

Step 3.6: Handle Done Events

const handlePaymentDone = () => {
  // Close the payment window
  setShowPayment(false);
};

Full Implementation Example