A proof-of-concept Android application demonstrating Stripe and Phantom wallet (Solana) payment integrations.
- Stripe Integration: Credit card payments using Stripe SDK with test mode
- Phantom Wallet Integration: Solana Devnet payments via Mobile Wallet Adapter
- Backend API: Node.js server handling payment processing
-
Android Development:
- Android Studio
- Android SDK (API 23+)
- Java/Kotlin development environment
-
Backend Setup:
- Node.js (v16 or higher)
- npm or yarn
-
Accounts & Keys:
- Stripe Test Account (for publishable and secret keys)
- Phantom Wallet installed on Android device/emulator
cd backend
npm install
cp .env.example .envEdit .env file:
STRIPE_SECRET_KEY=sk_test_your_actual_stripe_secret_key
SOLANA_PRIVATE_KEY=[your_private_key_array_or_leave_empty_for_auto_generation]
SOLANA_RPC_URL=https://api.devnet.solana.com
PORT=3000
Start the backend server:
npm run devThe server will run on http://localhost:3000
-
Open Android Studio
-
Open the
androidfolder as a project -
Edit
MainActivity.ktand update:STRIPE_PUBLISHABLE_KEYwith your actual Stripe publishable keyBASE_URLif your backend runs on a different address
-
Sync project with Gradle files
-
Build and run the app
- Use test card:
4242 4242 4242 4242 - Any future expiry date
- Any 3-digit CVC
- Install Phantom wallet on your device
- Switch to Devnet/Testnet in Phantom settings
- Connect wallet in the app
- Send test transactions (0.001 SOL)
demopay/
├── android/ # Android application
│ ├── app/
│ │ ├── src/main/
│ │ │ ├── java/com/demopay/
│ │ │ │ ├── MainActivity.kt
│ │ │ │ └── ApiService.kt
│ │ │ └── res/ # Resources (layouts, strings, etc.)
│ │ └── build.gradle
│ └── build.gradle
├── backend/ # Node.js server
│ ├── src/
│ │ └── server.js
│ ├── package.json
│ └── .env.example
└── README.md
GET /health- Health check and server infoPOST /stripe/create-intent- Create Stripe PaymentIntentPOST /solana/pay- Send Solana paymentPOST /solana/airdrop- Request SOL airdrop (Devnet only)GET /solana/balance/:publicKey- Get wallet balance
cd android
./gradlew assembleDebugAPK location: android/app/build/outputs/apk/debug/app-debug.apk
cd android
./gradlew assembleReleaseAPK location: android/app/build/outputs/apk/release/app-release.apk
-
"No wallet found":
- Install Phantom wallet
- Ensure it's updated to latest version
-
Network connection failed:
- Check backend server is running
- Update
BASE_URLin MainActivity.kt - For emulator, use
http://10.0.2.2:3000 - For physical device, use your computer's LAN IP
-
Stripe payment fails:
- Verify Stripe keys are correct
- Check backend logs for Stripe API errors
-
Solana transaction fails:
- Ensure wallet is on Devnet
- Check server has sufficient SOL balance
- Verify RPC endpoint is accessible
- Use Android Logcat for debugging:
adb logcat | grep DemoPay - Monitor backend logs for API request details
- Test on both emulator and physical device
- Verify network connectivity between app and backend
- Uses Stripe test mode
- Uses Solana Devnet (test network)
- Not production-ready
- Private keys are for development only
- Move to Stripe Live mode and Solana Mainnet
- Add transaction signing for arbitrary messages
- Implement proper error handling and retry logic
- Add support for multiple wallet providers
- Improve UI/UX design