forked from Significant-Gravitas/AutoGPT
This PR adds Stripe integration and payment processing for topping-up user accounts with credits. ### Changes 🏗️ Includes: - https://github.com/Significant-Gravitas/AutoGPT/pull/9176 #### Top-up flow 1. To top-up a user visits their settings and clicks `Credits` button (it's unavailable if `NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY` isn't present) 2. User inputs top-up amount (min 5$ in 1$ increments) and click the button to confirm. 3. Backend receives top-up request, creates database entry and requests stripe to provide url for this specific checkout. 4. User gets redirected to externally hosted Stripe checkout page, after payment (or cancelling) they get redirected back to Credits page. 5. In the meantime Stripe processes payment and sends webhook confirmation to the backend, backend updates database to activate bought credits. 6. Credits page shows success (or failure) information (by using url param `topup=success|cancel`). Credit counter won't update without refreshing the page unless payment was confirmed before user was back on Credits page which is the case when testing checkout locally. <img width="804" alt="Screenshot 2025-01-01 at 2 55 35 PM" src="https://github.com/user-attachments/assets/22fb518d-b30b-4154-bb4b-edea1d57b6c2" /> #### Backend - Add `stripe` package - Add environment variables: - `STRIPE_API_KEY` - `STRIPE_WEBHOOK_SECRET` - Add routes: - `POST /credits`: top-up request, returns Stripe checkout url. - `POST /credits/stripe_webhook`: Stripe webhook endpoint to notify of successful payment. - `PATCH /credits`: prompts beckend to check payment status. It's an additional failsafe in case webhook fails. - Update `credit.py` and related files to handle top-up request and payment confirmation #### Frontend - Add `stripe-js` package - Add `NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY` environment variable - Modify user settings sidebar to show `Credits` if `NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY` is available - Add `store/credits` page where user can top-up their account, it shows confirmation (or failure) after completing checkout. - Add `useCredits` hook that returns user credits and allows to request top-up. ### Checklist 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [ ] I have made a test plan - [ ] I have tested my changes according to the test plan: <!-- Put your test plan here: --> - [ ] ... <details> <summary>Example test plan</summary> - [ ] Create from scratch and execute an agent with at least 3 blocks - [ ] Import an agent from file upload, and confirm it executes correctly - [ ] Upload agent to marketplace - [ ] Import an agent from marketplace and confirm it executes correctly - [ ] Edit an agent from monitor, and confirm it executes correctly </details> #### For configuration changes: - [x] `.env.example` is updated or already compatible with my changes - [ ] `docker-compose.yml` is updated or already compatible with my changes - [ ] I have included a list of my configuration changes in the PR description (under **Changes**) <details> <summary>Examples of configuration changes</summary> - Changing ports - Adding new services that need to communicate with each other - Secrets or environment variable changes - New or infrastructure changes such as databases </details> --------- Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co> |
||
---|---|---|
.. | ||
migration.sql |