WP Manifestindependent plugin directory
manifest / ecommerce / accounthub-plugin

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

★ 0stars
0forks

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.zip

AccountHub — 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

  1. Products → Add New
  2. Loại sản phẩm: Simple → Virtual → Downloadable
  3. 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

  1. Đăng ký tại sepay.vn và kết nối tài khoản ngân hàng
  2. SePay Dashboard → Webhooks → Tạo webhook mới
  3. Điền URL webhook (copy từ trang Cài đặt):
    https://your-site.com/wp-json/accounthub/v1/sepay-webhook
  4. 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)

  1. Nhắn @BotFather → /newbot → lấy Bot Token
  2. Lấy Admin Chat ID: nhắn @userinfobot
  3. Dán vào AccountHub → Cài đặt → Telegram
  4. 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_id trong order meta.


Bước 6 — Cấu hình Google Sheets Sync

Option A — Pull (cron tự động mỗi X phút):

  1. Mở Google Sheet → Share → Anyone with link → Viewer
  2. Dán URL vào AccountHub → Cài đặt → Google Sheet URL
  3. Chọn Sync interval
  4. Test bằng cách vào AccountHub → Sync Sheet → ▶ Sync ngay

Option B — Push real-time (khuyến nghị):

  1. AccountHub → Cài đặt → Google Sheets → API Key (Push) — tạo 1 key bất kỳ, VD: mysecretkey123
  2. Mở Google Sheet → Extensions → Apps Script
  3. Paste toàn bộ nội dung file google-apps-script.js
  4. 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',
    };
  5. Save → Deploy → Web App (Execute as: Me, Access: Anyone)
  6. 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 pushed sau 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)

  1. Pages → Add New → Tên: "Tra cứu đơn hàng"
  2. Nội dung:
    [ah_order_lookup]
  3. 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_id trong 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ật WP_DEBUG_LOG)

Google Apps Script không push được:

  • Kiểm tra CONFIG.WP_URL đúng URL site
  • Kiểm tra CONFIG.API_KEY khớ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