Accept BTC, ETH, USDT, SOL & More — Straight to YOUR Wallet. No Middlemen. No KYC. No Fees Forever.
The only Botble-native crypto payment plugin that plugs into Ecommerce checkout AND E-Wallet top-ups out of the box. One-click install, zero-CLI upgrades, stunning QR checkout, live coin rates, automatic on-chain confirmation, beautiful coin icons, built-in cron, encrypted RPCs, and support for 7+ coins across 5 blockchains. Replace Stripe, PayPal and Boxcoin — keep 100% of every sale.
CryptoPay Vault turns any Botble, Shofy, Martfury or Nest store into a self-hosted crypto payment powerhouse. Accept BTC, ETH, USDT (ERC-20/BEP-20/TRC-20), POL, SOL directly into YOUR wallets with one-click checkout, QR codes, live rates, auto-confirmation, and full E-Wallet top-up support. No KYC. No middlemen. No monthly fees. Install in 60 seconds, earn forever.
# 🪙 CRYPTOBYCODEUPP — Self-Hosted Crypto Payment Gateway for Botble
> A **complete, independent crypto payment gateway** for Botble / Martfury / Shofy / Nest stores. Accept **BTC, ETH, USDT (ERC-20 / BEP-20 / TRC-20), POL, SOL** directly into your wallets — no third-party processor, no merchant account, no KYC. Just paste an RPC URL per coin and receive payments.
**Plugin ID:**`maryam/cryptobycodeupp`
**Namespace:**`Maryam\CryptoByCodeupp\`
**Install path:**`platform/plugins/cryptobycodeupp/`
**Brand:** Maryam International LLC · [codeupp.xyz](https://codeupp.xyz)
---
## ✨ What This Plugin Does
This is a **drop-in replacement for Boxcoin** — but built natively for Botble, with no external dependency on a separate PHP app. Everything (admin panel, settings, checkout UI, transaction tracking, payment confirmation) lives inside one Botble plugin.
- ✅ Self-custodial — funds go straight to **your** wallet addresses
- ✅ Multi-coin: BTC, ETH, USDT-ERC20, USDT-BEP20, USDT-TRC20, POL, SOL
- ✅ **Per-coin RPC URL** — paste any free RPC (Tatum, Alchemy, Ankr, Infura, QuickNode, public nodes)
- ✅ **Pay-as-you-grow** — use multiple free accounts to scale (Tatum on BTC, Alchemy on ETH, Ankr on SOL, etc.)
- ✅ Coins **only show at checkout** if the admin has configured an RPC URL + receiving wallet for that coin
- ✅ Beautiful checkout page with:
- Coin selector
- Live USD → crypto conversion (CoinGecko, free)
- QR code (address + amount preloaded for mobile wallets)
- 30-min countdown timer
- "Waiting for payment" → "Confirmed" status states
- Email field for receipt
- ✅ Automatic confirmation via **cron** — polls each chain's RPC every minute
- ✅ Configurable **min confirmations** per coin (1 for stablecoins, 2 for ETH, 3 for BTC etc.)
- ✅ Email notification to admin **and customer** on confirmation (uses Botble's built-in SMTP)
- ✅ Idempotent — webhook + cron + manual mark-paid all converge safely
- ✅ Independent of Boxcoin — no shared code, no PHP file conflicts
- ✅ **Universal Botble payment provider** — works out of the box with **Botble E-Wallet top-ups**, subscription renewals, gift-card purchases, and any third-party plugin that respects Botble's standard `return_url` payment flow. Customers top up their in-store wallet with crypto and the balance is credited automatically the moment the on-chain payment confirms — identical UX to Stripe top-ups.
- ✅ **Zero-CLI upgrades** — merchants don't need SSH or `php artisan migrate`. Database schema self-heals on plugin activation and on the first HTTP request after a version bump.
---
## 💸 E-Wallet Top-Up Support (new)
The plugin auto-detects Botble **E-Wallet** top-up flows (`customer.e-wallet.topup.callback`) and:
1. Accepts crypto payment on the standard crypto checkout page
2. Inserts a `Botble\Payment\Models\Payment` row keyed by the on-chain tx hash so the e-wallet's success handler recognises the payment
3.**Auto-credits** the customer's wallet balance via `TopUpService::completeTopUp()` the moment enough confirmations are reached — no manual admin step, no webhook wiring
4. Redirects the customer back to the e-wallet success page with `?charge_id=` appended, exactly the way Stripe does it
Works identically for **any** Botble plugin that sends a standard `return_url` / `callback_url` in its payment data (subscription renewals, gift-card purchases, marketplace vendor wallet top-ups, custom SaaS checkouts, etc.). No integration code required on the other plugin's side.
---
## 🎯 Why Multi-RPC Per Coin Matters
Free RPC tiers all have rate limits. By letting the admin paste a **different RPC URL per coin**, you can mix providers:
| Coin | Recommended free RPC | Free quota / month |
|---|---|---|
| BTC | Tatum (`https://api.tatum.io/v3/bitcoin/...`) or BlockCypher | 1M / 200k |
| ETH | Alchemy (`https://eth-mainnet.g.alchemy.com/v2/KEY`) | 300M compute units |
| USDT-ERC20 | Same Alchemy ETH key | (shared with ETH) |
| USDT-BEP20 | Ankr (`https://rpc.ankr.com/bsc/KEY`) or QuickNode | 30M req |
| POL | Alchemy (`https://polygon-mainnet.g.alchemy.com/v2/KEY`) | 300M CU |
| USDT-TRC20 | TronGrid (`https://api.trongrid.io`) | 100k req/day |
| SOL | Ankr / Helius / public Solana RPC | 30M req |
Sign up with **a different email per provider** to multiply your free quota. This is the entire point of letting admin paste RPC URLs per coin.
---
## 🛠 Architecture
```
┌──────────────────────┐
│ Customer checkout │ ← Botble checkout page selects "Pay with crypto"
└──────────┬───────────┘
│
▼
┌──────────────────────┐ creates Order (status=pending)
│ CryptoPaymentService │ + CryptoTransaction row (status=P)
│ (Botble gateway) │ redirects to /payment/crypto/checkout/{token}
└──────────┬───────────┘
│
▼
┌──────────────────────┐ Customer picks coin
│ checkout.blade │ → reads coin's wallet address + USD-to-crypto rate
│ (QR + timer + poll) │ shows QR code, polls /status every 5s
└──────────┬───────────┘
│
▼
┌──────────────────────┐ Cron (every minute) calls each coin's driver:
│ TransactionMatcher │ EvmDriver (eth_getLogs / eth_getBalance)
│ + Drivers per chain │ TronDriver (TronGrid REST)
└──────────┬───────────┘ SolanaDriver (getSignaturesForAddress)
│ BitcoinDriver (Tatum/Blockstream/Mempool.space)
▼
┌──────────────────────┐
│ Match found → │ marks Order COMPLETED via Botble's
│ do_action( │ PAYMENT_ACTION_PAYMENT_PROCESSED hook
│ PAYMENT_PROCESSED)│ sends "payment confirmed" email
└──────────────────────┘
```
---
## 📦 File Structure
```
platform/plugins/cryptobycodeupp/
├── plugin.json
├── composer.json
├── README.md
├── helpers/
│ └── constants.php
├── routes/
│ └── web.php
├── database/migrations/
│ └── 2026_04_29_000000_create_cryptobycodeupp_transactions_table.php
├── public/images/
│ └── crypto.png (logo placeholder)
├── resources/
│ ├── lang/en/cryptobycodeupp.php
│ └── views/
│ ├── methods.blade.php # Botble checkout payment-row
│ ├── checkout.blade.php # ★ Standalone QR / timer page
│ ├── instructions.blade.php # Admin settings sidebar
│ ├── email-confirmed.blade.php # SMTP email template
│ └── _coin_card.blade.php # one card on checkout
└── src/
├── Plugin.php
├── Console/Commands/
│ └── MatchTransactionsCommand.php # php artisan crypto:match
├── Forms/
│ └── CryptoPaymentMethodForm.php
├── Models/
│ └── CryptoTransaction.php
├── Http/
│ ├── Controllers/
│ │ └── CryptoController.php # checkout + status + return + cron-trigger
│ └── Requests/
│ └── CryptoPaymentCallbackRequest.php
├── Providers/
│ ├── CryptoByCodeuppServiceProvider.php
│ └── HookServiceProvider.php
└── Services/
├── CoinRegistry.php # one source of truth for all 7 coins
├── PriceService.php # CoinGecko USD→crypto
├── TransactionMatcher.php # cron core
├── Gateways/
│ └── CryptoPaymentService.php # extends PaymentAbstract
└── Drivers/
├── DriverInterface.php
├── EvmRpcDriver.php # ETH, USDT-ERC20, USDT-BEP20, POL
├── TronDriver.php # USDT-TRC20
├── SolanaDriver.php # SOL
└── BitcoinDriver.php # BTC
```
---
## ⚙️ Admin Configuration
Go to **Admin → Payment Methods → Crypto by Codeupp**. For each coin:
| Field | Example |
|---|---|
| **Enabled** | toggle on/off |
| **Wallet address** | `0x7ed49411212865dB6C99C003ab19CE9C7b5f904d` |
| **RPC URL** | `https://eth-mainnet.g.alchemy.com/v2/your-key` |
| **Min confirmations** | `2` |
A coin **only shows at checkout** if both `Wallet address` and `RPC URL` are filled. This is exactly the behaviour you asked for.
Global settings:
- Default fiat currency (auto-pulled from Botble store currency)
- Order timeout (default 30 minutes)
- Admin notification email
- Enable customer email receipt
---
## 🔗 Routes registered
| Purpose | Route name | URL |
|---|---|---|
| Checkout QR page | `crypto.checkout` | `GET /payment/crypto/checkout/{token}` |
| Status polling | `crypto.status` | `GET /payment/crypto/status/{token}` |
| Coin selection (AJAX) | `crypto.select_coin` | `POST /payment/crypto/select-coin/{token}` |
| Customer return URL | `crypto.return` | `GET /payment/crypto/return/{token}` |
| Manual cron trigger | `crypto.cron` | `GET /payment/crypto/cron?key=...` |
---
## ⏰ Cron / Worker Setup
Add **one** of:
```cron
* * * * * cd /path/to/site && php artisan crypto:match >> storage/logs/crypto-cron.log 2>&1
```
or hit the HTTP endpoint via your hosting cron panel:
```
* * * * * curl -s "https://yourstore.com/payment/crypto/cron?key=YOUR_CRON_KEY"
```
The cron secret key is auto-generated on first activation and shown in admin settings.
---
## 📧 Email Notifications (Botble SMTP)
When a payment is confirmed, the plugin uses Botble's standard `EmailHandler` (which respects whatever SMTP/Mailgun/etc. you have configured globally in Botble). Two emails are sent:
1.**To admin** — order ID, amount, txhash, block explorer link
2.**To customer** — "Payment received" with order summary
Templates live at `resources/views/email-confirmed.blade.php` and are fully editable in the Botble email-templates admin panel.
---
## 🔐 Security
- RPC URLs and wallet addresses are stored encrypted in `setting` table (Botble's standard storage)
- Cron endpoint requires a secret key
- Checkout page can only be accessed with the unique `order.token` (UUID, not guessable)
- Payment confirmation is **double-verified**: matcher checks tx exists on-chain via your own RPC URL, then confirms amount + min-confirmations before marking paid
- Idempotent — re-running cron on a confirmed order is a no-op
---
## 🧪 Testing
1. Activate the plugin
2. Go to **Payment Methods → Crypto by Codeupp**, fill in **one** coin (say USDT-BEP20):
- Wallet: your BSC address
- RPC URL: any working BSC RPC (`https://bsc.publicnode.com`)
3. Place a test order on your storefront
4. On the QR page, send the exact crypto amount to the displayed address
5. Within 1-2 cron ticks (≤2 minutes) the order will flip to **Completed** and you'll get the email
---
## 👑 Why Choose Maryam International LLC
We are a **registered professional UAE-based software company** building world-class digital products. Visit [codeupp.xyz](https://codeupp.xyz).
**Tech we master:** Laravel, Botble, React, Vue, Next.js, Node, Python, Solidity, smart contracts, payment gateways, AI/LLMs, mobile (Flutter / Swift / Kotlin), AWS / GCP / Azure, DevOps.
**What we build:** marketplaces, SaaS platforms, mobile apps, custom CMS plugins, blockchain dApps, AI bots, payment integrations.
**Why hire us:**
- Registered, accountable UAE company
- Your satisfaction is our top priority
- Full-stack mastery — one team, end-to-end
- Fast WhatsApp support in EN / HI / UR / AR
- Lifetime updates + 6 months priority support
---
## 📞 Contact
-**Website:** [codeupp.xyz](https://codeupp.xyz)
-**Email:** maryaminternationalllc@gmail.com · codeupp.xyz@gmail.com
-**WhatsApp:** [+971 55 368 2656](https://wa.me/971553682656)
-**Based in:** UAE 🇦🇪 — Serving worldwide 🌍
>**Have an idea? Send us a WhatsApp. We reply within minutes, not days.**
---
**© Maryam International LLC — [codeupp.xyz](https://codeupp.xyz)**
*Your satisfaction is our top priority. We can build anything you imagine.*
Have doubt? Contact us on WhatsApp
Our product is high quality. Contact us for any kind of custom work.
Last update:
May 04, 2026 02:12 AM
Published:
May 02, 2026 05:45 AM
Version:
v1.0.2
Category:
Tags: