AccountHub — Auto Account Shop
Hệ thống bán tài khoản premium tự động: sync Google Sheet, xác nhận chuyển khoản ngân hàng, giao account qua email, thông báo Telegram.
by AccountHub · github.com/vincentdang92/accounthub-plugin · website
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/vincentdang92/accounthub-plugin/archive/refs/heads/master.zipAccountHub — Auto Account Shop Plugin
Plugin WordPress bán tài khoản premium tự động: sync Google Sheets, xác nhận chuyển khoản qua SePay, giao account qua email, thông báo Telegram.
✨ Tính năng
| Tính năng | Mô tả |
|---|---|
| 💳 Thanh toán CK tự động | Sinh mã CK + QR VietQR riêng cho mỗi đơn |
| ⚡ Xác nhận real-time | SePay webhook → match mã → hoàn đơn < 2 giây |
| 📧 Giao account qua email | Email HTML đẹp, giao ngay khi đơn completed |
| ✈️ Telegram notify | Thông báo admin + khách hàng (nếu có chat ID) |
| 📊 Sync Google Sheets | Pull (cron) hoặc Push (Apps Script real-time) |
| 🔍 Tra cứu đơn | Shortcode cho khách tự tra cứu theo mã CK |
| 🏷️ Hiển thị tồn kho | Badge stock real-time trên trang sản phẩm |
| 🗃️ Quản lý kho | Thêm tay / import CSV / xem & xóa account |
📦 Yêu cầu hệ thống
| Yêu cầu | Tối thiểu |
|---|---|
| WordPress | 6.0+ |
| WooCommerce | 7.0+ |
| PHP | 8.0+ |
| SSL | Bắt buộc (HTTPS) — SePay webhook yêu cầu |
| MySQL | 5.7+ hoặc MariaDB 10.3+ |
📁 Cấu trúc plugin
accounthub/
├── accounthub.php ← Entry point (autoload + boot)
├── uninstall.php ← Cleanup DB khi xóa plugin
├── google-apps-script.js ← Script cho Google Sheets (Push mode)
├── includes/
│ ├── Core/
│ │ ├── Plugin.php ← Bootstrap, đăng ký tất cả hooks
│ │ ├── Installer.php ← Tạo bảng DB + set defaults khi activate
│ │ ├── Frontend.php ← Checkout fields, delivery card, enqueue assets
│ │ └── Shortcodes.php ← [ah_order_lookup] và [ah_stock]
│ ├── Payment/
│ │ ├── Gateway.php ← WooCommerce payment gateway
│ │ ├── BankTransfer.php ← Tạo mã CK unique, QR VietQR, expire cron
│ │ └── SepayWebhook.php ← Nhận & xử lý webhook SePay
│ ├── Delivery/
│ │ └── AccountDelivery.php ← Giao account khi đơn completed
│ ├── Telegram/
│ │ └── Notifier.php ← Gửi thông báo Telegram
│ ├── Sync/
│ │ └── SheetSync.php ← Sync Google Sheets → DB (Pull & Push)
│ └── Admin/
│ ├── Menu.php ← Admin menu & dashboard
│ ├── Settings.php ← Trang cài đặt
│ ├── AccountManager.php ← Quản lý kho account
│ └── Ajax.php ← Admin AJAX endpoints
├── templates/
│ ├── payment-info.php ← QR + mã CK trên trang cảm ơn
│ ├── email-delivery.php ← Email giao account cho khách
│ └── email-payment-info.php ← Email thông tin CK
└── public/
├── css/
│ ├── admin.css ← Style admin dashboard
│ └── frontend.css ← Style trang khách (delivery card, badges)
└── js/
├── admin.js ← Logic admin (stats refresh, sync, resend)
└── frontend.js ← Copy button, countdown timer
⚙️ Cài đặt & Cấu hình
Bước 1 — Upload plugin
Upload toàn bộ thư mục accounthub/ vào:
wp-content/plugins/accounthub/
Vào WP Admin → Plugins → Activate AccountHub.
Plugin sẽ tự tạo 3 bảng DB và set giá trị mặc định khi activate.
Bước 2 — Tạo sản phẩm WooCommerce
- Products → Add New
- Loại sản phẩm: Simple → Virtual → Downloadable
- Ghi lại Product ID (số trong URL khi edit, VD:
?post=123)
Bước 3 — Cấu hình thông tin ngân hàng
AccountHub → Cài đặt → Thông tin ngân hàng
| Trường | Ví dụ |
|---|---|
| Tên ngân hàng | MB Bank |
| Số tài khoản | 0123456789 |
| Tên chủ tài khoản | NGUYEN VAN A |
| Bank BIN (VietQR) | 970422 (MB Bank) |
| Prefix mã CK | AH (mã sẽ có dạng AH1A2B3C4D) |
| Hết hạn đơn (phút) | 15 |
🔗 Tra BIN ngân hàng: vietqr.io/danh-sach-ngan-hang
Bước 4 — Cấu hình SePay
- Đăng ký tại sepay.vn và kết nối tài khoản ngân hàng
- SePay Dashboard → Webhooks → Tạo webhook mới
- Điền URL webhook (copy từ trang Cài đặt):
https://your-site.com/wp-json/accounthub/v1/sepay-webhook - Copy API Key → dán vào AccountHub → Cài đặt → SePay API Key
Bước 5 — Cấu hình Telegram Bot (tuỳ chọn)
- Nhắn @BotFather →
/newbot→ lấy Bot Token - Lấy Admin Chat ID: nhắn @userinfobot
- Dán vào AccountHub → Cài đặt → Telegram
- Nhấn Test kết nối để kiểm tra
⚠️ Bot chỉ gửi được cho khách nếu họ đã nhắn tin với bot trước (Telegram policy). Cần lưu
_ah_tg_chat_idtrong order meta.
Bước 6 — Cấu hình Google Sheets Sync
Option A — Pull (cron tự động mỗi X phút):
- Mở Google Sheet → Share → Anyone with link → Viewer
- Dán URL vào AccountHub → Cài đặt → Google Sheet URL
- Chọn Sync interval
- Test bằng cách vào AccountHub → Sync Sheet → ▶ Sync ngay
Option B — Push real-time (khuyến nghị):
- AccountHub → Cài đặt → Google Sheets → API Key (Push) — tạo 1 key bất kỳ, VD:
mysecretkey123 - Mở Google Sheet → Extensions → Apps Script
- Paste toàn bộ nội dung file
google-apps-script.js - Chỉnh CONFIG:
const CONFIG = { WP_URL: 'https://your-site.com/wp-json/accounthub/v1/sheet-push', API_KEY: 'mysecretkey123', // ← key vừa tạo ở bước 1 SHEET_NAME: 'Sheet1', }; - Save → Deploy → Web App (Execute as: Me, Access: Anyone)
- Cài trigger: Triggers → pushOnChange → On spreadsheet change
Bước 7 — Format Google Sheet
| A: product_id | B: email | C: password | D: note | E: status |
|---|---|---|---|---|
| 123 | acc1@gmail.com | Pass@123 | Profile 1 | |
| 123 | acc2@gmail.com | Pass@456 | Profile 2 | |
| 456 | adobe@mail.com | Adobe123 |
- product_id: ID sản phẩm WooCommerce
- status: Để trống, script tự điền
pushedsau khi sync thành công
Bước 8 — Kích hoạt Payment Gateway
WooCommerce → Settings → Payments → AccountHub — Chuyển khoản ngân hàng → Enable
Bước 9 — Tạo trang tra cứu đơn (tuỳ chọn)
- Pages → Add New → Tên: "Tra cứu đơn hàng"
- Nội dung:
[ah_order_lookup] - Publish → link trang vào menu header/footer
🧩 Shortcodes
[ah_order_lookup]
Form tra cứu đơn hàng theo mã chuyển khoản.
[ah_order_lookup]
Hiển thị:
- Input nhập mã CK (VD:
AH1A2B3C) - Trạng thái đơn + thanh toán bằng tiếng Việt
- Hướng dẫn hành động tiếp theo
- Link đến My Account nếu đơn đã hoàn thành
[ah_stock]
Badge hiển thị số lượng tồn kho.
[ah_stock product_id="123"]
[ah_stock product_id="123" show_zero="no"]
[ah_stock product_id="123" threshold_low="3"]
[ah_stock product_id="123" label="Còn hàng"]
| Thuộc tính | Mặc định | Mô tả |
|---|---|---|
product_id |
(tự lấy) | ID sản phẩm. Để trống sẽ lấy SP của trang hiện tại |
show_zero |
yes |
no = ẩn badge khi hết hàng |
threshold_low |
5 |
Ngưỡng hiển thị màu vàng "sắp hết" |
label |
(tự sinh) | Nhãn tùy chỉnh thay thế nhãn mặc định |
| Trạng thái | Màu | Ví dụ |
|---|---|---|
| > threshold | 🟢 Xanh | "🟢 Còn 12 sản phẩm" |
| ≤ threshold | 🟡 Vàng | "🟡 Còn 3 sản phẩm — sắp hết" |
| Hết hàng | 🔴 Đỏ | "🔴 Hết hàng" |
💡 Badge tự động xuất hiện dưới giá trên mọi trang sản phẩm — không cần nhúng shortcode thủ công.
🗃️ Quản lý kho Account
Thêm tay
AccountHub → Kho Account → Thêm account thủ công → Chọn sản phẩm → điền email/password/note → Thêm
Import CSV hàng loạt
AccountHub → Kho Account → Import CSV hàng loạt
Format (có header, dòng 1 là tiêu đề):
product_id,email,password,note
123,acc1@gmail.com,Pass@123,Profile 1
123,acc2@gmail.com,Pass@456,Profile 2
456,adobe@mail.com,Adobe123,
Import qua API (từ hệ thống ngoài)
POST /wp-json/accounthub/v1/sheet-push
X-AccountHub-Key: {ah_sheet_api_key}
Content-Type: application/x-www-form-urlencoded
csv=product_id%2Cemail%2Cpassword%2Cnote%0A123%2Cacc%40gmail.com%2Cpass123%2C
🔄 Luồng hoạt động
Khách checkout
↓
WooCommerce tạo đơn PENDING
↓
Plugin sinh mã CK unique (VD: AH1A2B3C) + QR VietQR
↓
Hiển thị thông tin ngân hàng + countdown trên trang cảm ơn
Gửi email xác nhận đơn kèm thông tin CK
↓
Khách chuyển khoản (ghi đúng nội dung: AH1A2B3C)
↓
SePay phát hiện GD → gọi webhook → plugin so khớp mã + số tiền (±1.000đ)
↓
WooCommerce order → COMPLETED
Hủy cron expire đơn
↓
Plugin pop account từ kho (FOR UPDATE + transaction, tránh race condition)
↓
Gửi email cho khách (HTML đẹp, kèm email/password account)
Telegram notify → Admin
Telegram notify → Khách (nếu có chat_id)
↓
Account hiển thị trên trang Thank You + My Account → Orders
🛡️ Bảo mật
| Biện pháp | Chi tiết |
|---|---|
| Webhook auth | hash_equals() với X-Sepay-Key — chống timing attack |
| Tách API key | SePay key và Sheet Push key riêng biệt |
| Race condition | FOR UPDATE + MySQL transaction trong pop_account() |
| Mã CK unique | wp_generate_password(8) — tránh collision |
| Admin AJAX | check_ajax_referer() + current_user_can() |
| Sanitize | URL→esc_url_raw, số→absint, BIN→numeric only |
| HPOS compatible | $order->update_meta_data() thay update_post_meta() |
| Uninstall clean | Xóa toàn bộ tables + options khi plugin bị Delete |
📦 Database Tables
| Table | Mô tả |
|---|---|
wp_ah_accounts |
Kho account (available / sold / reserved) |
wp_ah_payment_logs |
Log thanh toán CK, transfer code, trạng thái match |
wp_ah_delivery_logs |
Lịch sử giao hàng (email_sent, tg_sent) |
🔌 REST API Endpoints
| Method | Endpoint | Auth | Mô tả |
|---|---|---|---|
POST |
/wp-json/accounthub/v1/sepay-webhook |
X-Sepay-Key |
SePay gọi về khi có GD |
GET |
/wp-json/accounthub/v1/order/{code} |
Public | Tra cứu đơn theo mã CK |
POST |
/wp-json/accounthub/v1/sheet-push |
X-AccountHub-Key |
Push CSV từ Apps Script |
❓ Troubleshooting
SePay không webhook về:
- Site phải có SSL (https) — bắt buộc
- Kiểm tra URL webhook đúng chưa:
WP Admin → AccountHub → Cài đặt → SePay → Webhook URL - Kiểm tra API Key khớp giữa SePay Dashboard và AccountHub Settings
- Thử tắt security plugin (Wordfence...) nếu block request
Account không giao sau khi đơn completed:
- Kiểm tra kho còn hàng không: AccountHub → Kho Account
- Kiểm tra
product_idtrong sheet có đúng ID WooCommerce không - Xem Order Notes trong đơn hàng để biết lý do
- Admin có thể Gửi lại từ Order → Order Notes → "Gửi lại account"
Telegram không nhận được:
- Test kết nối: AccountHub → Cài đặt → Telegram → Test kết nối
- Bot phải được user nhắn tin trước (Telegram policy)
- Dùng @userinfobot để lấy đúng Chat ID
Google Sheet không sync (Pull mode):
- Share sheet: Anyone with the link → Viewer
- Kiểm tra format cột (A=product_id, B=email, C=password)
- Thử sync tay: AccountHub → Sync Sheet → ▶ Sync ngay
- Kiểm tra error log:
wp-content/debug.log(cần bậtWP_DEBUG_LOG)
Google Apps Script không push được:
- Kiểm tra
CONFIG.WP_URLđúng URL site - Kiểm tra
CONFIG.API_KEYkhớp với AccountHub → Cài đặt → Google Sheets → API Key (Push) - Deploy lại Apps Script với quyền: Execute as Me, Access Anyone
Shortcode [ah_order_lookup] không hiện:
- Kiểm tra plugin đã Activate chưa
- Thử deactivate/activate lại để flush rewrite rules
📋 Changelog
v1.0.0
- ✅ Luồng bán account tự động hoàn chỉnh
- ✅ Tích hợp SePay webhook
- ✅ Sync Google Sheets (Pull + Push)
- ✅ Thông báo Telegram
- ✅ Shortcode tra cứu đơn + hiển thị tồn kho
- ✅ HPOS compatible (WooCommerce High-Performance Order Storage)
- ✅ Uninstall hook cleanup